# How to Contribute

We'd love to accept your patches and contributions to Matter RPC tool. There are just a few small guidelines you need to follow.
The contributor workflow has not been fully ironed out yet, so make sure to start by sending an email to smarthome-testsuite-contrib@google.com with an outline of your planned change. We will review your proposal and advise on the next steps you will need to take.

## Contributor License Agreement

Contributions to this project must be accompanied by a Contributor License
Agreement (CLA). 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

All submissions, including submissions by project members, require review. We
use Git at Google pull requests for this purpose.

## Community Guidelines

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