# Contribute to CircuitPython with Git and GitHub

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/056/451/medium800/circuitpython_GitGitHub.png?1530152034)

Info: 

Just about all of Adafruit's code and hardware is kept on GitHub - a web service that keeps track of code and files. Since we publish open source hardware and software, this works great to share our designs and also get feedback and improvements from the community. By working together, a large group of people can improve and build upon the body of work that Adafruit has published. You can even find bugs or add new features, and submit those back to us so that _everyone_ can benefit from your effort!

But how do you actually do that? GitHub isn't the easiest site to use, and Git the versioning tool it builds upon can be challenging even for coding experts.

This guide aims to not only show you where to start, but provide you with the entire contribution path, beginning to end. I'll be using CircuitPython as our example as I have a well established workflow.

This guide assumes you already have a [GitHub account](https://github.com/) and have installed Git. You're ready to contribute code. Perhaps you've found an issue with CircuitPython library. It doesn't currently work properly, and you think you know how to fix it! Now, where do you start?

This guide will walk through all of the steps I follow during the contribution process. You'll learn how to fork and clone a project repository, create a working branch, and commit and push your changes. You'll find out how to create a pull request, and progress through the review process including the conversation and work surrounding a change request. I also explain what's involved with giving a review, which is another excellent way you can contribute to a project.

Some of this may sound complicated and confusing. The guide intends to change that. However, if you find that you're still confused while going through the guide -&nbsp;_don't worry!_&nbsp; GitHub is hard to explain, and if you have suggestions on how to improve this guide, please feel free to tell us where things get confusing or could be clearer. You can click the feedback link found on the left of the guide, or find us [Discord](https://adafru.it/discord) in the #circuitpython channel. We'd love to hear from you!

All of the terms introduced in this guide are explained as you are introduced to them, and are also defined in the [Glossary found at the end of the guide](https://learn.adafruit.com/git-and-github-workflow/glossary). If you're ever unsure about a term, feel free to look it up there.

First, you need to make sure you're ready to get started with this guide.

## Requirements

Before starting this guide, there are a number of steps found in [An Introduction to Collaborating with Version Control](https://learn.adafruit.com/an-introduction-to-collaborating-with-version-control/overview) that you must complete. You must have [Git installed and setup on your computer](https://learn.adafruit.com/an-introduction-to-collaborating-with-version-control/installing-git). You must have a [GitHub](https://github.com/) account. You need to have some familiarity with the command line or be ready to learn. This guide uses a terminal program to interact with Git locally (on your computer).

## Expectations

Be aware that this guide has a very specific goal. It is designed to provide you with a complete open source project contribution workflow, beginning with forking the original project GitHub repository.

This guide will not help you with your initial setup of Git or creating your GitHub account. There is no information about troubleshooting issues with your Git setup or configuration. It will not explain how Git and GitHub work. Much of this is covered in [An Introduction to Collaborating with Version Control](https://learn.adafruit.com/an-introduction-to-collaborating-with-version-control/overview). Further information is likely available through the [Git documentation](https://www.git-scm.com/doc) or the [GitHub documentation](https://help.github.com/).

Though I primarily work with CircuitPython and related projects, the workflow outlined in this guide should apply to any open source project. However, it's always a good idea to check with the project's maintainers to make sure that you're working within their guidelines.

Let's get started!

- [Next Page](https://learn.adafruit.com/contribute-to-circuitpython-with-git-and-github/grab-your-fork.md)

## Featured Products

### Blinka the CircuitPython Limited Edition Enamel Pin

[Blinka the CircuitPython Limited Edition Enamel Pin](https://www.adafruit.com/product/3680)
[You're a CircuitPython fan, right](https://www.adafruit.com/circuitpython)? Now you can show your colors proudly. If you're into skin art, we have Blinka as a [temporary tattoo](https://www.adafruit.com/product/2600), but for the dedicated fans, now you can...

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/3680)
[Related Guides to the Product](https://learn.adafruit.com/products/3680/guides)
### Blinka the CircuitPython Temporary Tattoo

[Blinka the CircuitPython Temporary Tattoo](https://www.adafruit.com/product/2600)
From&nbsp;Ötzi the Iceman to Gucci Mane's ice cone face tat, tattooing has been a cultural practice for thousands of years. Whether it's in commemoration or self expression, skin art can be a&nbsp;big decision! Here at Adafruit we're definitely not afraid of&nbsp;permanence,...

In Stock
[Buy Now](https://www.adafruit.com/product/2600)
[Related Guides to the Product](https://learn.adafruit.com/products/2600/guides)
### Blinka the CircuitPython Sticker

[Blinka the CircuitPython Sticker](https://www.adafruit.com/product/3725)
Snuggle&nbsp;up a friendly snake when you learn Python with this "**Blinka the [CircuitPython](https://www.adafruit.com/circuitpython)**" sticker. Designed for use with [educators](http://www.adafruit.com/educators), classrooms, workshops, <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/3725)
[Related Guides to the Product](https://learn.adafruit.com/products/3725/guides)
### CircuitPython 3 Poster

[CircuitPython 3 Poster](https://www.adafruit.com/product/3793)
We're celebrating CircuitPython 3 in "software box art" style here. You may remember when software came in a **box** - now with download-only you probably miss the shrink-wrap, the CD-ROMs, and even the cool release posters you'd sometimes snag.

And since...

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/3793)
[Related Guides to the Product](https://learn.adafruit.com/products/3793/guides)
### CircuitPython 4 Poster

[CircuitPython 4 Poster](https://www.adafruit.com/product/4082)
Sound the klaxons! We're pleased as punch to announce **CircuitPython 4** , the latest major revision which features support for the Nordic nRF52840 BLE chipset.&nbsp;

We sometimes look to the past for inspiration, so we're celebrating this new release in...

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/4082)
[Related Guides to the Product](https://learn.adafruit.com/products/4082/guides)
### CircuitPython 5 Poster

[CircuitPython 5 Poster](https://www.adafruit.com/product/4365)
 **V** for **V** ictory, also **V** ivacious and **V** ery-good-code! Which is exactly how we feel about CircuitPython **V** ersion 5. We're pleased to announce the latest&nbsp;major revision of CircuitPython....

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/4365)
[Related Guides to the Product](https://learn.adafruit.com/products/4365/guides)

## Related Guides

- [How to add a New Board to the circuitpython.org website](https://learn.adafruit.com/how-to-add-a-new-board-to-the-circuitpython-org-website.md)
- [How to Add a New Board to CircuitPython](https://learn.adafruit.com/how-to-add-a-new-board-to-circuitpython.md)
- [Introducing ItsyBitsy M0 Express](https://learn.adafruit.com/introducing-itsy-bitsy-m0.md)
- [CircuitPython 101: Functions](https://learn.adafruit.com/circuitpython-101-functions.md)
- [CircuitPython on the nRF52](https://learn.adafruit.com/circuitpython-on-the-nrf52.md)
- [CircuitPython Libraries on Linux and ODROID C2](https://learn.adafruit.com/circuitpython-libaries-linux-odroid-c2.md)
- [Cooperative Multitasking in CircuitPython with asyncio](https://learn.adafruit.com/cooperative-multitasking-in-circuitpython-with-asyncio.md)
- [Introducing Adafruit ItsyBitsy M4](https://learn.adafruit.com/introducing-adafruit-itsybitsy-m4.md)
- [Itertools for CircuitPython](https://learn.adafruit.com/itertools-and-functools-for-circuitpython.md)
- [AS5600 Super Smooth Rotary Encoder](https://learn.adafruit.com/as5600-smooth-rotary-encoder.md)
- [PyPortal Winamp MP3 Player](https://learn.adafruit.com/pyportal-winamp-mp3-player.md)
- [LO-LA59 Droid](https://learn.adafruit.com/lola-droid.md)
- [MagTag Sports Schedule Viewer](https://learn.adafruit.com/magtag-sports-schedule-viewer.md)
- [OSHWA Project Display With Adafruit MagTag](https://learn.adafruit.com/oshwa-project-display-with-adafruit-magtag.md)
- [The MonkMakes Plant Monitor and CircuitPython](https://learn.adafruit.com/monkmakes-plant-monitor-and-circuitpython.md)
