Development Setup
How to set up your local development environment for ThunderDB, including prerequisites, building, testing, IDE configuration, and development workflows.
Welcome to the ThunderDB Contributor Guide. ThunderDB is a distributed HTAP (Hybrid Transactional/Analytical Processing) database written in Rust, comprising 14 crates and approximately 75,600 lines of code. This guide provides everything you need to start contributing effectively.
ThunderDB is building the next generation of distributed databases that unify transactional and analytical workloads under a single system. By contributing, you will:
All contributors are expected to adhere to the ThunderDB Code of Conduct. We are committed to providing a welcoming and inclusive experience for everyone. Key principles:
Violations of the Code of Conduct should be reported to the maintainers at conduct@thunderdb.io. All reports will be reviewed promptly and confidentially.
ThunderDB welcomes contributions in many forms. You do not need to be a database internals expert to make a meaningful impact.
Code contributions are the most direct way to improve ThunderDB. Areas include:
All code contributions must include appropriate tests and pass the full CI pipeline before merging.
Good documentation is essential for a database system. Contributions include:
///), OpenAPI specs for REST endpoints, and protocol documentation.Expanding test coverage improves reliability and catches regressions. Test contributions include:
proptest to verify invariants across randomly generated inputs.criterion to track regressions and validate optimizations.Even without writing code, you can contribute by improving the issue tracker:
The standard workflow for contributing to ThunderDB is:
Find or create an issue. Browse the issue tracker for issues labeled good-first-issue, help-wanted, or up-for-grabs. Alternatively, create a new issue describing what you want to work on.
Fork and clone. Fork the ThunderDB repository to your GitHub account and clone it locally.
Create a branch. Create a feature branch from main:
git checkout -b feature/your-feature-name
Develop. Make your changes, following the Development Setup guide and the coding conventions described in the Codebase Guide.
Test. Run the full test suite and add new tests for your changes. See the Testing guide for details.
Commit. Write clear, descriptive commit messages. Use conventional commit format:
feat(storage): add prefix compression for B+Tree leaf pages
fix(protocol): handle malformed MySQL handshake packets
docs(contributor): add codebase architecture diagram
test(txn): add property tests for MVCC snapshot isolation
Push and open a pull request. Push your branch and open a PR against main. Fill out the PR template completely:
Code review. Address review feedback. Maintainers will review for correctness, performance, code style, and test coverage.
Merge. Once approved and all CI checks pass, a maintainer will merge your PR.
ThunderDB follows these coding conventions:
cargo fmt using the project .rustfmt.toml configuration.cargo clippy with no warnings.thunder-common/src/error.rs. Avoid unwrap() and expect() in production code paths.txn for transaction, wal for write-ahead log).unsafe. All unsafe blocks must include a // SAFETY: comment explaining why the invariants are upheld.If you need help at any point:
How to set up your local development environment for ThunderDB, including prerequisites, building, testing, IDE configuration, and development workflows.
A detailed walkthrough of the ThunderDB codebase – workspace structure, crate dependency graph, key source files, external dependencies, and design patterns used throughout the project.
Comprehensive guide to ThunderDB’s testing strategy – unit tests, integration tests, ACID compliance tests, chaos tests, property-based tests, benchmarks, and CI/CD pipeline.
How ThunderDB versions, builds, packages, and publishes releases – covering version numbering, release checklists, binary builds, Docker images, Debian packages, changelogs, and post-release verification.
Was this page helpful?
Glad to hear it! Tell us how we can improve.
Sorry to hear that. Tell us how we can improve.