# How to Contribute

We'd love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.

## Contributor License Agreement

Contributions to this project must be accompanied by a Contributor License
Agreement. You (or your employer) retain the copyright to your contribution;
this simply gives us permission to use and redistribute your contributions as
part of the project. Head over to <https://cla.developers.google.com/> to see
your current agreements on file or to sign a new one.

You generally only need to submit a CLA once, so if you've already submitted one
(even if it was for a different project), you probably don't need to do it
again.

## Code reviews

The QUICHE repository is currently not set up to accept pull requests directly.
If you would like to make a contribution, please follow these steps:

1.  Sign the Contributor License Agreement (see above).
2.  Create a Gerrit pull request at <https://quiche-review.googlesource.com>, or
    a GitHub pull request at <https://github.com/google/quiche/pulls>.
3.  Email a link to your pull request to <quiche-contribution@google.com>.
4.  An engineer will review your pull request and merge it internally.

Note: if you are a Google engineer with access to google3, please submit a CL to
google3 directly.

## Community Guidelines

This project follows
[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/).
