Welcome to the Fedimint project! We're thrilled that you're interested in contributing to our open-source community. Below are some resources to help you get started:
Note: All contributions are made under the MIT license, as described at the bottom of this page.
Here are the recommended steps for new developers:
- Learn the Basics: Start by reading our non-technical primer and exploring the videos and articles on our blog.
- Set Up Your Development Environment: Follow our dev environment setup guide to install the necessary tools.
- Run the Development Environment: Use this tutorial to launch the development environment and ensure everything works correctly on your machine.
- Find Your First Issue:
- Contact @kodylow to get a good first issue matched to your skillset. You can schedule a call with Kody here or send him a direct message in our Developer Discord with your background, skillset, and areas of interest.
- Browse our GitHub Issues and filter by good first issues.
- Join Developer Calls: Participate in our Developer Calls, especially our Weekly Dev Calls every Monday.
Small PRs fixing typos, TODOs, or broken links are always welcome. Please discuss larger changes on Discord or GitHub before proceeding.
For commit messages, please use the imperative mood.
Note: Contributing to the core Fedimint repo requires expertise in Rust and distributed systems. If you're new to coding, Bitcoin, or Rust, consider starting with our more approachable projects like UIs, clients, or other services to familiarize yourself with Fedimint before tackling the core repo. Finding a good issue that matches your skillset is crucial—please reach out to @kodylow to ensure a smooth start.
Once you've found an issue to work on, please post any blockers or questions in the #new-contributors channel on Discord. There are almost always fast and simple answers to early contributor problems. We're here to help you overcome those challenges quickly so you can make valuable contributions.
Happy Hacking!
Below are some broad and general areas where you can contribute:
- Fedimint Modules
- Fedimint Database System
- Fedimint Lightning Gateway
- Fedimint Guardian & Lightning Gateway UI
- Nix Build System
- Devimint
- Scripts
Objective: We aim to balance thorough code reviews with fast iteration, accommodating our globally distributed team of mostly volunteers with varying availability.
- Continuous Integration (CI): All PRs must pass CI checks before merging. CI ensures your code doesn't break existing functionality and adheres to our quality standards.
- Mandatory Reviews: Each PR requires at least one approved review. We recommend having two or more reviewers. However, for minor changes such as fixing typos or correcting broken links, one review is acceptable.
- Labeling for Further Review: If a PR contains simple or non-controversial changes and you'd like to avoid merge conflicts or unblock subsequent work, label it with the
needs further review
label and merge it. PRs with this label will be discussed during our weekly "Code Review" meetings.
Contributors are encouraged to review PRs even after they have been merged.
If you need additional reviews, feel free to post a link to your PR in the #code-review channel on Discord.
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.