This document defines the project governance for NATS.
There are two roles that convey decision-making powers: Core-maintainer and Maintainer. MAINTAINERS.md defines the membership of these roles on a per project basis.
Core-maintainers are responsible for the project as a whole and are expected to guide the general project direction as well as be the final reviewer on PRs and perform releases. Maintainers are responsible for one or more components within a project, and are expected to contribute code and documentation, review PRs including ensuring quality of code, triage issues, proactively fix bugs, and perform maintenance tasks for these components.
Ideally, all project decisions are resolved by consensus. If this is not possible, maintainers may call a vote. Unless otherwise specified in this document, any vote will be decided by a 2/3 majority that must include a core-maintainer. Maintainers belonging to the same company will count as one vote e.g., 4 maintainers employed by company “X” will only have one combined vote.
New maintainers must be proposed by an existing maintainer or core-maintainer and must be elected by a 2/3 majority organization vote. Maintainers can be removed by a 2/3 majority organization vote or can resign by notifying the core-maintainers Core-maintainers must be proposed by an existing core-maintainer and must be elected by a 2/3 majority core-maintainer vote. Core-maintainers can be removed by a 2/3 majority core-maintainer vote
Core-maintainers will be added to the NATS GitHub organization and be made an owner of the GitHub organization. Each project will have at least one core-maintainer assigned. Maintainers may get read and write access to a repository with the approval of the appropriate project core-maintainers.
All PRs must receive approval from at least one core-maintainer before merging. PRs can only be merged by core-maintainers.
All changes in Governance require a 2/3 majority organization vote of the maintainers and core-maintainers.