Note
Found a bug? Please first search existing issues to avoid duplicates. If you find a related issue, add your details there. Otherwise, open a new issue with a reproducible example including Rust version, delta-kernel-rs version, code executed, and error message.
For trivial fixes, etc. please feel free to open a PR directly (Please see Getting you PR reviewed below). For larger changes, we follow a structured contribution process to ensure high-quality code:
- Start with an issue and/or design sketch: Open an issue describing what you want to contribute and why. Continue to step 2 after reaching some consensus. This helps us avoid wasted effort (perhaps you were building something that someone else was already pursuing or already explored and rejected). Including a design sketch will help drive consensus (often a simple diagram or bullet points outlining high-level changes is sufficient).
- Prototype/POC: Create a PR marked as prototype/draft (not intended to merge) and gather feedback to further de-risk the design. This PR is not intended to be merged but will guide the implementation and serve as a proving ground for the design. Then, pieces are torn out into smaller PRs that can be merged.
- Implementation: Finally, create PR(s) to implement the feature (production code, tests, thorough docs, etc.). Often the initial POC will be split into multiple smaller PRs (e.g., refactors, then feature additions, then public APIs specifically). Care should be taken to ensure each PR is easily review-able and thoroughly tested.
We invite everyone who would like their PRs reviewed to review other open PRs as well. Like most open source projects, our review bandwidth is limited, and help from users is greatly appreciated. This helps increase the overall review rate, and allows contributors to build credibility within the project.
PRs from contributors who do not review others' work will be lower priority, though we do try to review all PRs as promptly as possible.
We also encourage contributors to optimize their PRs for review:
- A crisp and complete PR description that explains clearly what the change is for cross-checking against the code.
- Tightly-scoped. That is, don't mix multiple changes in a single PR.
- Code structure and doc comments optimized for understandability (e.g. avoid bloat, redundancy, and convoluted control flow).
PRs that do not follow these principles are much more time consuming to review, and less likely to get prompt reviews.
We welcome contributors who use AI coding tools, but all contributions must reflect genuine understanding of the changes being made. Please read our AI Policy before submitting a PR.
- Fork the repository into your account
- Clone your fork locally:
git clone git@github.com:YOUR_USERNAME/delta-kernel-rs.git cd delta-kernel-rs - Add the upstream remote:
git remote add upstream git@github.com:delta-io/delta-kernel-rs.git
Now you have:
originpointing to your forkupstreampointing to the original repository
Our trunk branch is named main. Here's the typical workflow:
- Pull the latest main to get a fresh checkout:
git checkout main git pull upstream main
- Create a new feature branch:
(NB: Consider using
git checkout -b my-feature
git worktreesfor managing multiple branches!) - Make your changes and test them locally. See our CI runs for a full set of tests.
# run most of our tests, typically sufficient for quick iteration cargo test # run clippy cargo clippy --all-features --tests --benches -- -D warnings # build docs cargo doc --workspace --all-features # highly recommend editor that automatically formats, but in case you need to: cargo fmt # run more tests cargo test --workspace --all-features -- --skip read_table_version_hdfs # see ffi/ dir for more about testing FFI specifically
- Push to your fork:
git push origin my-feature
- Open a PR from
origin/my-featuretoupstream/main - Celebrate! 🎉
Note: Our CI runs all tests and clippy checks. Warnings will cause CI to fail.
Note: We require two approvals from code owners for any PR to be merged.
- When making your first PR, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md
- Run
cargo t --all-features --all-targetsto get started testing, and runcargo fmt. - Ensure you have added or run the appropriate tests for your PR.
- If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'.
- Be sure to keep the PR description updated to reflect all changes.
This project uses conventional commits: https://www.conventionalcommits.org/
Each PR corresponds to a commit on the main branch, with the title of the PR (typically) being
used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please
ensure your PR title adheres to the conventional commit specification.
Examples:
- new feature PR: "feat: new API for snapshot.update()"
- bugfix PR: "fix: correctly apply DV in read-table example"
Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description.
- Delta Protocol
- Delta Lake Slack - Join us in the
#delta-kernelchannel