grafana/grafana
How to contribute
A practical, repository-oriented index of how to work in this codebase. The canonical contributor handbook lives in CONTRIBUTING.md and the contribute/ directory; this section summarizes and links the parts a code reader most often needs.
Picking up work
- Browse open issues and filter by team / squad labels (e.g.
area/dashboard,area/alerting). Most squads keep their own backlog labels. - Beginner-friendly issues are tagged
beginner friendly. - The CLA must be signed before a PR can land — the CLA assistant prompts you on first PR.
PR mechanics
- Branch naming is per-author preference; branches are merged via squash on
main. - Frontend and backend changes ship as separate PRs when possible. They are released on different cadences and the CI pipelines differ.
- Every code change should have tests when feasible — see Testing.
- Public APIs (HTTP/REST or
@grafana/*package exports) change via a documented review by the relevant squad. - Conventional commit prefixes are not enforced but most commit titles use a domain prefix:
Dashboards: Fix …,Alerting: Add …,Docs: …. Look atgit log --onelinefor the local style.
Definition of done
A change is ready to merge when:
- CI is green (frontend tests + backend tests + e2e + lint).
- CODEOWNERS-required reviewers (
.github/CODEOWNERS) have approved. - New tests have been added for new behavior (see the patterns referenced in Testing).
- User-facing changes include a changelog entry — usually generated automatically from the PR title and labels.
- For schema or feature-flag changes, the relevant
make gen-*outputs are committed.
Where things live
| If you want to … | Look here |
|---|---|
| Add an HTTP route | pkg/api/ (handler) + pkg/api/api.go (registration) |
| Add a backend service | New folder in pkg/services/<name>/, wire up in pkg/server/wire.go |
| Add a feature flag | pkg/services/featuremgmt/registry.go + make gen-feature-toggles |
| Add a frontend feature | New folder under public/app/features/<name>/ |
| Add or modify a panel plugin | public/app/plugins/panel/<name>/ |
| Add or modify a datasource plugin | public/app/plugins/datasource/<name>/ (frontend) and pkg/tsdb/<name>/ (backend) |
| Add a CUE-defined kind | kinds/<name>/ + make gen-cue |
| Add a new app-platform resource | apps/<name>/ + make gen-apps |
Sub-pages
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.