Grafana Compatibility and Operations Guide
Use this skill when upgrading, configuring, provisioning, extending, or operating
Grafana, especially when code or automation depends on an API, feature toggle,
plugin contract, alerting behavior, data-source integration, or storage detail.
How to use this skill
- Determine the deployed Grafana version and edition from the project manifest,
image tag, package lock, or runtime configuration.
- Identify the task area in the reference index below.
- Apply only guidance relevant to the deployed version. Prefer manifests, code,
tests, and observed behavior when they differ from compatibility notes.
- For an upgrade, inspect every intermediate major-version migration and take a
database backup before any irreversible schema or storage transition.
- Audit feature toggles, deprecated endpoints, RBAC actions, plugin manifests,
container assumptions, and provisioning workflows before rollout.
- Validate the change in a staging environment with representative dashboards,
alerts, plugins, authentication, rendering, and data-source queries.
Reference index
| Reference |
Topics |
| Alerting |
Rules, recording, evaluation, state, Alertmanager, contact points, templates, imports, and alerting APIs |
| Dashboards and visualizations |
Dashboard schema and layout, variables, panels, transformations, annotations, reporting, and rendering |
| Data sources and observability |
Prometheus, Loki, Tempo, CloudWatch, Elasticsearch, SQL, traces, profiles, expressions, and query behavior |
| Identity, access, and Enterprise |
Authentication, SSO, SCIM, RBAC, permissions, auditing, cloud migration, and Enterprise controls |
| Plugins and frontend |
Plugin installation, manifests, runtime isolation, frontend APIs, UI components, and build dependencies |
| Provisioning, storage, and APIs |
Git Sync, file provisioning, Unified Storage, database migrations, HTTP APIs, webhooks, and resource identity |
| Upgrades and runtime |
Major-upgrade sequencing, removed settings and toggles, commands, containers, server defaults, and Grafana Live |
Breaking changes and migration priorities
Do not use Grafana 13.0.0 for affected Git Sync upgrades
Self-managed 12.x deployments using the Git Sync-related provisioning,
kubernetesClientDashboardsFolders, kubernetesDashboards, and
grafanaAPIServerEnsureKubectlAccess flags can lose or revert dashboards and
folders on 13.0.0. Upgrade directly to 13.0.1 or later. If local and Git-managed
content are mixed, restore the pre-upgrade database before proceeding.
Treat unified-storage migration as one-way
The first 13.0 startup migrates folders and dashboards out of the legacy SQL
tables and records completion in unifiedstorage_migration_log. A downgrade
reads stale legacy tables, and a later re-upgrade does not replay post-downgrade
changes. Roll back by restoring the pre-upgrade database, not by downgrading the
binary against the migrated database.
Budget space for the Grafana 12 annotation migration
An 11.x-to-12.x upgrade rewrites the full annotation table and its indexes to
populate annotation.dashboard_uid. Back up the database and reserve two to
three times the table size in free space. Reclaim space later in a low-traffic
window because VACUUM FULL, OPTIMIZE TABLE, and SQLite VACUUM lock work.
Move automation from numeric IDs to UIDs
Malformed data-source UIDs are rejected by default from 12.0, including values
over 40 characters. Dashboard, annotation, analytics, star, home-dashboard,
data-source, and Usage Insights surfaces progressively remove or deprecate
numeric-ID and name-based contracts. Prefer stable UIDs throughout JSON,
provisioning, URLs, permissions, and alert queries.
Migrate from legacy HTTP APIs
The legacy /api family is deprecated in Grafana 13 in favor of versioned
Kubernetes-style /apis resources. Numeric-ID data-source endpoints are disabled
by default, and multiple legacy Alertmanager configuration and notification
provisioning endpoints are removed or deprecated. Keep any temporary legacy flag
exception narrowly scoped and plan its removal.
Update plugins before the React 19 upgrade
Before moving to Grafana 13, update the current Grafana release line to its latest
patch, update and validate every installed plugin, and only then perform the major
upgrade. Grafana 12 removes Angular support; Grafana 13 moves to React 19 and
removes or changes multiple @grafana/ui contracts.
Replace plugin-mode image rendering
Grafana 13 removes plugin-mode Image Renderer support. Run rendering as a separate
service and configure the same nonempty, non-- [rendering] renderer_token in
Grafana and the renderer. JWT renderer authentication is enabled by default.
Revisit bundled data-source assumptions
Grafana 13 removes the core Elasticsearch data source. Grafana 13.1 removes core
Zipkin and removes Azure and SigV4 authentication from the core Prometheus
integration, together with the grafana-prometheus package. Install or redesign
integrations explicitly instead of assuming those capabilities remain bundled.
Review plugin process environment access
From 12.4, plugin processes do not inherit host environment variables by default.
External AWS plugins retain AWS SDK credential-chain variables, and plugins get
PLUGIN_UNIX_SOCKET_DIR for restricted temporary-directory deployments. Pass
required configuration through supported plugin mechanisms.
Alerting quick reference
Identify rules by UID
Rule titles and library-panel names are not unique. Alert groups can also contain
position-matched duplicates or rules without a group. Use rule UIDs and explicit
resource identity in tooling rather than title or position alone.
Account for state and evaluation defaults
Alert retry max_attempts defaults to 3, recording rules become enabled by
default in 12.1, compressed alert state becomes the default in 12.2, and the
compression toggle is removed in 13.2. Pending periods apply to NoData and Error
alerts from 12.4. Test state transitions, retries, recovery windows, and recording
destinations during upgrades.
Use current provisioning resources
Prefer the App Platform notification resources under
/apis/notifications.alerting.grafana.app/v1beta1/namespaces/{namespace}/ for
receivers, routing trees, template groups, time intervals, and inhibition rules.
Provisioning authorization now checks resource-specific permissions, protected
fields, provenance, and managed-route access.
Update custom alerting roles
Alertmanager status requires alert.notifications.system-status:read in Grafana
13. Custom roles and automation must also account for dedicated template-testing,
enrichment, snapshot, and provisioning permissions where applicable.
Provisioning and storage quick reference
Treat Git Sync ownership as authoritative
Provisioning and Git Sync are enabled by default in 13.0. Repository-managed
resources reject ownership mutations, and unmanaged resources cannot be
overridden. Validate branch protection, write access, repository emptiness,
webhook tokens, signing, URL/branch/path identity, and folder metadata.
Protect webhook and external URL configuration
Provisioning webhooks reject GET, rotate secrets, require a new token after URL
changes, and validate ref; GitHub handling adds replay protection. Configure
public_root_url for externally visible provisioning links and explicitly set
sync write timeouts when long writes require it.
Check Unified Storage cleanup behavior
Unified Storage honors GF_DATABASE_URL, migration locking, PostgreSQL TLS, and
migration cache/Parquet controls. In 13.2, garbage collection defaults to real
cleanup because dry-run defaults to false. Make dry-run intent explicit before
enabling scheduled collection.
Plugin and frontend quick reference
Validate manifests and compatibility
Plugin installation honors grafanaDependency and offers no compatibility bypass
other than deliberate ZIP installation. Grafana can reject unsupported Angular
versions. Plugin manifests require routes[].path from 12.4 and includes[].type
from 13.0.
Migrate changed UI contracts
Use Combobox instead of deprecated Select; account for Combobox grouping and
isItemDisabled. The Gauge visualization remains available although the
Gauge component is removed. Replace removed Modal props, Graph graveyard APIs,
SeriesIcon.noMargin, and synchronous datasourceSrv access. Review required
accessibility props on childless ToolbarButton and required Slider.inputId.
Runtime quick reference
Update executable names and images
Use grafana cli and grafana server; the old hyphenated commands are removed.
Move Docker references from deprecated grafana/grafana-oss to
grafana/grafana. Derived images must account for Grafana-provided glibc 2.40,
Alpine 3.24.1, and the Ubuntu base transition from 22.04 to 24.04.
Make changed defaults explicit
server.enable_gzip defaults to true in 13.0. Short URLs default to never
expiring, Grafana HTTP metrics use native histograms by default, recording rules
are enabled by default, scripted dashboards are disabled by default in 13.2, and
Unified Storage garbage collection is no longer dry-run by default. Pin settings
when infrastructure depends on earlier behavior.
Remove dead feature gates
Do not leave removed toggles in configuration or branch application behavior on
them. Feature lifecycles include promotion to defaults or general availability,
followed later by toggle removal. Consult the runtime reference before carrying a
feature-toggle list across releases.
Verification checklist
- Back up the database and test both forward migration and restore procedures.
- Inventory dashboard, data-source, rule, folder, annotation, and role UIDs.
- Exercise alert evaluation, notification delivery, imports, templates, and HA.
- Verify SSO, JWT, SCIM, service-account, anonymous, and custom-role behavior.
- Run representative Prometheus, Loki, Tempo, SQL, CloudWatch, trace, and profile queries.
- Validate plugin installation, signatures, manifests, process configuration, and UI APIs.
- Confirm Git Sync ownership, webhook security, signing, folder metadata, and resync behavior.
- Check metrics, audit events, logs, reporting, image rendering, and container dependencies.
- Remove obsolete flags, endpoints, settings, executable names, and image repositories.
- Prefer a tested restore over an unsupported downgrade after one-way migration.
1---2name: grafana-knowledge-patch3description: Grafana4license: MIT5---678# Grafana Compatibility and Operations Guide910Use this skill when upgrading, configuring, provisioning, extending, or operating11Grafana, especially when code or automation depends on an API, feature toggle,12plugin contract, alerting behavior, data-source integration, or storage detail.1314## How to use this skill15161. Determine the deployed Grafana version and edition from the project manifest,17 image tag, package lock, or runtime configuration.182. Identify the task area in the reference index below.193. Apply only guidance relevant to the deployed version. Prefer manifests, code,20 tests, and observed behavior when they differ from compatibility notes.214. For an upgrade, inspect every intermediate major-version migration and take a22 database backup before any irreversible schema or storage transition.235. Audit feature toggles, deprecated endpoints, RBAC actions, plugin manifests,24 container assumptions, and provisioning workflows before rollout.256. Validate the change in a staging environment with representative dashboards,26 alerts, plugins, authentication, rendering, and data-source queries.2728## Reference index2930| Reference | Topics |31| --- | --- |32| [Alerting](references/alerting.md) | Rules, recording, evaluation, state, Alertmanager, contact points, templates, imports, and alerting APIs |33| [Dashboards and visualizations](references/dashboards-and-visualizations.md) | Dashboard schema and layout, variables, panels, transformations, annotations, reporting, and rendering |34| [Data sources and observability](references/data-sources-and-observability.md) | Prometheus, Loki, Tempo, CloudWatch, Elasticsearch, SQL, traces, profiles, expressions, and query behavior |35| [Identity, access, and Enterprise](references/identity-access-and-enterprise.md) | Authentication, SSO, SCIM, RBAC, permissions, auditing, cloud migration, and Enterprise controls |36| [Plugins and frontend](references/plugins-and-frontend.md) | Plugin installation, manifests, runtime isolation, frontend APIs, UI components, and build dependencies |37| [Provisioning, storage, and APIs](references/provisioning-storage-and-apis.md) | Git Sync, file provisioning, Unified Storage, database migrations, HTTP APIs, webhooks, and resource identity |38| [Upgrades and runtime](references/upgrades-and-runtime.md) | Major-upgrade sequencing, removed settings and toggles, commands, containers, server defaults, and Grafana Live |3940## Breaking changes and migration priorities4142### Do not use Grafana 13.0.0 for affected Git Sync upgrades4344Self-managed 12.x deployments using the Git Sync-related `provisioning`,45`kubernetesClientDashboardsFolders`, `kubernetesDashboards`, and46`grafanaAPIServerEnsureKubectlAccess` flags can lose or revert dashboards and47folders on 13.0.0. Upgrade directly to 13.0.1 or later. If local and Git-managed48content are mixed, restore the pre-upgrade database before proceeding.4950### Treat unified-storage migration as one-way5152The first 13.0 startup migrates folders and dashboards out of the legacy SQL53tables and records completion in `unifiedstorage_migration_log`. A downgrade54reads stale legacy tables, and a later re-upgrade does not replay post-downgrade55changes. Roll back by restoring the pre-upgrade database, not by downgrading the56binary against the migrated database.5758### Budget space for the Grafana 12 annotation migration5960An 11.x-to-12.x upgrade rewrites the full `annotation` table and its indexes to61populate `annotation.dashboard_uid`. Back up the database and reserve two to62three times the table size in free space. Reclaim space later in a low-traffic63window because `VACUUM FULL`, `OPTIMIZE TABLE`, and SQLite `VACUUM` lock work.6465### Move automation from numeric IDs to UIDs6667Malformed data-source UIDs are rejected by default from 12.0, including values68over 40 characters. Dashboard, annotation, analytics, star, home-dashboard,69data-source, and Usage Insights surfaces progressively remove or deprecate70numeric-ID and name-based contracts. Prefer stable UIDs throughout JSON,71provisioning, URLs, permissions, and alert queries.7273### Migrate from legacy HTTP APIs7475The legacy `/api` family is deprecated in Grafana 13 in favor of versioned76Kubernetes-style `/apis` resources. Numeric-ID data-source endpoints are disabled77by default, and multiple legacy Alertmanager configuration and notification78provisioning endpoints are removed or deprecated. Keep any temporary legacy flag79exception narrowly scoped and plan its removal.8081### Update plugins before the React 19 upgrade8283Before moving to Grafana 13, update the current Grafana release line to its latest84patch, update and validate every installed plugin, and only then perform the major85upgrade. Grafana 12 removes Angular support; Grafana 13 moves to React 19 and86removes or changes multiple `@grafana/ui` contracts.8788### Replace plugin-mode image rendering8990Grafana 13 removes plugin-mode Image Renderer support. Run rendering as a separate91service and configure the same nonempty, non-`-` `[rendering] renderer_token` in92Grafana and the renderer. JWT renderer authentication is enabled by default.9394### Revisit bundled data-source assumptions9596Grafana 13 removes the core Elasticsearch data source. Grafana 13.1 removes core97Zipkin and removes Azure and SigV4 authentication from the core Prometheus98integration, together with the `grafana-prometheus` package. Install or redesign99integrations explicitly instead of assuming those capabilities remain bundled.100101### Review plugin process environment access102103From 12.4, plugin processes do not inherit host environment variables by default.104External AWS plugins retain AWS SDK credential-chain variables, and plugins get105`PLUGIN_UNIX_SOCKET_DIR` for restricted temporary-directory deployments. Pass106required configuration through supported plugin mechanisms.107108## Alerting quick reference109110### Identify rules by UID111112Rule titles and library-panel names are not unique. Alert groups can also contain113position-matched duplicates or rules without a group. Use rule UIDs and explicit114resource identity in tooling rather than title or position alone.115116### Account for state and evaluation defaults117118Alert retry `max_attempts` defaults to 3, recording rules become enabled by119default in 12.1, compressed alert state becomes the default in 12.2, and the120compression toggle is removed in 13.2. Pending periods apply to NoData and Error121alerts from 12.4. Test state transitions, retries, recovery windows, and recording122destinations during upgrades.123124### Use current provisioning resources125126Prefer the App Platform notification resources under127`/apis/notifications.alerting.grafana.app/v1beta1/namespaces/{namespace}/` for128receivers, routing trees, template groups, time intervals, and inhibition rules.129Provisioning authorization now checks resource-specific permissions, protected130fields, provenance, and managed-route access.131132### Update custom alerting roles133134Alertmanager status requires `alert.notifications.system-status:read` in Grafana13513. Custom roles and automation must also account for dedicated template-testing,136enrichment, snapshot, and provisioning permissions where applicable.137138## Provisioning and storage quick reference139140### Treat Git Sync ownership as authoritative141142Provisioning and Git Sync are enabled by default in 13.0. Repository-managed143resources reject ownership mutations, and unmanaged resources cannot be144overridden. Validate branch protection, write access, repository emptiness,145webhook tokens, signing, URL/branch/path identity, and folder metadata.146147### Protect webhook and external URL configuration148149Provisioning webhooks reject GET, rotate secrets, require a new token after URL150changes, and validate `ref`; GitHub handling adds replay protection. Configure151`public_root_url` for externally visible provisioning links and explicitly set152sync write timeouts when long writes require it.153154### Check Unified Storage cleanup behavior155156Unified Storage honors `GF_DATABASE_URL`, migration locking, PostgreSQL TLS, and157migration cache/Parquet controls. In 13.2, garbage collection defaults to real158cleanup because dry-run defaults to false. Make dry-run intent explicit before159enabling scheduled collection.160161## Plugin and frontend quick reference162163### Validate manifests and compatibility164165Plugin installation honors `grafanaDependency` and offers no compatibility bypass166other than deliberate ZIP installation. Grafana can reject unsupported Angular167versions. Plugin manifests require `routes[].path` from 12.4 and `includes[].type`168from 13.0.169170### Migrate changed UI contracts171172Use `Combobox` instead of deprecated `Select`; account for `Combobox` grouping and173`isItemDisabled`. The `Gauge` visualization remains available although the174`Gauge` component is removed. Replace removed `Modal` props, Graph graveyard APIs,175`SeriesIcon.noMargin`, and synchronous `datasourceSrv` access. Review required176accessibility props on childless `ToolbarButton` and required `Slider.inputId`.177178## Runtime quick reference179180### Update executable names and images181182Use `grafana cli` and `grafana server`; the old hyphenated commands are removed.183Move Docker references from deprecated `grafana/grafana-oss` to184`grafana/grafana`. Derived images must account for Grafana-provided glibc 2.40,185Alpine 3.24.1, and the Ubuntu base transition from 22.04 to 24.04.186187### Make changed defaults explicit188189`server.enable_gzip` defaults to true in 13.0. Short URLs default to never190expiring, Grafana HTTP metrics use native histograms by default, recording rules191are enabled by default, scripted dashboards are disabled by default in 13.2, and192Unified Storage garbage collection is no longer dry-run by default. Pin settings193when infrastructure depends on earlier behavior.194195### Remove dead feature gates196197Do not leave removed toggles in configuration or branch application behavior on198them. Feature lifecycles include promotion to defaults or general availability,199followed later by toggle removal. Consult the runtime reference before carrying a200feature-toggle list across releases.201202## Verification checklist203204- Back up the database and test both forward migration and restore procedures.205- Inventory dashboard, data-source, rule, folder, annotation, and role UIDs.206- Exercise alert evaluation, notification delivery, imports, templates, and HA.207- Verify SSO, JWT, SCIM, service-account, anonymous, and custom-role behavior.208- Run representative Prometheus, Loki, Tempo, SQL, CloudWatch, trace, and profile queries.209- Validate plugin installation, signatures, manifests, process configuration, and UI APIs.210- Confirm Git Sync ownership, webhook security, signing, folder metadata, and resync behavior.211- Check metrics, audit events, logs, reporting, image rendering, and container dependencies.212- Remove obsolete flags, endpoints, settings, executable names, and image repositories.213- Prefer a tested restore over an unsupported downgrade after one-way migration.