Thanks for your interest in Burrow! We welcome contributions from the Nostr and privacy communities.
- Fork the repo on GitHub
- Clone your fork:
git clone https://github.com/<you>/burrow.git - Create a branch:
git checkout -b feature/my-feature - Make your changes
- Push and open a Pull Request
See BUILD.md for detailed build instructions.
# Quick start
cd burrow/app
flutter pub get
flutter_rust_bridge_codegen generate
flutter run -d linux # or your platform- Run
cargo fmtbefore committing - Run
cargo clippy -- -D warnings— no warnings allowed - Follow standard Rust naming conventions
- Run
flutter analyze— no issues allowed - Follow Effective Dart style guide
- Use
flutter_lints(already configured)
- Strict mode enabled
- ESM modules (
"type": "module")
# Dart tests
cd app && flutter test
# Rust tests
cd app/rust && cargo test
# Dart analysis
cd app && flutter analyze
# Rust lints
cd app/rust && cargo clippy -- -D warnings
cd app/rust && cargo fmt --check- Dart unit tests go in
app/test/ - Rust unit tests go in
app/rust/tests/ - Integration tests go in
app/integration_test/ - Test new features. Test edge cases. Test error paths.
- One feature per PR — keep changes focused
- Describe what and why in the PR description
- Reference issues if applicable
- Tests required for new features and bug fixes
- CI must pass — fmt, clippy, analyze, test, cargo audit
main— stable, release-ready codefeature/*— new featuresfix/*— bug fixesdocs/*— documentation changes
This project uses bd (beads) for issue tracking:
bd ready # Find available work
bd show <id> # View issue details
bd update <id> --status in_progress
bd close <id>Do NOT open a public issue for security vulnerabilities.
Instead:
- Email the maintainer privately (see GitHub profile)
- Include a detailed description of the vulnerability
- Include steps to reproduce if possible
- Allow reasonable time for a fix before public disclosure
See SECURITY.md for the full security review and known issues.
Before making significant changes, review ARCHITECTURE.md to understand the system design. Key points:
- Rust handles all cryptography — MLS, NIP-44, key management. Never add crypto to the Dart side.
- MDK is the MLS engine — Don't reimplement MLS operations; use MDK's API.
- flutter_rust_bridge generates FFI bindings — modify Rust API signatures, then run
flutter_rust_bridge_codegen generate. - Riverpod for state management — use providers, not ad-hoc state.
By contributing, you agree that your contributions will be licensed under the MIT License.
Questions? Open a discussion on GitHub or reach out on Nostr. 🦫