Skip to content

Update stewardship guildelines and process #7867

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Jun 10, 2025
33 changes: 33 additions & 0 deletions .github/workflows/stewards-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Update Steward Table in README

on:
push:
branches: [main]
paths:
- stewards.yml

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: npm install js-yaml

- name: Run table generator
run: node utils/stewards-table.js

- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
commit-message: "Update README table from stewards.yml"
branch: update-readme-table
title: 'chore: update README table from stewards.yml'
body: 'This PR updates the README.md table to refelct changes in stewards.yml.'
add: README.md
57 changes: 56 additions & 1 deletion contributor_docs/steward_guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

# Steward Guidelines

Whether you have just joined us as a steward, are a seasoned maintainer of p5.js, or are somewhere in between, this guide contains information as well as tips and tricks that will help you effectively contribute to p5.js. Most of what is written here are guidelines unless otherwise stated, which means you can adapt the practices shown here to suit your workflow.
Whether you are new to p5.js contribution, are already active on the p5.js GitHub repositories, or are somewhere in between, this guide contains information about p5.js stewardship. If you are not sure what to expect from stewards, or if you considering how to volunteer or get started as a steward, read on!


## Table of Contents

- [Stewardship](#stewardship)
- [Community Care](#community-care)
- [Areas](#areas)
- [Becoming a Steward](#becoming-a-steward)
- [Issues](#issues)
- [Bug report](#bug-report)
- [Feature request](#feature-request)
Expand All @@ -28,6 +32,57 @@ Whether you have just joined us as a steward, are a seasoned maintainer of p5.js

---

## Stewardship

### Community Care

An open source ethos includes [accessibility, education, collaboration, transparency, and agency](https://www.opensourceethos.net/). To live and practice these values while we write code together needs a lot of community care. These are the community care practices that are part of our definition of stewardship:

1. Welcoming new contributors to GitHub through **friendly comments** and helpful **code reviews**
2. Helping to **facilitate feature discussions** and resolve technical disagreements
3. Suporting **releases** of the p5.js software through bug reporting, bug fixing, feature completion

The rest of these guidelines provide some tips and tricks that will help you effectively contribute to p5.js, and to helpfully guide others' contributions. Most of what is written here are guidelines unless otherwise stated, which means you can adapt the practices shown here to suit your workflow.

Everyone is invited to help steward the community when you can! We are happy to see contributors welcome new contributors, review others' code, and provide API design feedback. There are also some concrete roles:

1. Contributors are able to make Issues, PRs, Comments, and Code Reviews.
2. Maintainers are also able to merge PRs and admin other parts of the codebase.

Stewards sit in-between: they can make Issues, PRs, Comments, and Code Reviews, but when they are stewarding a particular area, they can also be tagged by other contributors to help with discussion and review.

As a contributor, you can check the current stewards in the p5.js repository's README file and tag relevant stewards - but please be mindful of our contributor guidelines, which emphasize patience and mindfulness that most of the technical work on an open-source project is volunteer.

As a steward, we hope that you regularly chime in on code reviews on Issues or PRs that you did not make, if they are in your area and if you are able to provide helpful guidance!

### Areas

There are different areas of work that stewards can be responsible for. These areas match the GitHub Labels in most cases, with a couple of exceptions. Below is the list of areas.

- **Accessibility**: This area specifically refers to digital and web accessibility, including, for example, screen reader suport via API like `describe(..)` as well as accessibility support on the reference website
- **Core**: Refers to core p5.js API, including rendering and environment
- **DevOps**: Refers to build process, unit testing,
- **Documentation**: includes both reference in the core codebase that is exposed on the website, the contributor docs, and other website content
- i18n (Internationalization / **Translation**): Includes writing and reviewing translations, particularly for `es`, `hi`, `ko`, `zh`
- **Graphics**: Contains subareas of WebGL and [p5.strands](https://beta.p5js.org/tutorials/intro-to-p5-strands/)
- **Color**: Includes Color, ColorMode, accessibility improvements around color usage, colro in 2D and 3D, and so on
- **Typography**: Refers to all topics on handling text and font
- **Math**: Includes both external Math API and internal performance improvements
- **Shapes**: Includes working with custom shapes in both 1.11.x and 2.x versions of p5.js
- **Maintainers**: This group can merge PRs
- **p5.sound.js**: The [new p5.sound.js](https://github.com/processing/p5.sound.js) addon library
- **p5.js-website**: Non-content aspects of the [reference website](https://p5js.org/) - for example, its structure, automations, technical improvements and so on.

These focus areas may change over time depending on the needs of the project - so if you are going through the process of applying to be a steward, you are welcome to proposals new areas!

### Becoming a Steward

There are two ways to become a steward:

1. _Nomination_ by maintainers or other stewards, such as in conversation over Discord, Discourse, or GitHub.
2. _Application_ by creating a PR to update `stewards.yml` with your GitHub @ and proposed areas. Please keep in mind each area should have 1-3 stewards. We are always looking for **translation stewards**! Once you make your application PR, other maintainers or stewards may ask for additional supporting material, like making a PR related to the areas you're interested in, or participating in some related discussion.

To remain a steward, you must contribute as a steward to at least 1 of the 2 most recent minor releases (e.g., 2.1.0 or 1.11.0 - when the middle number changes). These are not as frequent as patches (e.g., 2.0.3 to 2.0.4 - when the rightmost number changes), and in practice this means that stewards are expected to be active every 4-6 months or so, supporting other contributors through discussion or code review - not necessarily writing code. To step down from stewardship, you can make a PR to remove yourself from `stewards.yml`. You are always welcome to take a pause and reapply in the future!

## Issues

Expand Down
56 changes: 56 additions & 0 deletions stewards.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
aferriss:
- Graphics:
- WebGL

calebfoss:
- Accessibility

davepagurek:
- Core
- Maintainers
- Graphics:
- WebGL

dhowe:
- Typography

qianqianye:
- Maintainers

ogbabydiesal:
- p5.sound.js

limzykenneth:
- Maintainers
- DevOps
- Documentation
- Color
- i18n:
- zh

perminder-17:
- Graphics:
- WebGL
- Documentation
- Maintainers

lukeplowden:
- Graphics:
- WebGL
- p5.strands

ksen0:
- Maintainers
- p5.js-website

Divyansh013:
- i18n:
- hi

GregStanton:
- Math
- Shapes

holomorfo:
- Math

53 changes: 53 additions & 0 deletions utils/stewards-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
const yaml = require('js-yaml');
const fs = require('fs');

const yamlData = fs.readFileSync('stewards.yml', 'utf8');
const parsed = yaml.load(yamlData);

const areaMap = {};
const maintainers = new Set();
const supportedi18n = new Set(['hi', 'ko', 'zh', 'es']);

for (const [user, roles] of Object.entries(parsed)) {
roles.forEach(role => {
if (typeof role === 'string') {
if (role.toLowerCase() === 'maintainers') {
maintainers.add(user);
}
areaMap[role] = areaMap[role] || new Set();
areaMap[role].add(`@${user}`);
} else {
for (const [main, subs] of Object.entries(role)) {
subs.forEach(sub => {
if (main === 'i18n' && !supportedi18n.has(sub)) return;
const key = `${main} (${sub})`;
areaMap[key] = areaMap[key] || new Set();
areaMap[key].add(`@${user}`);
});
}
}
});
}

const header = '| Area | Steward(s) |';
const divider = '|------|-------------|';

const sortedEntries = Object.entries(areaMap).sort(([aKey], [bKey]) => {
if (aKey === 'Maintainers') return -1;
if (bKey === 'Maintainers') return 1;
return aKey.localeCompare(bKey);
});

const rows = sortedEntries.map(([area, users]) => `| ${area} | ${[...users].sort().map(
u => `[@${u}](https://github.com/${u})`
).join(', ')} |`).join('\n');
const newTable = [header, divider, rows].join('\n');

let readme = fs.readFileSync('README.md', 'utf8');

readme = readme.replace(
/\| *Area *\|.*\n\|[-| ]+\|\n(?:\|.*\|\n?)*/g,
newTable + '\n'
);

fs.writeFileSync('README.md', readme);