This document is a guide to contributing to the project.
We welcome all contributions. You don't need to be an expert to help out.
Contributions are made through pull requests. Before sending a pull request, make sure you do the following:
- Run
make fmtto make sure your code adheres to our coding style and all tests pass. - Write unit tests for new functionality added.
You'll need to build the project locally to start editing code. To install from source, clone the repository from GitHub, navigate to its root, and run the following command:
make installTo contribute to the project, send us pull requests. For those new to contributing, check out GitHub's guide.
Once you've made your pull request, a member of the development team will assign themselves to review it. You might have a few back-and-forths with your reviewer before it is accepted, which is completely normal. Your pull request will trigger continuous integration tests for many different Python versions and different platforms. If these tests start failing, please fix your code and send another commit, which will re-trigger the tests.
If you'd like to add a new feature, please propose your change in a GitHub issue to make sure that your priorities align with ours.
If you'd like to contribute code but don't know where to start, try one of the following:
- Read the source and enhance the documentation, or address TODOs
- Browse the open issues, and look for the issues tagged "help wanted".
We use Conventional Commits. Every commit message must have a structured prefix so tooling can generate changelogs automatically.
<type>(<scope>): <short summary>
scope is optional but encouraged when the change is limited to a specific area.
| Type | When to use |
|---|---|
feat |
New feature or capability |
fix |
Bug fix |
docs |
Documentation only |
refactor |
Code change that is neither a fix nor a feature |
test |
Adding or updating tests |
ci |
CI / build system changes |
chore |
Maintenance tasks (deps, tooling, config) |
perf |
Performance improvement |
security |
Security fix or hardening |
feat(templates): add devcontainer template for Python 3.13
fix: resolve path issue in bootstrap script
docs: update CONTRIBUTING with commit conventions
ci: cache uv dependencies in GitHub Actions
Append ! after the type/scope and add a BREAKING CHANGE: footer:
feat!: rename make target from `book` to `docs`
BREAKING CHANGE: `make book` no longer exists; use `make docs`.
We use ruff to enforce our Python coding style. Before sending us a pull request, navigate to the project root and run
make fmtto make sure that your changes abide by our style conventions. Please fix any errors that are reported before sending the pull request.
Most code changes will require new unit tests. Even bug fixes require unit tests, since the presence of bugs usually indicates insufficient tests. When adding tests, try to find a file in which your tests should belong; if you're testing a new feature, you might want to create a new test file.
We use the popular Python pytest framework for our tests.
We use pytest to run our unit tests.
To run all unit tests run the following command:
make testPlease make sure that your change doesn't cause any of the unit tests to fail.