Thanks for considering a contribution. Plinth is open source from day one and built to be modified — by you, by your team, by your regulator. This guide is the short version of how we work.
- Bugs and feature requests: file an issue on the relevant repo. Use the templates.
- Questions and proposals: open a Discussion — issues are for actionable work.
- Security disclosures: do not file an issue. Email
security@plinth.run. See SECURITY.md. - Looking for a first issue? Filter by the
good first issuelabel across the org.
- Small scope. A PR should do one thing. If you find yourself writing "and also", split.
- Tests included. New behavior gets new tests. Bug fixes get a regression test.
- No drive-by reformatting. Format-only changes go in a separate PR labelled
chore: format. - Conventional commit titles.
fix:,feat:,docs:,chore:,refactor:,test:,perf:,build:,ci:. The PR title is what lands in the squashed commit. - DCO sign-off. Use
git commit -s. Every commit must be signed off; CI enforces this.
Each repo has its own README.md with the local commands. The umbrella expectations:
- Go repos target Go 1.23.
go test ./... -racemust pass. - TS repos use pnpm 10.
pnpm install --frozen-lockfile && pnpm -r build && pnpm -r testmust pass. pre-commitis recommended; configs live in each repo.
- A maintainer acknowledges every PR within 3 working days.
- First substantive review within 5 working days for PRs ≤ 200 lines, 10 working days otherwise.
- We're a small team. If a PR is sitting, ping it in the relevant repo's Discussions thread.
We record non-obvious decisions as ADRs in plinth-dev/docs/src/content/docs/adr/ using the Michael Nygard format.
Major design changes are proposed as RFCs in plinth-dev/.github/rfcs/ — open a PR adding NNNN-title.md from the template.
By participating, you agree to abide by our Code of Conduct. Violations: report to conduct@plinth.run.
By contributing, you agree your contribution is licensed under the MIT License, the project's license.