Plugin architecture
Grafana’s plugin system enables extending Grafana with new visualizations, data sources, and applications without modifying core code.Plugin types
Grafana supports three main plugin types:Panel plugins
Visualization types that display data:- Graph, table, stat, gauge, etc.
- Render query results
- Custom visualization logic
- Editor UI for configuration
Data source plugins
Connect Grafana to data sources:- Query editors
- Backend query execution
- Authentication and connection management
- Alerting support (optional)
App plugins
Full applications within Grafana:- Custom pages and navigation
- Can include multiple panels and data sources
- Configuration pages
- Custom workflows
Plugin structure
A typical plugin directory:Plugin metadata (plugin.json)
Theplugin.json file defines plugin metadata:
type- Plugin type:panel,datasource, orappid- Unique plugin identifier (format:org-name-type)backend- Whether plugin has a backend componentexecutable- Backend binary nameroutes- Custom API routesdependencies- Required Grafana version and other plugins
Frontend plugin architecture
Panel plugin example
Data source plugin example
App plugin example
Backend plugin architecture
Backend plugins run as separate processes and communicate with Grafana via gRPC.Backend structure
Frompkg/plugins/plugins.go:
Backend plugin implementation
Backend plugin handlers
QueryData handler
Execute data queries:CallResource handler
Custom API endpoints:CheckHealth handler
Health checks:Stream handler
Streaming data:Plugin communication
Frontend to backend
Frontend plugins communicate with their backends through the Grafana backend:DataSourceWithBackend class handles:
- Query routing to backend
- Resource calls
- Health checks
- Authentication
Backend to external services
Backend plugins can make external API calls:Plugin discovery and loading
Plugins are discovered and loaded through a pipeline inpkg/plugins/manager/pipeline/:
Discovery
-
Scan plugin directories:
- Core plugins:
public/app/plugins/ - External plugins:
<data>/plugins/
- Core plugins:
-
Read
plugin.jsonfrom each directory - Validate plugin structure
Validation
Frompkg/plugins/manager/pipeline/validation/:
Initialization
Frompkg/plugins/manager/pipeline/initialization/:
- Load plugin metadata
- Start backend process (if
backend: true) - Establish gRPC connection
- Register with plugin registry
Registration
Plugin signing
External plugins must be signed:- Private signature - For internal use
- Community signature - For community plugins
- Commercial signature - For commercial plugins
Plugin development workflow
Create plugin
Build plugin
Development mode
Test plugin
Plugin examples in Grafana
Built-in panel plugins
Located inpublic/app/plugins/panel/:
timeseries/- Time series graphtable/- Table visualizationstat/- Single stat displaygauge/- Gauge visualization
Built-in data source plugins
Located inpkg/tsdb/ (backend) and public/app/plugins/datasource/ (frontend):
pkg/tsdb/prometheus/:
Plugin extensions
Plugins can extend Grafana UI:Key patterns summary
- Frontend plugins - React components with Grafana SDK
- Backend plugins - Go processes with gRPC communication
- Plugin.json - Metadata and configuration
- Discovery pipeline - Automatic plugin loading
- Signature validation - Security through signing
- Extensions - UI extensibility points
- Resource handlers - Custom API endpoints