PillarX is a browser-based web3 wallet and app hub. The current wallet flow is built around a browser extension, phone OTP login, and an EOA-delegation account model for EIP-7702 transactions.
Building a PillarX app? See src/apps/README.md.
Caution
App submissions must not render iframe tags.
- Install dependencies:
npm install- Copy the example environment file:
cp .env.example .env- Fill in any project-specific values in
.env. The most commonly needed values are:
VITE_ETHERSPOT_BUNDLER_API_KEY=...
VITE_ALCHEMY_API_KEY=...
VITE_USE_TESTNETS=true
VITE_REOWN_PROJECT_ID=...
VITE_PAYMASTER_URL=...
VITE_PULSE_NODE_URL=...
VITE_ONRAMP_JWT_URL=...VITE_USE_TESTNETS=true enables testnet-aware behavior while still allowing the app to show supported mainnet portfolio data where applicable.
Run the Vite dev server:
npm run devThe app is served over HTTPS by Vite. Open the local URL printed by Vite, usually:
https://localhost:5173The login flow is available at:
https://localhost:5173/loginBuild the Manifest V3 extension:
npm run build:extensionLoad it in Chrome:
- Open
chrome://extensions. - Enable Developer mode.
- Click Load unpacked.
- Select the
build-extensiondirectory. - Pin the PillarX extension and open the popup.
The extension build emits:
- popup entry:
extension/popup.html - side panel entry:
extension/sidepanel.html - options entry:
extension/options.html - background service worker:
src/extension/background.ts
- Authentication uses the phone OTP flow and local wallet vault.
- The app currently targets a single account mode: EOA delegation.
- Send flows use the native viem-based transaction client.
- Etherspot bundler access should use
VITE_ETHERSPOT_BUNDLER_API_KEY. - Dapp transaction approvals can show Alchemy asset-change simulations when
VITE_ALCHEMY_API_KEYis configured. - Portfolio and graph data are cached locally and refreshed in the background. Manual refresh still shows loading UI so users can see the refresh is happening.
npm run dev
npm run build
npm run build:extension
npm run lint
npm run testFor extension work, run npm run build:extension before reloading the unpacked extension in Chrome.
If bundler or transaction requests hit rate limits, configure your own Etherspot Bundler API key from the Etherspot Portal.
If the extension popup appears stale after changes, rebuild with npm run build:extension, then reload the unpacked extension from chrome://extensions.
If local HTTPS warnings appear, accept the local development certificate warning generated by Vite's SSL plugin.