Thanks for your interest in contributing to Extro! Here's how to get started.
# Clone the repo
git clone https://github.com/askpext/extro.git
cd extro
# Prerequisites
rustup install stable
rustup target add wasm32-unknown-unknown
cargo install wasm-pack
# Build the CLI
cargo build -p extro-cli
# Run all tests
cargo test --workspace
# Run clippy
cargo clippy --workspace --all-targets -- -D warnings
# Check formatting
cargo fmt --all -- --check| Directory | Language | Purpose |
|---|---|---|
crates/core/ |
Rust | Domain logic, state machine, effects, tool registry |
crates/wasm/ |
Rust | wasm-bindgen bridge |
crates/agent/ |
Rust | Agent tracing layer |
cli/ |
Rust | CLI (scaffold, build, watch, test, package) |
extension/ |
JS | Browser extension shell (MV3) |
npm/runtime/ |
JS/TS | Published npm package @askpext/runtime |
- Make your changes in the relevant crate
- Run
cargo test --workspaceto verify - Run
cargo clippy --workspace --all-targets -- -D warnings - Run
cargo fmt --all
- Make changes in
extension/ornpm/runtime/ - Run
extro buildto verify the full pipeline works - If modifying
npm/runtime/, updatesrc/index.d.tstype definitions
- Start with the Rust core (
crates/core/src/lib.rs) - Add types, dispatch logic, and unit tests
- If it needs a WASM export, update
crates/wasm/src/lib.rs - If it needs browser interaction, update
extension/src/background/index.js - Update
AGENTS.mdso AI agents know about the new feature
- Fork the repo and create a feature branch
- Make your changes with tests
- Ensure CI passes:
cargo test --workspace && cargo clippy --workspace && cargo fmt --check - Open a PR with a clear description of what changed and why
- Link any related issues
- Rust: Follow standard Rust conventions. Use
cargo fmt. - JavaScript: Use ES modules, minimal dependencies, no bundler in source.
- Documentation: All public Rust items must have
///doc comments. - Tests: All new Rust features must have unit tests.
By contributing, you agree that your contributions will be licensed under the MIT License.