Thanks for your interest in contributing to the Open Wallet Standard! This guide will help you get started.
- Rust (stable toolchain)
- Node.js >= 20 (for Node bindings)
- Python >= 3.9 + Maturin (for Python bindings)
# Clone the repo
git clone https://github.com/open-wallet-standard/core.git
cd core
# Build the Rust workspace
cd ows && cargo build --workspace --release
# Build Node bindings
cd bindings/node && npm install && npx napi build --platform --release
# Build Python bindings
cd bindings/python && maturin develop --release# Rust tests
cd ows && cargo test --workspace
# Node tests
cd bindings/node && npm testcd ows && cargo fmt --all # Format Rust code
cd ows && cargo clippy --workspace -- -D warnings # Lint- Fork the repo and create a branch from
main. - Make your changes. Keep commits focused and use conventional commit messages (e.g.,
feat:,fix:,chore:). - Test. Ensure
cargo test --workspacepasses andcargo clippyis clean. - Open a PR against
mainwith a clear description of what changed and why.
- Keep PRs small and focused — one logical change per PR.
- Update documentation if your change affects the public API or CLI.
- Add tests for new functionality.
- Ensure CI passes before requesting review.
core/
├── ows/crates/
│ ├── ows-core/ # Types, CAIP parsing, errors
│ ├── ows-signer/ # HD derivation, signing, address generation
│ ├── ows-lib/ # FFI interface for language bindings
│ └── ows-cli/ # CLI tool
├── bindings/
│ ├── node/ # Node.js NAPI bindings
│ └── python/ # Python (PyO3/Maturin) bindings
├── docs/ # Specification documents
└── website/ # Static site (openwallet.sh)
Open a GitHub Issue with:
- Steps to reproduce
- Expected vs actual behavior
- OS, Rust version, and OWS version (
ows --version)
Open a discussion or an issue — we're happy to help.