Want to contribute? Great! First, read this page (including the small print at the end).

### Before you contribute

**Before we can use your code, you must sign the
[Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual?csw=1)
(CLA)**, which you can do online.

The CLA is necessary mainly because you own the copyright to your changes,
even after your contribution becomes part of our codebase, so we need your
permission to use and distribute your code. We also need to be sure of
various other things  for instance that you'll tell us if you know that
your code infringes on other people's patents. You don't have to sign
the CLA until after you've submitted your code for review and a member has
approved it, but you must do it before we can put your code into our codebase.

Before you start working on a larger contribution, you should get in touch
with us first. Use the issue tracker to explain your idea so we can help and
possibly guide you.

**Before starting a complex contribution we strongly encourage you to share a design document**.

[Here](https://goo.gl/YCQttR) you can find a document template.

### Code reviews and other contributions.

**All submissions, including submissions by project members, require review.**
We use GitHub's code review system to suggest changes, then merge the changes
to master when the PR is green and reviewed. The changes will then be in the
next release.

### The small print

Contributions made by corporations are covered by a different agreement than
the one above, the
[Software Grant and Corporate Contributor License Agreement](https://cla.developers.google.com/about/google-corporate).
