Wizard-based configuration interface for real-world asset token projects across multiple blockchain ecosystems.
This project is currently in development.
OpenSSF Scorecard Scorecard supply-chain security OpenSSF Best Practices CLA Assistant License: AGPL v3 CI Conventional Commits Commitizen friendly TypeScript React Tailwind CSS Vite pnpm
- Monorepo Structure
- Getting Started
- Available Scripts
- Local development with openzeppelin-ui and openzeppelin-adapters
- Project Structure
- Tech Stack
- Code Style
- Commit Convention
- Contributing
- License
This project is organized as a monorepo with the following applications and packages:
- apps/rwa-wizard: The main React application for configuring RWA token projects.
- packages/codegen-core: Chain-agnostic code generation primitives such as file trees, ZIP assembly, validation, template sources, and deterministic hashing.
- packages/codegen-rwa-common: Shared RWA-domain generator helpers such as ownership and role resolution.
- packages/codegen-rwa-stellar: The Stellar/Soroban RWA project generator.
- packages/config: Chain-agnostic
RWAConfigtypes and defaults shared by generators and the app. - packages/components: Shared React UI components.
- packages/hooks: Shared React hooks for state management and business logic.
- Node.js: v20+ (LTS recommended)
- pnpm: v10+ (
corepack enablerecommended)
- Clone the repository:
git clone https://github.com/OpenZeppelin/rwa-wizard.git
cd rwa-wizard- Install dependencies:
pnpm install- Build all packages:
pnpm build- Start the development server:
pnpm dev- Open your browser and navigate to
http://localhost:5173
| Script | Description |
|---|---|
pnpm dev |
Start the development server (apps/rwa-wizard) |
pnpm dev:all |
Start all workspace packages in watch mode |
pnpm build |
Build all packages and apps |
pnpm build:packages |
Build all workspace packages under packages/* |
pnpm build:app |
Build only the wizard app |
pnpm test |
Run tests across the workspace |
pnpm test:all |
Run all tests in parallel |
pnpm test:coverage |
Run tests with coverage reports |
pnpm typecheck |
Run TypeScript type checking |
pnpm lint |
Run ESLint across the workspace |
pnpm lint:fix |
Fix ESLint issues |
pnpm format |
Format code with Prettier |
pnpm format:check |
Check formatting without changes |
pnpm fix-all |
Run Prettier, then ESLint fix |
pnpm dev:uikit:local |
Use local openzeppelin-ui packages only |
pnpm dev:adapters:local |
Use local openzeppelin-adapters packages only |
pnpm dev:local |
Use local openzeppelin-ui and openzeppelin-adapters packages |
pnpm dev:npm |
Restore npm-based UI and adapter dependencies |
pnpm commit |
Create a commit using Commitizen |
pnpm changeset |
Create a changeset for versioning |
pnpm clean |
Clean build artifacts |
This project can consume packages from openzeppelin-ui (@openzeppelin/ui-*) and openzeppelin-adapters (@openzeppelin/adapter-*). See docs/LOCAL_DEVELOPMENT.md for clone layout, troubleshooting, and workflow details.
-
Enable local UI + adapter packages:
pnpm dev:local
This delegates to the published
oz-ui-devCLI, which builds and packs the configured families from your local checkouts before reinstalling RWA Wizard against those packed artifacts. -
Enable only local UI packages:
pnpm dev:uikit:local
-
Enable only local adapter packages:
pnpm dev:adapters:local
-
Switch back to npm packages (before committing):
pnpm dev:npm
-
Custom paths (optional):
LOCAL_UI_PATH=/path/to/openzeppelin-ui LOCAL_ADAPTERS_PATH=/path/to/openzeppelin-adapters pnpm dev:local
rwa-wizard/
βββ apps/
β βββ rwa-wizard/ # Main React application
β βββ src/ # Application source code
β βββ index.html # HTML entry point
β βββ vite.config.ts # Vite configuration
β βββ package.json # App dependencies
βββ packages/
β βββ codegen-core/ # Chain-agnostic codegen infrastructure
β β βββ src/
β β βββ tsdown.config.ts # Build configuration
β β βββ package.json
β βββ codegen-rwa-common/ # Shared RWA-domain generator helpers
β β βββ src/
β β βββ tsdown.config.ts # Build configuration
β β βββ package.json
β βββ codegen-rwa-stellar/ # Stellar/Soroban RWA generator
β β βββ src/
β β βββ tsdown.config.ts # Build configuration
β β βββ package.json
β βββ config/ # Shared RWAConfig schema and defaults
β β βββ src/
β β βββ tsdown.config.ts # Build configuration
β β βββ package.json
β βββ components/ # Shared UI components
β β βββ src/
β β βββ tsdown.config.ts # Build configuration
β β βββ package.json
β βββ hooks/ # Shared React hooks
β βββ src/
β βββ tsdown.config.ts # Build configuration
β βββ package.json
βββ scripts/ # Development helper scripts
βββ specs/ # Feature specifications
βββ test/ # Shared test setup
βββ .changeset/ # Versioning configuration
βββ .github/ # GitHub Actions workflows
βββ .husky/ # Git hooks
βββ package.json # Root workspace configuration
βββ pnpm-workspace.yaml # PNPM workspace definition
βββ tsconfig.base.json # Base TypeScript configuration
βββ eslint.config.cjs # ESLint configuration
βββ tailwind.config.cjs # Tailwind CSS configuration
βββ vitest.shared.config.ts # Shared test configuration
- React 19: Modern React with hooks and concurrent features
- TypeScript 5: Type-safe development
- Vite 7: Fast development server and build tool
- Tailwind CSS: Utility-first CSS framework
- Vitest: Fast unit testing framework
- tsdown: TypeScript library bundler
- pnpm: Fast, disk-efficient package manager
- ESLint + Prettier: Code quality and formatting
- Husky + lint-staged: Git hooks for quality gates
- Commitlint: Conventional commit enforcement
- Changesets: Version management and changelogs
This project uses Husky to enforce code quality:
- pre-commit: Runs lint-staged (Prettier β ESLint)
- pre-push: Runs full lint and format check
- commit-msg: Enforces conventional commit format
For consistent code formatting:
# Format and lint all files
pnpm fix-allThis project follows Conventional Commits. Use the interactive commit tool:
pnpm commitExamples:
feat(rwa-wizard): add wizard step scaffold
fix(hooks): resolve state update race condition
docs: update README with setup instructions
chore: update dependencies
- Create a feature branch from
main - Make your changes following the code style guidelines
- Write tests for new functionality
- Create a changeset:
pnpm changeset - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
This project uses @openzeppelin/ui-components for shared UI components.