# Have you ever contributed to an Open Source project?
Your first contribution can be a bit intimidating, but feel free to give it a try. If you get stuck, don't hesitate to ask for help in our [developer forum](https://discourse.psychopy.org/c/dev). This is also a good place to pitch your idea. Next up:
* **I won't program it myself.** Please file a [GitHub issue](https://github.com/psychopy/psychojs/issues).
* **I'd like to take a shot.** Read on to find out how!

# How to contribute
Contributing to PsychoJS consists of four steps:
1. Getting your own copy
2. Making your changes
3. Committing your changes
4. Submitting a Pull Request

## 1. Getting your own copy of the PsychoJS codebase
To be sure your improvements can easily be integrated, follow these steps:
1. **Make a [fork](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) of the [PsychoJS repo](https://github.com/psychopy/psychojs).** This provides you with your own copy of the PsychoJS source code.
2. **Inside your fork, make a new [branch](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-branches) for the feature you've got in mind.** Base your new branch on the  *main* branch. We tend to name branches after the feature we're building. For example `olfactory_component`.
3. **Clone your fork to your hard drive.** Next, switch to the new branch and you're all set up!

## 2. Making your changes
To help you get started with modifying PsychoJS, we've a couple of [developer guides](https://psychopy.org/online/index.html). To try out your modified PsychoJS, consider [creating and running some tests](https://github.com/psychopy/psychojs_testing).

## 3. Committing your changes
Once you're happy with your changes, commit them to your GitHub repo. Please use the tags below in your commit and add an informative message.
  - **BF:** bug fix
  - **RF:** refactoring
  - **ENH:** enhancement (such as a new feature)
  - **DOC:** for all kinds of documentation related commits

## 4. File a Pull Request
Once you're done, it's time to add it to the central PsychoJS source code. File a [Pull Request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) from your own fork and branch to the *main* branch in the PsychoJS repo. Thanks for contributing!
