OpenZeppelin UI Builder — a pnpm monorepo (Node ≥20.19.0, pnpm 10.28.2) containing a client-side React/Vite SPA that generates front-end UIs for smart contract interactions across multiple blockchain ecosystems (EVM, Stellar, Polkadot, Midnight, Solana). No backend, database, or external infrastructure is required.
Adapter packages (@openzeppelin/adapter-*) have been extracted to a separate repo: openzeppelin-adapters. This repo consumes them as published npm packages. For local adapter development, clone the sibling repo and use pnpm dev:adapters:local (see docs/LOCAL_DEVELOPMENT.md).
| Service | Command | Port | Notes |
|---|---|---|---|
| Vite dev server | pnpm dev |
5173 | Main app; requires pnpm build first |
Refer to the scripts section of the root package.json and the README for the full list. Highlights:
- Install:
pnpm install - Build:
pnpm build(must run beforepnpm dev) - Dev server:
pnpm dev(opens at http://localhost:5173) - Lint:
pnpm lint - Test:
pnpm test(runs Vitest for the builder app + script tests) - Format + lint fix:
pnpm fix-all - Local adapter dev:
pnpm dev:adapters:local(requires sibling../openzeppelin-adaptersclone) - Local UI kit dev:
pnpm dev:uikit:local(requires sibling../openzeppelin-uiclone)
- Build before dev: You must run
pnpm buildat least once beforepnpm devso the Vite dev server can resolve built outputs. - Ignored build scripts warning:
pnpm installmay show a warning about ignored build scripts (esbuild, protobufjs, etc.). This is expected and does not affect functionality. - Husky hooks: Pre-commit runs
pnpm fix-allon staged files. Pre-push runspnpm fix-allandpnpm update-export-versions. SetCI=trueto skip the commit-msg hook if needed. - API keys are optional: The app runs fully without Etherscan, Routescan, or WalletConnect API keys. Block explorer ABI auto-fetch won't work without them, but manual ABI paste works fine.
- Contract ABI can be fetched from Sourcify: Even without Etherscan API keys, the app can fetch ABIs from Sourcify for verified contracts.
- Adapter packages are external:
packages/adapter-*directories are excluded from the pnpm workspace (pnpm-workspace.yaml). Any leftoverpackages/adapter-*paths on disk are build artifacts, not workspace packages.