/import-dashboards
Converts existing Grafana dashboards to Go builder code via gcx (dashboards as code). Use to import, migrate, or reverse-engineer a live dashboard into code. For YAML/JSON resource files, use manage-dashboards.
Claude Code
$ npx -y skills add grafana/gcx --skill import-dashboards --agent claude-code
Codex
$ npx skills add grafana/gcx --skill import-dashboards -a codex -y
Cursor
$ npx skills add grafana/gcx --skill import-dashboards -a cursor -y
Gemini CLI
$ npx skills add grafana/gcx --skill import-dashboards -a gemini-cli -y
GitHub Copilot
$ npx skills add grafana/gcx --skill import-dashboards -a github-copilot -y
OpenCode
$ npx skills add grafana/gcx --skill import-dashboards -a opencode -y
Windsurf
$ npx skills add grafana/gcx --skill import-dashboards -a windsurf -y
SKILL.md
import-dashboards.SKILL.mdname: import-dashboards
description: >-
Converts existing Grafana dashboards to Go builder code via gcx (dashboards as
code). Use to import, migrate, or reverse-engineer a live dashboard into code.
For YAML/JSON resource files, use manage-dashboards.
Import Dashboards as Code
Import existing dashboards from a Grafana instance and convert them to Go builder code using `gcx dev import`.
Prerequisites
1. gcx installed and configured with a Grafana connection (`gcx config check` should show a valid context) 2. The target Grafana instance must be reachable
Import Commands
Import All Dashboards
gcx dev import dashboards
Writes Go files to `imported/` (default). Each dashboard becomes a function returning `*resource.ManifestBuilder`.
Import a Specific Dashboard
gcx dev import dashboards/my-dashboard-uid
Import to a Custom Directory
gcx dev import dashboards --path src/grafana
Import Multiple Resource Types
gcx dev import dashboards folders
How It Works
Grafana Instance
│
▼
gcx dev import dashboards/foo
│
├── 1. Fetches resource via K8s API (/apis endpoint)
├── 2. Detects the resource API version
├── 3. Runs version-specific converter (JSON → SDK builder code)
├── 4. Wraps in resource.NewManifestBuilder()
└── 5. Writes to imported/<snake_case_name>.goThe converter produces Go code using the grafana-foundation-sdk builder pattern — the same pattern used by `dev generate` and `dev scaffold`.
Output Format
Each imported file looks like:
package dashboards
import (
"github.com/grafana/grafana-foundation-sdk/go/dashboardv2beta1"
"github.com/grafana/grafana-foundation-sdk/go/resource"
)
func MyDashboard() *resource.ManifestBuilder {
// ... builder code generated from the live dashboard
}Workflow: Import → Edit → Push
# 1. Import from Grafana
gcx dev import dashboards --path internal/dashboards
# 2. Review and edit the generated code
# (fix up builder calls, add variables, etc.)
# 3. Render manifests from the builders. In a gcx-scaffolded project,
# `go run .` writes JSON manifests to ./resources
go run .
# 4. Push back to Grafana
gcx resources push
Common Issues
| Issue | Fix | |-------|-----| | "no converter found" | The resource's API version has no converter; the error message names the unsupported version | | Auth error (401/403) | Run `gcx config check` to verify credentials | | Empty import | The selector matched no resources; check UID with `gcx resources get dashboards` | | Build fails with `undefined: cog` (or another lowercase SDK identifier) | Older gcx versions omit SDK imports from generated files. Add the missing import `github.com/grafana/grafana-foundation-sdk/go/<pkg>` for each undefined identifier — `variants` is nested at `go/cog/variants`. Newer gcx emits complete imports | | Imported code doesn't compile for other reasons | Complex dashboards can produce converter output that needs manual fixup: build, read the first error, fix, repeat |
Read more
name: import-dashboards description: >- Converts existing Grafana dashboards to Go builder code via gcx (dashboards as code). Use to import, migrate, or reverse-engineer a live dashboard into code. For YAML/JSON resource files, use manage-dashboards.
Import Dashboards as Code
Import existing dashboards from a Grafana instance and convert them to Go builder code using `gcx dev import`.
Prerequisites
1. gcx installed and configured with a Grafana connection (`gcx config check` should show a valid context) 2. The target Grafana instance must be reachable
Import Commands
Import All Dashboards
gcx dev import dashboards
Writes Go files to `imported/` (default). Each dashboard becomes a function returning `*resource.ManifestBuilder`.
Import a Specific Dashboard
gcx dev import dashboards/my-dashboard-uid
Import to a Custom Directory
gcx dev import dashboards --path src/grafana
Import Multiple Resource Types
gcx dev import dashboards folders
How It Works
Grafana Instance
│
▼
gcx dev import dashboards/foo
│
├── 1. Fetches resource via K8s API (/apis endpoint)
├── 2. Detects the resource API version
├── 3. Runs version-specific converter (JSON → SDK builder code)
├── 4. Wraps in resource.NewManifestBuilder()
└── 5. Writes to imported/<snake_case_name>.goThe converter produces Go code using the grafana-foundation-sdk builder pattern — the same pattern used by `dev generate` and `dev scaffold`.
Output Format
Each imported file looks like:
package dashboards
import (
"github.com/grafana/grafana-foundation-sdk/go/dashboardv2beta1"
"github.com/grafana/grafana-foundation-sdk/go/resource"
)
func MyDashboard() *resource.ManifestBuilder {
// ... builder code generated from the live dashboard
}Workflow: Import → Edit → Push
# 1. Import from Grafana gcx dev import dashboards --path internal/dashboards # 2. Review and edit the generated code # (fix up builder calls, add variables, etc.) # 3. Render manifests from the builders. In a gcx-scaffolded project, # `go run .` writes JSON manifests to ./resources go run . # 4. Push back to Grafana gcx resources push
Common Issues
| Issue | Fix | |-------|-----| | "no converter found" | The resource's API version has no converter; the error message names the unsupported version | | Auth error (401/403) | Run `gcx config check` to verify credentials | | Empty import | The selector matched no resources; check UID with `gcx resources get dashboards` | | Build fails with `undefined: cog` (or another lowercase SDK identifier) | Older gcx versions omit SDK imports from generated files. Add the missing import `github.com/grafana/grafana-foundation-sdk/go/<pkg>` for each undefined identifier — `variants` is nested at `go/cog/variants`. Newer gcx emits complete imports | | Imported code doesn't compile for other reasons | Complex dashboards can produce converter output that needs manual fixup: build, read the first error, fix, repeat |
gcx is Grafana in your terminal and your agentic coding environment. With gcx you don't guess, but check the actual data.
Other skills on gcx.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about import-dashboards.
- Which coding agents can use import-dashboards?
- import-dashboards installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

