Thanks for your interest in contributing!
By participating, you agree to follow the Code of Conduct (CODE_OF_CONDUCT.md).
We use the Developer Certificate of Origin (DCO) instead of a Contributor License Agreement (CLA).
- All commits in a PR must be signed off.
- Sign off your commits with:
git commit -s - The sign-off line looks like:
Signed-off-by: Your Name <your.email@example.com>
The full text is in DCO.md.
- Amend the most recent commit:
git commit --amend -s - Sign off all commits on your branch (interactive):
git rebase -i --signoff main
If you are employed, you are responsible for ensuring your employer's intellectual property policies permit your contribution. Many employment contracts include IP assignment clauses that may cover work done outside of office hours or on personal equipment.
If your employer requires a corporate sign-off or approval for open source contributions, please obtain it before submitting a pull request. By signing off your commits (DCO), you attest you have the right to contribute the work under the project's license terms.
- Rust toolchain (see
.github/workflows/ci.ymlfor the pinned version used in CI) - Cargo
# Native build
cargo build
# WASM build (compile check)
rustup target add wasm32-unknown-unknown
cargo build --target wasm32-unknown-unknownRun all tests:
cargo testRun all tests with all features:
cargo test --all-featuresRun a specific test:
cargo test test_nameRun tests with output:
cargo test -- --nocapture- Follow standard Rust conventions
- Use
cargo fmtto format your code - Use
cargo clippyto catch common mistakes - Add documentation comments for public APIs
- Include examples in doc comments where appropriate
- Unit tests go in the same file as the code they test (in
mod tests) - Integration tests go in the
tests/directory - Test both native and WASM targets when applicable
- Use descriptive test names that explain what is being tested
- Test both success and failure cases
- Test edge cases and boundary conditions
- Ensure tests are deterministic (avoid relying on timing unless necessary)
- All public APIs must have documentation comments
- Include examples in documentation where helpful
- Update the README if you add new features
- Explain phantom type usage clearly
-
Before submitting:
- Ensure all tests pass
- Run
cargo fmtandcargo clippy - Update documentation as needed
-
PR Description:
- Clearly describe what the PR does
- Reference any related issues
- Include examples of usage if adding new features
- List any breaking changes
-
Review Process:
- PRs require at least one review before merging
- Address reviewer feedback promptly
- Keep PRs focused - one feature/fix per PR
- Use the issue tracker to report bugs
- Include a minimal reproducible example
- Describe expected vs actual behavior
- Include environment details (OS, Rust version)
- Open an issue to discuss new features first
- Explain the use case and motivation
We especially welcome:
- Performance improvements
- Additional test coverage
- Documentation improvements
- Bug fixes
- New examples
Feel free to open an issue for any questions about contributing.
By contributing, you agree that your contributions will be licensed under the project's dual license (MIT OR Apache-2.0).
All Rust source files (*.rs) must start with an SPDX header block.
Use:
// SPDX-License-Identifier: MIT OR Apache-2.0
// SPDX-FileCopyrightText: 2025-2026 ObzenFlow Contributors
// https://obzenflow.devDo not add individual names to per-file headers. Attribution lives in LICENSE-MIT and LICENSE-APACHE.
Please do not open public issues for security vulnerabilities. See SECURITY.md.