Thanks for taking the time to contribute. We're a small team shipping real products, and outside contributions help us move faster and ship better software.
This document is the default contribution guide for every repo in the FiveD Studio organization. Individual repos may add their own CONTRIBUTING.md that overrides specific sections — when in doubt, the repo's own guide wins.
We follow a lightweight, founder‑mode process:
- Talk before you build. For anything non‑trivial, open an issue or draft PR first — it's faster than rewriting after a wrong turn.
- Small PRs, fast review. Aim for diffs under ~400 lines. Bigger changes should be staged.
- Trunk‑based development.
mainis always shippable. Long‑lived branches are a smell. - Tests are part of "done". New behavior gets tests; bug fixes get a regression test.
- Ship the smallest thing that works. Then iterate based on real signal.
- 🐛 Report bugs via the bug report template
- 💡 Suggest features via the feature request template — please include the user problem, not just the solution
- 📝 Improve docs — fixing a confusing README is high‑leverage
- 🧪 Add tests for under‑covered code paths
- 🔧 Send a PR for an open issue (look for
good first issueandhelp wantedlabels)
Setup varies per project — see each repo's README for the canonical commands. As a baseline, most repos support:
# clone
git clone https://github.com/fived-studio/<repo>.git
cd <repo>
# install
make install # or: pnpm install / npm install / mvn install / pip install -e .
# run tests
make test
# run locally
make devIf make isn't there, the README will spell it out.
Before opening a PR, please confirm:
- The change is scoped — one logical concern per PR
- Tests pass locally (
make testor repo equivalent) - New behavior has tests; bug fixes have regression tests
- Linter and formatter are clean
- Public APIs, env vars, and breaking changes are documented in the PR description
- Commit messages follow Conventional Commits (e.g.,
feat: add ...,fix: prevent ...) - You've signed off on the Code of Conduct
PRs are squash‑merged by default. We rewrite the merge title to match Conventional Commits if needed.
We use Conventional Commits because it makes changelogs almost free:
feat(checkout): support saved payment methods
fix(api): handle null user in /v1/me
chore(deps): bump zod to 3.23
docs(readme): clarify env var requirements
Allowed types: feat, fix, chore, docs, refactor, perf, test, build, ci, revert.
Do not open a public issue. See SECURITY.md for our private disclosure process.
- General questions → SUPPORT.md
- Found a bug → open an issue with the bug template
- Want to chat → reach out to a maintainer on the org profile
We read everything. Thanks for helping us ship.