Thank you for your interest in contributing to ExtendDB!
- Rust 1.88+ (stable)
- PostgreSQL 14+
- Python 3.10+ (for integration tests)
Familiarize yourself with ExtendDB's design and developer expectations by reviewing:
We suggest following the workflow below for proposing and contributing improvements to ExtendDB:
- Find or create an issue in ExtendDB's Open Issues that describes the fix, improvement or feature that you plan to work on.
- For large changes, refactorings, new features, or changes to API specifications, wire protocol, backend storage traits, authentication or authorization, schema or CLI commands, please submit an RFC as a pull request and link it to the GitHub issue. Allow time for the RFC to be reviewed, discussed and voted on.
- Create a fork of the ExtendDB 'main' branch.
- Clone your fork into your development environment.
- Make, build, test and self-review your changes on a feature branch on your fork.
- Make your changes with clear, focused commits.
- Ensure all tests pass and code is properly formatted.
- Submit your changes as a pull request, linked to the issue and (if applicable) RFC that your work addresses.
cargo build --workspace# Rust unit tests
cargo test --workspace
# Integration tests (requires a running extenddb server)
devtools/run-tests --extenddb --pytestAll contributions must pass:
cargo fmt --check
cargo clippy -- -W clippy::pedantic -W clippy::unwrap_used -W clippy::expect_used- Use
cargo fmtbefore committing. - Address all clippy warnings or add
#[allow(...)]with a justification comment. - Avoid
.unwrap()and.expect()in library crates — use?or explicit error handling.
ExtendDB uses two lightweight processes to keep core decisions reviewable:
- ADR (
docs/adr/) — records a decision after it has been made, in four sections: Context, Options Considered, Decision, Consequences. Use for narrower, internal calls (for example, "we choseringoveropenssl" or "ADRs live indocs/adr/"). - RFC (
docs/rfcs/) — proposes a change before it is made and invites a comment period. Use for changes to the wire protocol, theStoragetrait, the auth model, on-disk format, or the public CLI surface. Seedocs/rfcs/README.mdfor the lifecycle.
If you are not sure which to write, open an issue describing the change. A maintainer will tell you which path fits.
Some areas are protected by .github/CODEOWNERS — PRs
touching them require approval from the listed owners.
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.