👍🎉 First off, thanks for taking the time to contribute! 🎉👍
We accept contributions in the following forms (non-exhaustive):
- Bug reports: A good bug report includes a succinct, reproducible context and the intended behavior.
- Feature requests: Should be followed by a thorough explanation of why the feature is important. Please note that not all feature requests will be accepted. If in doubt, please consider opening a discussion first.
- Pull requests: Clear and correct code with explanatory documentation and comments if necessary. If adding new functionality or fixing bugs, we expect accompanying tests. Pull requests will undergo a review process, and if accepted, the changes will be incorporated into the codebase.
- Discussions: Contributions that cannot be framed as bug reports or pull requests are good candidates for discussions. Please be polite and present civilized arguments in discussions.
- Security Reports: If you believe you have found a vulnerability, please provide details here instead.
All contributors are expected to show respect and courtesy to others. To make clear what is expected, everyone contributing is required to conform to the Code of Conduct.
We are dedicated to providing a welcoming and supportive environment for all people, regardless of background or identity. As such, we do not tolerate behaviour that is disrespectful to our contributors, developers, and users, or that excludes, intimidates, or causes discomfort to others. We do not tolerate discrimination or harassment based on characteristics that include, but are not limited to, gender identity and expression, sexual orientation, disability, physical appearance, body size, citizenship, nationality, ethnic or social origin, pregnancy, familial status, veteran status, genetic information, religion or belief (or lack thereof), membership of a national minority, property, age, education, socioeconomic status, technical choices, and experience level.
All contributors are expected to show respect and courtesy to others. All interactions should be professional regardless of platform: either online or in-person. In order to foster a positive and professional environment we encourage the following kinds of behaviours:
- Use welcoming and inclusive language
- Be respectful of different viewpoints and experiences
- Gracefully accept constructive criticism
- Show courtesy and respect towards others
Examples of unacceptable behaviour:
- written or verbal comments which have the effect of excluding people on the basis of membership of any specific group
- causing someone to fear for their safety, such as through stalking, following, or intimidation
- violent threats or language directed against another person
- the display of sexual or violent images
- unwelcome sexual attention
- nonconsensual or unwelcome physical contact
- sustained disruption of talks, events or communications
- insults or put downs
- sexist, racist, homophobic, transphobic, ableist, or exclusionary jokes
- incitement to violence, suicide, or self-harm
- continuing to initiate interaction (including photography or recording) with someone after being asked to stop
- publication of private communication without consent
Important
If you are using any kind of AI assistance to contribute it must be disclosed in the pull request.
If you are using any kind of AI assistance while contributing, this must be disclosed in the pull request, along with the extent to which AI assistance was used (e.g. docs only vs. code generation). If PR body or comments are being generated by an AI, disclose that as well. As a small exception, trivial tab-completion doesn't need to be disclosed, so long as it is limited to single keywords or short phrases.
An example disclosure:
This PR was written primarily by Claude Code.
Or a more detailed disclosure:
I consulted ChatGPT to understand the codebase but the solution was fully authored manually by myself.
Failure to disclose this is impolite to the human operators on the other end of the pull request, and it also makes it difficult to determine how much scrutiny to apply to the contribution.
Please be respectful to maintainers and disclose AI assistance so that they may help you effectively contribute.
Please install the following tools in your development environment to make sure that you can run the basic CI checks in your local environment:
taplo: used to lint and formatTOMLfiles.codespell: used to check for common misspellings in code.just: RIPMakefiles.cargo-nextest: modern test runner for Rust.cargo-audit: tool to checkCargo.lockfiles for security vulnerabilities.bitcoind: to run the unit and functional tests.- Functional test runner:
to run functional tests, see instructions in its
README.md.
We also provide a flake.nix with a devShell with all the dependencies
necessary for local development.
Install Nix and run:
nix developBefore you create a PR, make sure that all the required CI checks pass locally.
For your convenience, a .justfile recipe has been created which you can run via:
just pr