Contribution guidelines
***********************

.. contents:: Table of contents:
   :local:
   :depth: 1

How you can help
================

If you would like to help the project, you can:

* **help with testing**

  Try to use Roc command-line tools or PulseAudio modules and report bugs or suggest improvements.

* **help with research**

  Discover how does Roc perform on different conditions and configurations and share the results. What latency and service quality does it provide in different cases, what parameter combinations are optimal, and so on.

* **help with porting**

  We'd be happy to meet developers who can help with maintaining ports for non-Linux \*nix systems, macOS, Android, Windows, and other platforms.

* **contribute code**

  Roc has quite a long and pretty interesting roadmap and a backlog with issues of varying difficulty. Read the documentation, choose a task, and submit pull requests!

Choosing a task
===============

Want to contribute code? Great! Here is how you can choose a task.

.. note::

   It is highly recommended to leave a comment on GitHub or throw a mail to the mailing list before starting working on an issue to ensure that nobody is already working on it.

* **"help wanted" tag**

  Look for issues marked with the `"help wanted" <https://github.com/roc-streaming/roc-toolkit/labels/help%20wanted>`_ tag. This tag means that this is an important and awaited task but we have no human resources for it yet, and it is still in the backlog.

* **"easy hacks" tag**

  Look for issues that are additionally marked with the `"easy hacks" <https://github.com/roc-streaming/roc-toolkit/labels/easy%20hacks>`_ tag. This tag means that the solution is expected to be straightforward even if you are new to the project.

* **backlog column**

  Look for issues in the "Backlog" column in the `project board <https://github.com/roc-streaming/roc-toolkit/projects/2>`_. Issues that are *not* marked as "help wanted" are probably not very good for you if you're new to the project, but you can take your chances if you would like to.

* **project roadmap**

  Look for unimplemented features in the long-term :doc:`project roadmap </development/roadmap>`. If there is no issue for a feature yet, it means that nobody had thought through it yet. You are suggested to open an issue for discussion in this case.

* **suggest your own**

  Of course, you're also welcome to open an issue and suggest a feature that is not in our backlog and roadmap.

Working on a patch
==================

If you have chosen a task and are ready to work on it, the following documentation is your friend:

* **project internals**

  See :doc:`/internals` section for a high-level overview.

  See also more low-level `Doxygen-generated documentation <https://roc-streaming.org/toolkit/doxygen/>`_.

* **coding guidelines**

  Please take a look at the :doc:`/development/coding_guidelines` page. The guidelines are not hard to follow but some of them a specific.

* **version control**

  Please also take a look at the :doc:`/development/version_control` page for details on commits, branches, and pull requests.

* **asking questions**

  Feel free to ask questions on our mailing list or Matrix chat. See :doc:`/about_project/contacts` page for details.

* **getting credits**

  Feel free to add yourself to the :doc:`/about_project/authors` page when submitting a patch. It is updated from git log from time to time.
