/ CONTRIBUTING.md
CONTRIBUTING.md
  1  # Contributing
  2  
  3  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:
  4  
  5  **Note:** All contributions are made under the MIT license, as described at the bottom of this page.
  6  
  7  ## Table of Contents
  8  
  9  - [Getting Involved](#getting-involved)
 10  - [Areas of Contribution](#areas-of-contribution)
 11  - [Code Review Policy](#code-review-policy)
 12  - [Developer Certificate of Origin](#developer-certificate-of-origin)
 13  
 14  ## Getting Involved
 15  
 16  Here are the recommended steps for new developers:
 17  
 18  1. **Learn the Basics**: Start by reading our [non-technical primer](https://fedimint.org/docs/intro) and exploring the [videos and articles on our blog](https://fedimint.org/blog).
 19  2. **Set Up Your Development Environment**: Follow our [dev environment setup guide](docs/dev-env.md) to install the necessary tools.
 20  3. **Run the Development Environment**: Use [this tutorial](docs/tutorial.md) to launch the development environment and ensure everything works correctly on your machine.
 21  4. **Find Your First Issue**:
 22     - Contact @kodylow to get a good first issue matched to your skillset. You can schedule a [call with Kody here](https://cal.com/kody-low-ix8qoa/30min) or send him a direct message in our [Developer Discord](https://chat.fedimint.org) with your background, skillset, and areas of interest.
 23     - Browse our [GitHub Issues](https://github.com/fedimint/fedimint/issues) and filter by [good first issues](https://github.com/fedimint/fedimint/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
 24  5. **Join Developer Calls**: Participate in our [Developer Calls](https://calendar.google.com/calendar/u/0/embed?src=fedimintcalendar@gmail.com), especially our Weekly Dev Calls every Monday.
 25  
 26  Small PRs fixing typos, TODOs, or broken links are always welcome. Please discuss larger changes on Discord or GitHub before proceeding.
 27  
 28  <!-- markdown-link-check-disable -->
 29  
 30  For commit messages, please use the [imperative mood](https://stackoverflow.com/questions/3580013/should-i-use-past-or-present-tense-in-git-commit-messages/3580764#3580764).
 31  
 32  <!-- markdown-link-check-enable -->
 33  
 34  **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.
 35  
 36  Once you've found an issue to work on, please post any blockers or questions in the [#new-contributors](https://discord.gg/BGFMXSkNJW) 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.
 37  
 38  Happy Hacking!
 39  
 40  ## Areas of Contribution
 41  
 42  Below are some broad and general areas where you can contribute:
 43  
 44  - [Fedimint Modules](docs/architecture.md)
 45  - [Fedimint Database System](docs/database.md)
 46  - [Fedimint Lightning Gateway](docs/gateway.md)
 47  - [Fedimint Guardian & Lightning Gateway UI](https://github.com/fedimint/ui)
 48  - [Nix Build System](docs/nix-ci.md)
 49  - [Devimint](devimint/)
 50  - [Scripts](scripts/README.md)
 51  
 52  ## Code Review Policy
 53  
 54  **Objective:** We aim to balance thorough code reviews with fast iteration, accommodating our globally distributed team of mostly volunteers with varying availability.
 55  
 56  - **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.
 57  - **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.
 58  - **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.
 59  
 60  Contributors are encouraged to review PRs even after they have been merged.
 61  
 62  If you need additional reviews, feel free to post a link to your PR in the #code-review channel on Discord.
 63  
 64  ## Developer Certificate of Origin
 65  
 66  ```
 67  Developer Certificate of Origin
 68  Version 1.1
 69  
 70  Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
 71  
 72  Everyone is permitted to copy and distribute verbatim copies of this
 73  license document, but changing it is not allowed.
 74  
 75  
 76  Developer's Certificate of Origin 1.1
 77  
 78  By making a contribution to this project, I certify that:
 79  
 80  (a) The contribution was created in whole or in part by me and I
 81      have the right to submit it under the open source license
 82      indicated in the file; or
 83  
 84  (b) The contribution is based upon previous work that, to the best
 85      of my knowledge, is covered under an appropriate open source
 86      license and I have the right under that license to submit that
 87      work with modifications, whether created in whole or in part
 88      by me, under the same open source license (unless I am
 89      permitted to submit under a different license), as indicated
 90      in the file; or
 91  
 92  (c) The contribution was provided directly to me by some other
 93      person who certified (a), (b) or (c) and I have not modified
 94      it.
 95  
 96  (d) I understand and agree that this project and the contribution
 97      are public and that a record of the contribution (including all
 98      personal information I submit with it, including my sign-off) is
 99      maintained indefinitely and may be redistributed consistent with
100      this project or the open source license(s) involved.
101  ```