Skip to content
Simon Cousineau edited this page Jun 2, 2023 · 24 revisions

Thank you for contributing! Pion is a community project, and only exists because of the hard work of many different people. Contributing doesn't just involve code either, you can be involved in many different ways. Before starting here are some things to remember that will make the whole process a whole lot more fun and effective.

Everyone has different time constraints and schedules

Don't take it personally when your work doesn't get reviewed or merged in a timely manner. Feel free to add other contributors, or send a message on Slack. People have busy schedules and it is easy to get pulled in lots of directions

Start with small tasks/Don't burn yourself out

It is better to get something done, then nothing at all. Try starting with a small task first, and grabbing larger things as time moves on

Where Pion needs your help

List of issues

Check out our Goals page. We maintain a list of everything we want to accomplish. We need help in lots of different areas. Even if you don't know Go or WebRTC we have tasks for you!

Supporting users on Slack or Stackoverflow

Answering questions and working with the community is really important. Most community members use Slack, but it would also be helpful to work with people on Stackoverflow

Triaging user issues

We have lots of issues that have been filed, but not addressed yet.

  • If it is a question, or a simple issue you might be able to fix yourself!
  • If it is a bigger task add a difficulty label ('easy', 'medium' or 'hard') and the 'triaged' label
  • If feedback is requested add the 'question' label. If we haven't heard in 30 days resolve. Leave a comment telling the user to re-open if they are still interested though.

It also is helpful to review old triaged issues, they haven't got the attention they need

Documentation

WebRTC for the Curious is a Open Source book we are working on. Your feedback and involvement would really help the WebRTC community.

Supporting Community Projects

Many Open Source projects use Pion. The following projects would love your help, and please add your project if you are interested in getting outside help! See awesome-pion for a list of Pion users.

Review Unmerged PRs

A great way to learn/get involved would be to review existing PRs. You can see them here

We should aim to have zero unmerged PRs, but sometimes they get stuck in review or the original author runs out of time.

Writing Code

Contributing to Pion should be an easy and fun process! After you land your first PR you will become a Pion developer, and you will have the ability to review and merge others code.

We try to have a high standard for quality, please review the Writing a good PR before selecting an issue

Time to code! To find a good task here are our open issues in order of difficulty .

  • good first issue - Issues with zero ambiguity that can be easily merged

  • easy - Issues that are technically challenging but no ambiguity

  • medium - Issues that are technically challenging and some ambiguity, a solution should be agreed on first

  • hard - Issues that are technically challenging and require a significant time investment

Writing a good PR

Find a reviewer

Talk to a developer on Slack or Github before you start work. Things may have changed since the issue was reported, so don't start work until you are sure everything will work!

The following developers are available for mentoring, and are happy to help you through the whole process.

Run all automated tests and checks before submitting.

Your code will likely not be reviewed if it fails the automated checks. The code may be high quality, but most developers assume it isn't ready until the build is green.

We use GitHub Actions and all our checks can be see here. These are the commands you will need to run locally.

You will also need to run the following scripts from Pion's common goassets:

  • scripts/lint-commit-message.sh
  • scripts/assert-contributors.sh
  • scripts/lint-disallowed-functions-in-library.sh
  • scripts/lint-filename.sh