This document outlines the governance model for TresJS ecosystem. This is a living document and will be updated as the ecosystem evolves. It includes detailed descriptions of the different roles, nomination processes, code review processes and Code of Conduct enforcement.
Anything that supports the TresJS community is a valuable contribution.
Contributions might come in different forms, they are all meaningful and valuable to the community.
- Writing code (see our contribution guidelines)
- Reporting a bug (with a proper reproduction link 😜)
- Suggesting an enhancement
- Documentation
- Translating docs to other languages
- Helping other users on Discord
- Creating tutorials or articles on how you added 3D with TresJS to your Vue website
No contribution is too small, we are all here to learn and grow together.
You can contribute to TresJS no matter your engineering ability. Our goal is to recognize all contributors to the project regardless of skill, experience or background.
Have you done any of the following? Congratulations!, you are officially recognized as a contributor to the project!
Examples of recognized contributions:
- Github: Filing a detailed bug report or feature request
- Github: Updating documentation or fixing a typo
- Helping people on GitHub, Discord, etc.
- Answering questions on Stack Overflow, socials, etc.
- Creating tutorials, videos, courses, and live streams about TresJS
Rest assured, this role does not require any extra responsibilities or time commitment. We hope you stick around and keep participating in our community!
You may self-nominate yourself by sending the message !contribute
to any Discord channel followed by a link or a text explaining your contribution. Example: !contribute created a new demo on the #showcase channel
You may also be granted this role automatically if you are active and helpful on Discord
The Maintainer role is available to contributors who want to join the team and take part in the long-term maintenance and growth of the TresJS ecosystem.
This role is critical to TresJS long-term success and growth. Maintainers act as the public face of the project and are most likely to be your first point of contact when interacting with Discord or Github.
Note
Maintainers are not required to write code! Some Maintainers spend most of their time inside Discord, maintaining a healthy community there. Others work on technical documentation, reviewing PRs, support, or design.
There is no strict minimum number of contributions needed to reach this level, as long as you can show sustained involvement over some amount of time (at least a few months).
- GitHub:: Submitting multiple non-trivial pull requests and RFCs
- GitHub:: Reviewing multiple non-trivial pull requests and RFCs
- Discord:: Supporting users in Discord, especially in the #support channel
- Discord: Active participation in RFC calls and other events
- GitHub + Discord: Triaging and confirming user issues
This list is incomplete! Similar contributions are also recognized.
- All privileges of the Contributor role, plus...
- Invitation to the
@maintainer
role in Discord - Invitation to the private
#maintainers
channel on Discord - Invitation to the
TresJS
organization on GitHub - Invitation to the
@maintainers
team on GitHub - Ability to moderate Discord to remove spam, harmful speech, etc.
- Ability to push branches directly to the withTresJS GitHub organization (personal forks no longer needed). (Except for the
main
branch) - Ability to review GitHub PRs
- Ability to merge some GitHub PRs
- Ability to vote on some initiatives (see Voting below)
- Participating in the project as a team player
- Bringing a friendly, welcoming voice to the TresJS community
- Being active on Discord, especially in the support channels
- Triaging new issues
- Reviewing pull requests
- Merge some, non-trivial community pull requests
- Merge your own pull requests (once reviewed and approved)
- To be nominated, a nominee is expected to already be performing some of the responsibilities of a Maintainer.
- You can be nominated by any existing Maintainer (L2 or above).
- Once nominated, there will be a vote by existing Maintainers.
- See vote rules & requirements for info on how the vote works.
The Core Maintainer role is available to community members who have a larger-than-usual impact and commitment to the TresJS community and ecosystem. They are seen as leaders in the project and are listened to by the wider TresJS community. A Core member is recognized for contributing a significant amount of time and energy to the project through issues, pull requests, bug fixes, implementing advanced enhancements/features, and/or proactively providing feedback on RFCs.
- All privileges of the Maintainer role, plus...
- Invitation to the
@core
role on Discord - Invitation to the private
#core-team
channel on Discord - Invitation to the
@core
team on GitHub - Ability to vote on most initiatives (see Voting below)
- All of the responsibilities of L2, including...
- Ownership over specific part(s) of the project (a repo, a package, a website)
- Ownership over the long-term health and success of TresJS
- Leadership as a role model to other maintainers and community members
- To be nominated, a nominee is expected to already be performing some of the responsibilities of a Core member.
- You can be nominated by any existing Core member (L3 or above).
- Once nominated, there will be a vote by existing Core members.
- See vote rules & requirements for info on how the vote works.
The Steward is an additional role bestowed to 1 (or more) Core members of the project.
The role of Steward is mainly an administrative one. Stewards control and maintain sensitive project assets, assist in resolving conflicts, and act as tiebreakers in the event of disagreements.
In extremely rare cases, a Steward can act unilaterally when they believe it is in the project's best interest and can prove that the issue cannot be resolved through normal governance procedure. The steward must publicly state their reason for unilateral action before taking it.
The project Steward is currently @alvarosabu
- Access to
@tresjs
social media accounts - Access to organization Netlify account
- Administrator privileges on the TresJs GitHub organization
- Administration privileges on the TresJS Discord server
- Publish access to all the organization's packages on NPM
- Domain registrant and DNS access to the
tresjs.org
domain and subdomains - Ability to initiate a vote
- Ability to veto votes and resolve voting deadlocks
- Define project direction and planning
- Ability to decide on moderation decisions
- Stewards cannot be self-nominated.
- Only Core members are eligible.
- New Stewards will be added based on a unanimous vote by the existing Steward(s).
- In the event that someone is unreachable then the decision will be deferred.
Contributor roles are granted for as long as the person wishes to engage with the project. However, over time an active community member may choose to step away from the TresJS ecosystem to work on other things. Moving on from a project is a natural and well-understood part of any open-source community, and we celebrate it!
Alumni is a special designation and role for any person who was once an active maintainer (L2 or above) but is now no longer actively involved. By retiring and joining Alumni you trade in your current set of roles, privileges, and responsibilities for a new, special Alumni role.
As a Maintainer (L2 or above) you can retire your role at any time by pinging the project Steward and requesting Alumni status. You can initiate this action yourself if you know ahead of time that you need to step away from the project.
If you are not actively contributing to TresJS's repositories or the TresJS community for longer than six months, the project Steward may proactively retire your role, designate you as a project alumnis, and notify you of the change.
As an Alumni member, you are still a part of the TresJS community and can continue to be a part of our Discord, GitHub, and anywhere else. You may also request to have your old roles reinstated at any time through the normal nomination & voting process for that role.
Rejoining the project as a contributor (L1 or above) will automatically remove you from the Alumni role.
Certain project decisions (like governance changes and membership nominations) require a vote. Below are the changes that require a vote, and the rules that govern that vote.
The project Steward may initiate a vote for any unlisted project decision. General Rules will apply, along with any additional rules provided at the steward's discretion. If this unlisted project decision is expected to be repeated in the future, voting rules should be agreed on and then added to this document.
- Members may abstain from any vote.
- Members who do not vote within 5 days will automatically abstain.
- Stewards may reduce the 5-day automatic abstain for urgent decisions.
- Stewards reserve the right to veto approval with a publicly disclosed reason.
This process kicks off once a valid nomination has been made. See "Maintainer - Nomination Process" above for more details on the nomination.
Who can vote: All Maintainers (L2 and above).
- A vote thread should be created in Discord #maintainers channel (the private channel for all maintainers).
- A vote thread can be created by any Maintainer, Core member, or the Steward.
- Once a vote thread is created, existing Maintainers can discuss the nomination in private.
- The normal 5-day voting & discussion window begins with the thread creation.
- Voting can be done in the thread (visible to other voters) or in a private DM to the project Steward.
- Once the vote is complete, the thread is deleted.
- The vote must receive an overwhelming majority (70%+) to pass.
- If the vote passes the nominee will be made a Maintainer and all privileges will be made available to them.
- If the vote fails the project Steward is responsible for informing the nominee with constructive, actionable feedback. (Note: this is not required if the nomination was made in the
#core
channel, or if the nominee was otherwise not made aware of their nomination).
This process kicks off once a valid nomination has been made. See "Core Member - Nomination Process" above for more details on the nomination.
Who can vote: All Core members (L3 and above).
- A vote thread should be created in Discord
#core
channel (the private channel for Core members). - A vote thread can be created by any Core member, or the Steward.
- Once a vote thread is created, existing Core members can discuss the nomination in private.
- The normal 5 day voting & discussion window begins with the thread creation.
- Voting can be done in the thread (visible to other voters) or in a private DM to the project Steward.
- Once the vote is complete, the thread is deleted.
- The vote must receive an overwhelming majority (70%+) to pass.
- If the vote passes the nominee will be made a Core Member and all privileges will be made available to them.
- If the vote fails the project Steward is responsible for informing the nominee with constructive, actionable feedback. (Note: this is not required if the nomination was made in the #core channel, or if the nominee was otherwise not made aware of their nomination).
A vote is initiated once a pull request to the GOVERNANCE.md file is submitted by a Core Member.
If the pull request submitter is not a Core Member, the PR can be closed by any Maintainer without a vote. However, any Core Member may request a vote on that PR, in which case a vote is initiated.
Who can vote: Core members (L3 and above). All Maintainers are encouraged to discuss and voice their opinions in the pull request discussion. Core members should take the opinions of Maintainers into consideration when voting.
- The pull request discussion thread is used to discuss the governance change.
- The normal 5-day voting & discussion window begins with either the PR creation or the removal of
WIP:
from the PR title if the PR was created as a draft. - Voting can be done in the pull request via a review of either Approve (For) or Change Requested (Against).
- The vote must receive a simple majority (50%+) to pass.
- If the vote passes the PR is merged and the changes take effect immediately.
- If the vote fails the PR is closed and no change occurs.
Inspired by withAstro, [withAstro]