All contributors must sign our CLA before their first PR can be merged. When you open a PR, a bot will prompt you to sign by posting a comment. This is a one-time requirement.
- Fork and clone the repository
- Install Rust via rustup (the
rust-toolchain.tomlwill pin the version) - Install Node.js 20+ for commit hooks
- Run
npm installto set up Husky hooks and commitlint - Run
cargo build --workspaceto verify your setup
- Create a branch from
main - Make your changes
- Run
cargo fmt --allandcargo clippy --all-targets -- -D warnings - Run
cargo test --workspace - Commit with a conventional commit message
- Open a pull request
We use conventional commits, enforced by commitlint:
feat: add circle primitive to math crate
fix: correct NURBS knot validation edge case
docs: update architecture diagram
test: add proptest for boolean union
refactor: simplify arena allocation
- Rust:
rustfmtdefaults (enforced by CI) - TypeScript: Prettier + ESLint (see configs)
- No
unsafe, nounwrap(), nopanic!()in library code - All public items must have doc comments
See CLAUDE.md for the layer system and dependency rules. The key rule:
never add a dependency from a lower layer to a higher layer.
- Write unit tests alongside the code
- Use
proptestfor property-based tests where applicable - Add golden files for STEP/3MF round-trip tests
- Run the full suite with
cargo test --workspace