## Overview

This document outlines a set of policies in order to provide a level playing field and open process for contributors to join the OpenFGA project.

Governance activities are currently performed manually. In the future we might use [terraform](https://www.terraform.io/) or similar technology to automate tasks, but we're currently a small team and iterating quickly - for now it makes sense to do things in a way that doesn't scale.

### License

For information on the project's license, see the [LICENSE.md](https://github.com/openfga/openfga/blob/main/LICENSE).

### Copyright

For copyright and trademark information, see [Trademark Usage](https://www.linuxfoundation.org/legal/trademark-usage)

## Roles and Responsibilities

OpenFGA uses a Teams concept to divide up roles and responsibilities. Teams are defined in GitHub.

### Teams
Currently there are three main teams:

* Core
* Product
* Contributors

#### Core

The @core team is concerned with the codebase and technical implementation details for the product. 

*Responsibilities include:*
- review RFCs or delegate their review to a more relevant team
- reach consensus and usher each RFC through the resolution process
- collaborate with @community to collect feedback for RFCs
- ensure RFCs are acceptable to maintain
- govern OpenFGA repos
- PR review and merging
- curating releases
- receive security reports, triage them, and respond in accordance to the [Security Policy](https://github.com/openfga/community/security/policy)

Secondary priorities involve collaborating with @product on the roadmap, user research, and iterating on the product experience.

#### Product

The @product team is concerned with iterating on the product itself. They govern the product roadmap, product marketing, design principles, user research and subject matter expertise, and other product concerns.

*Responsibilities include:*
- develop and iterate on the governance model
- review RFCs or delegate their review to a more relevant team
- maintain OpenFGA's design principles through the RFC review process
- clarify OpenFGA's design principles over time
- collaborate with @core to develop a roadmap that fits OpenFGA's design principles
- collaborate with @core and @contributors on user research
- iterate on the product experience

#### Contributors

The @contributors team exists to keep track of and grant certain privileges to anyone who contributes to the product.

### Joining a team

Anyone can become a member of @contributors team: reach out to anyone on the @core or @product teams via any of the channels in the [Support](#support) section with a request to join and they will make the change.

From there, when someone has a will to be more involved in any of the other teams' responsibilities, and have made significant enough contributions to the product, being promoted to being a member of the @core or @product teams requires making a request and receiving a majority vote from those teams. For more info, see the [Governance-Related Policies and Procedures](#governance-related-policies-and-procedures) section.

### Leaving a team

Should someone wish to leave a team, they can reach out to a member of the Core team via any of the channels in the [Support](#support) section with a request.

### Creating a new team

As the product grows, it will become more useful to further subdivide the teams. This will enable the project to assign code coverage, streamline conversations, and create subject-matter-expertise where possible. If you have an idea for a new team, start a [GitHub Discussion](https://github.com/orgs/openfga/discussions) in order for the community to track it and gain alignment.

## Governance-Related Policies and Procedures

Decisions regarding any of the processes or policies outlined in this Governance model are reached through consensus among the team members through a 66%+ supermajority unless otherwise expressly stated through the team's own processes.

Voting can be expressed through pull request review, leaving a comment, or through some other form of record - ideally permanent.

Teams are not required to have designated leaders. Teams may choose to designate a leader and define their role and responsibilities through a vote amongst the team.

### Amending the Governance Model

Nothing here is set in stone. Please improve this document as necessary. Pull requests to this process (`GOVERNANCE.md`) will be reviewed by the @core and @product teams.

## Contributing

We welcome contributions from the broader community! If you would like to contribute to OpenFGA, take a look at the [CONTRIBUTING.md](https://github.com/openfga/.github/blob/main/CONTRIBUTING.md) guide.

## Support

If you have any questions, feedback, or ideas for OpenFGA, we would love to hear from you. Here are a few ways you can get in touch:

* Join the [OpenFGA Community](https://openfga.dev/community) in the CNCF Slack or [GitHub Discussions](https://github.com/orgs/openfga/discussions).
- Reach out to us [on Twitter](https://twitter.com/OpenFGA)
- Send an email to [contact@openfga.dev](mailto:contact@openfga.dev)