Contributing
Guidelines for contributing to Rhizome projects.
Development Setup
Standard Setup
Most projects need Rust and/or Bun:
bash
# Rust projects (Moss, Resin)
cargo build
cargo test
# TypeScript/docs
bun install
bun run devNix (Optional)
For reproducible environments, projects include flake.nix:
bash
nix develop
# or with direnv: direnv allowThis ensures exact versions of all dependencies but isn't required.
Commit Conventions
We use Conventional Commits:
type(scope): description
[optional body]Types:
feat: New featurefix: Bug fixdocs: Documentation onlyrefactor: Code change that neither fixes a bug nor adds a featuretest: Adding or updating testschore: Maintenance tasks
Examples:
feat(parser): add support for Lua 5.4 syntax
fix(audio): prevent clipping in sine oscillator
docs(api): document Field trait combinators
refactor(mesh): extract half-edge operations to moduleCode Style
Rust
- Run
cargo fmtbefore committing - Run
cargo clippyand address warnings - Prefer explicit over implicit
- No trait default implementations (compiler should enforce completeness)
- Named structs over tuples for return values
TypeScript
- Use Bun as the runtime
- Prefer functional patterns
- Types are required, no
any
Pull Requests
- Fork the repository
- Create a feature branch from
master - Make your changes with conventional commits
- Ensure tests pass:
cargo test - Open a PR with a clear description
Documentation
Each project has a docs/ directory with VitePress:
bash
cd docs
bun install
bun run devWhen adding features, update relevant documentation. Prefer updating existing docs over creating new files.
Project-Specific Guidelines
- Moss: See
CLAUDE.mdfor detailed behavioral rules and design philosophy - Lotus: Check
docs/development.mdfor build instructions - Resin: See
docs/philosophy.mdfor design principles - Sap: Expression language; see crate docs
- Liana: API bindings; see
liana-corefor IR types - Cambium: See
docs/philosophy.mdfor pipeline design - Canopy: See
CLAUDE.mdfor UI design principles
Questions?
Open an issue in the relevant repository or start a discussion.