Monero
Contributing to Monero

A good way to help is to test, and report bugs. See How to Report Bugs Effectively (by Simon Tatham) if you want to help that way. Testing is invaluable in making a piece of software solid and usable.

General guidelines

Patches are preferably to be sent via a GitHub pull request. If that can't be done, patches in "git format-patch" format can be sent (eg, posted to fpaste.org with a long enough timeout and a link posted to #monero-dev on irc.libera.chat).

Patches should be self contained. A good rule of thumb is to have one patch per separate issue, feature, or logical change. Also, no other changes, such as random whitespace changes, reindentation, or fixing typos, spelling, or wording, unless user visible. Following the code style of the particular chunk of code you're modifying is encouraged. Proper squashing should be done (eg, if you're making a buggy patch, then a later patch to fix the bug, both patches should be merged).

If you've made random unrelated changes (either because your editor is annoying or you made them for other reasons), you can select what changes go into the coming commit using git add -p, which walks you through all the changes and asks whether or not to include this particular change. This helps create clean patches without any irrelevant changes. git diff will show you the changes in your tree. git diff –cached will show what is currently staged for commit. As you add hunks with git add -p, those hunks will "move" from the git diff output to the git diff –cached output, so you can see clearly what your commit is going to look like.

Commits and pull requests

Commit messages should be sensible. That means a subject line that describes the patch, with an optional longer body that gives details, documentation, etc.

When submitting a pull request on GitHub, make sure your branch is rebased. No merge commits nor stray commits from other people in your submitted branch, please. You may be asked to rebase if there are conflicts (even trivially resolvable ones).

PGP signing commits is strongly encouraged. That should explain why the previous paragraph is here.

Code of Conduct (22/C4.1)

License

Copyright (c) 2009-2015 Pieter Hintjens. Copyright (c) 2017-2022, The Monero Project

This Specification is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This Specification is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, see http://www.gnu.org/licenses.

Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

The "Monero Maintainer Team" is defined in this document as the following users:

Goals

C4 is meant to provide a reusable optimal collaboration model for open source software projects. It has these specific goals:

Design

Preliminaries

Licensing and ownership

Patch requirements

Development process

Creating stable releases

Evolution of public contracts

Project administration