# Contributors Code of Conduct

Google and the WebRTC team are committed to preserving and fostering a diverse, welcoming and open
community. The WebRTC project is open to contributors from all  walks of life and should be a
harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender
identity and expression, level of experience, nationality, personal appearance, race, religion, or
sexual identity and orientation.

## Scope
This Code of Conduct applies to our repos and organizations, mailing lists, blog content, and any
other WebRTC-supported communication group, as well as any private communication initiated in the
context of these spaces.

## Standards
Examples of behavior that contributes to creating a positive environment include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit
permission
* Other conduct which could reasonably be considered inappropriate in a professional setting

## Responsibilities

You are empowered to politely engage when you feel that you or others are disrespected. The person
making you feel uncomfortable may not be aware of what they are doing - politely bringing their
behavior to their attention is encouraged.

If you are uncomfortable speaking up, or feel that your concerns are not being duly considered, you
can email community@webrtc.org to request involvement from a community manager. All concerns shared
with community managers will be kept confidential. While all reports will be taken seriously, the
WebRTC community managers may not act on complaints that they feel are not violations of this code
of conduct.

## Enforcement

Consequences for failing to comply with this policy may include, at the sole discretion of the
WebRTC community managers:

* a request for an apology;
* a private or public warning or reprimand;
* a temporary ban from the mailing list, blog, WebRTC repository or organization, or other
WebRTC-supported communication group, including loss of committer status;
* a permanent ban from any of the above, or from all current and future WebRTC-supported or
Google-supported communities, including loss of committer status.

Participants warned to stop any harassing behavior are expected to comply immediately; failure to do
so will result in an escalation of consequences.

The decisions of the WebRTC community managers may be appealed via community-appeals@webrtc.org.

## Acknowledgements

This Code of Conduct is based on Contributor Covenant, version 1.4,
available [here](http://contributor-covenant.org/version/1/4) and [Chromium](https://chromium.googlesource.com/chromium/src/+/main/CODE_OF_CONDUCT.md)

## License

This Code of Conduct is available for reuse under the Creative Commons Zero (CC0) license.
