Contributing
Thanks for considering a contribution. This project is small but maintained — every well-scoped issue, dashboard, doc fix, and code change moves it forward.
Three pages cover everything you'll need:
Ways to contribute
Multiple paths beyond code. File a high-signal bug, propose a new metric, share a Grafana dashboard, improve docs, sponsor. Start here if you're new.
Architecture
Why the code is shaped the way it is. The two-tier scrape, the eager-kickoff promise pattern, JS-side joins instead of $lookup, cardinality gates, ESM/NodeNext gotchas. Read this before any non-trivial code change — it'll save you reviewer round-trips.
Adding a metric
Step-by-step playbook for the most common code contribution: adding a new metric. Covers tier selection (basic vs advanced), the cardinality budget, where to put the code, indexes, tests, and docs.
Cutting a release (maintainers)
The release is mostly automated. Two steps:
- Prepare: Actions tab → "Prepare release" workflow → Run workflow → enter the new version (e.g.
0.9.0). The workflow snapshots the docs site, bumpspackage.json, and opens a PR. Review, merge. - Tag: after the release PR merges, tag the merge commit and push (
git tag v0.9.0 origin/main && git push origin v0.9.0) — or use the GitHub UI's "Draft a new release" flow.
CD takes over: multi-arch build, cosign sign, attest build-provenance + SBOM, Trivy scan, attach SBOM to the Release. The docs site re-deploys with the new version snapshot visible in the versions dropdown.
Ground rules
- All contributions are MIT-licensed (see LICENSE).
- Be excellent — see CODE_OF_CONDUCT.md.
- Security issues — please use the private security advisory flow, not a public issue. Full process: SECURITY.md.
- Disclose AI usage — if a contribution was substantially generated by an AI assistant, mention it in the PR description. Not a problem; we just want it noted.