Official agent skill

React 19 Plugin Migration

by grafana in grafana/skills

Migrate a Grafana plugin to React 19 compatibility. An agent skill from grafana/skills.

OfficialApache-2.0Auto-check passedDevOps & Cloud

Install React 19 Plugin Migration

skills CLI
$ npx skills add grafana/skills --skill react-19-plugin-migration -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install grafana/skills react-19-plugin-migration --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/grafana/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/grafana-plugins/react-19-plugin-migration .claude/skills/react-19-plugin-migration && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
react-19-plugin-migration
GitHub stars
279
Token cost
~3k tokens
SKILL.md length
909 words
Files
2 (incl. references)
Skills in repo
51
Repo updated
First seen
Licence
Apache-2.0

At a glance

Migrate a Grafana plugin to React 19 compatibility. An agent skill from grafana/skills.

  • Works in 11 steps: Detect plugin context → Scan for compatibility issues → Update @grafana/create-plugin → …
  • The user asks to update a plugin for React 19
  • SKILL.md covers Step 1: Detect plugin context, Step 2: Scan for compatibility…, Step 3: Update… and Step 3b: Complete ESLint 9…, plus 9 more sections
  • Calls yarn, git and npx

What it does

React 19 Plugin Migration is an agent skill from grafana/skills, published by the product's own GitHub organization. Migrate a Grafana plugin to React 19 compatibility. Use when the user asks to update a plugin for React 19, prepare for React 19, fix React 19 compatibility, upgrade to React 19, migrate to React 19, bump grafanaDependency to 12.3.0, externalize jsx-runtime, or run react-detect. Triggers on phrases like "update plugin for React 19", "React 19 migration", "prepare for React 19", "plugin React 19 compat", "grafanaDependency 12.3.0", "JSX runtime externals", "react-detect", "SECRETINTERNALS", "ReactCurrentOwner", or…

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/known-issues.md`).

It sits in DevOps & Cloud, covering Monitoring and alerting, React components and Linting and formatting. It works with React, Grafana and ESLint. The licence is Apache-2.0.

When your agent uses it

  • The user asks to update a plugin for React 19
  • Prepare for React 19
  • Fix React 19 compatibility
  • Upgrade to React 19

Example prompts

  • “update plugin for React 19”
  • “React 19 migration”
  • “prepare for React 19”
  • “/react-19-plugin-migration”

Requirements

  • Node.js
  • Docker

Workflow steps

11 steps, taken from the step headings in SKILL.md.

  1. Detect plugin context
  2. Scan for compatibility issues
  3. Update @grafana/create-plugin
  4. Externalize jsx-runtime
  5. Bump grafanaDependency
  6. Bump dependencies
  7. Fix unmet @openfeature/web-sdk peer dependency
  8. Fix source code issues
  9. Build, typecheck, test
  10. Update CI (if applicable)
  11. Squash and push

What it can do on your machine

Read from SKILL.md and the folder at commit 1ccacf2. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • yarn
    • git
    • npx
    • jq
    • npm
    • eslint
    • docker

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • grafana.com
    • github.com
    • react.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

React 19 Plugin Migration loads about 3k tokens when it runs, and up to ~4.2k if it reads all its reference files. Until then it costs about 143 tokens; SKILL.md has 909 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~143
When it runs · the whole SKILL.md, loaded when a task matches
~3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from grafana/skills at commit 1ccacf2, republished under its Apache-2.0 licence (© grafana). 909 words, ~3,040 tokens.

Download SKILL.mdSave it as .claude/skills/react-19-plugin-migration/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
react-19-plugin-migration
description
Migrate a Grafana plugin to React 19 compatibility. Use when the user asks to update a plugin for React 19, prepare for React 19, fix React 19 compatibility, upgrade to React 19, migrate to React 19, bump grafanaDependency to 12.3.0, externalize jsx-runtime, or run react-detect. Triggers on phrases like "update plugin for React 19", "React 19 migration", "prepare for React 19", "plugin React 19 compat", "grafanaDependency 12.3.0", "JSX runtime externals", "react-detect", "SECRET_INTERNALS", "ReactCurrentOwner", or "ReactCurrentDispatcher".
license
Apache-2.0

Migrate Grafana Plugin to React 19

Grafana 13 (April 2026) moves from React 18 to React 19. Incompatible plugins will break. Do not upgrade React to 19 — only make forward-compatible changes.

All changes go in one PR. Execute steps in order. Never manually edit yarn.lock.


Step 1: Detect plugin context

bash
PLUGIN_JSON=$([ -f src/plugin.json ] && echo "src/plugin.json" \
  || ([ -f plugin/src/plugin.json ] && echo "plugin/src/plugin.json" || echo ""))
PKG_JSON=$([ -f package.json ] && echo "package.json" \
  || ([ -f plugin/package.json ] && echo "plugin/package.json" || echo ""))
PLUGIN_ID=$(jq -r '.id' $PLUGIN_JSON 2>/dev/null)
[ -f yarn.lock ] && PM="yarn" || ([ -f pnpm-lock.yaml ] && PM="pnpm" || PM="npm")
CP_VERSION=$(jq -r '.version' .config/.cprc.json 2>/dev/null)
echo "PLUGIN_ID=$PLUGIN_ID  PM=$PM  CP=$CP_VERSION"

If PLUGIN_ID is empty, ask the user for the plugin root path.


Step 2: Scan for compatibility issues

Build the plugin and run the React 19 compatibility scanner:

bash
npm run build 2>&1 | tail -5
npx -y @grafana/react-detect@latest 2>&1

Save the output. It flags:

  • jsxRuntimeImport / __SECRET_INTERNALS → Step 4 fixes this
  • defaultProps / propTypes / ReactDOM.render → Step 8 (source fixes)
  • findDOMNode → Step 6 (dependency bump) or Step 8 (source fix)

If the build fails (plugin hasn't been built before), skip this step and run react-detect after Step 9 instead. If output says "No breaking changes detected", still proceed — jsx-runtime externalization and grafanaDependency bump are always required.

Re-run react-detect after Step 9 to confirm all issues are resolved.


Step 3: Update @grafana/create-plugin

The scaffolding update brings in externals extraction, jest mocks, Docker fixes, and webpack improvements needed for React 19. Always do this before add externalize-jsx-runtime.

Requires a clean git working tree. Create a feature branch first if not already on one.

Run the update
bash
npx @grafana/create-plugin@latest update 2>&1
If yarn install fails with "engine is incompatible"

The update runs an intermediate yarn install without --ignore-engines. Complete it manually:

bash
yarn install --ignore-scripts --ignore-engines 2>&1 | tail -10

Commit the intermediate state and re-run:

bash
git add -A && git commit -m "chore: intermediate create-plugin update" --no-verify
npx @grafana/create-plugin@latest update 2>&1
If ESLint 9 migration (004) fails with a parser error

The auto-migration can generate invalid JS on plugins with complex ESLint configs. Do not skip — commit what succeeded, then complete the ESLint 9 migration manually:

bash
git add -A && git commit -m "chore: update create-plugin (ESLint 9 migration manual)" --no-verify

Then follow the "Complete ESLint 9 migration" section below to finish.

After the update

Always run install and verify:

bash
yarn install --ignore-scripts --ignore-engines 2>&1 | tail -10
cat .config/.cprc.json

Commit if there are changes:

bash
git add -A && git diff --cached --quiet || git commit -m "chore: update create-plugin scaffolding" --no-verify

Step 3b: Complete ESLint 9 migration

The create-plugin update bumps ESLint to v9, which requires flat config (eslint.config.js) instead of .eslintrc. Whether the auto-migration (004) succeeded, partially succeeded, or failed, you must ensure ESLint works before proceeding.

Check the current state
bash
ls eslint.config.js .eslintrc* .config/.eslintrc* 2>/dev/null
npx eslint --version 2>&1

Three scenarios:

A) eslint.config.js exists and yarn lint passes — auto-migration succeeded. Proceed.

B) eslint.config.js exists but yarn lint fails — partial migration. Fix the issues:

bash
yarn lint 2>&1 | head -30

Common fixes:

  • Invalid option '--ignore-path' or Invalid option '--ext' → remove those flags from the lint script in package.json. In ESLint v9 flat config, ignores and file matching are configured inside eslint.config.js, not via CLI flags. Update to: eslint --cache .
  • Cannot find module 'eslint-plugin-deprecation' → remove the import/reference from eslint.config.js (replaced by @typescript-eslint/no-deprecated)
  • Other dead plugin imports → remove them from the config if the package was removed

C) No eslint.config.js exists — auto-migration failed. Create one manually:

bash
ls node_modules/@grafana/eslint-config/flat.js 2>/dev/null

If flat.js exists, create eslint.config.js using it as the base:

js
import grafanaConfig from '@grafana/eslint-config/flat';

export default [
  ...grafanaConfig,
  {
    ignores: ['**/dist/', '**/node_modules/', '**/.config/', '**/coverage/'],
  },
];

Then migrate any custom rules from the old .eslintrc into additional config objects in the array. After creating the flat config:

  1. Update the lint script: "lint": "eslint --cache ."
  2. Delete the root .eslintrc (leave .config/.eslintrc — it's scaffolded and harmless)
Verify lint works
bash
yarn lint 2>&1 | tail -20

Fix auto-fixable issues with yarn lint --fix. Commit:

bash
git add -A && git diff --cached --quiet || git commit -m "chore: complete ESLint 9 flat config migration" --no-verify

Step 4: Externalize jsx-runtime

Always use the create-plugin add command. Requires a clean git working tree.

bash
npx @grafana/create-plugin@latest add externalize-jsx-runtime 2>&1

Verify:

bash
grep "jsx-runtime" .config/bundler/externals.ts 2>/dev/null
  • Found → commit and proceed.
  • Not found → command failed. Only then add externals manually to the root webpack.config.ts:
ts
externals: ['react/jsx-runtime', 'react/jsx-dev-runtime'],

Commit:

bash
git add -A && git diff --cached --quiet || git commit -m "feat: externalize jsx-runtime" --no-verify

Step 5: Bump grafanaDependency

bash
jq -r '.dependencies.grafanaDependency' $PLUGIN_JSON

If not already >=12.3.0, update it. The create-plugin add in Step 3 may have already done this.


Step 6: Bump dependencies

Show full SKILL.md (364 more words)Show less
Faro (if present)
bash
grep '"@grafana/faro' $PKG_JSON
PackageTarget
@grafana/faro-react^2.2.3
@grafana/faro-web-sdk^2.2.3
@grafana/faro-web-tracing^2.0.0
Grafana packages
bash
grep '"@grafana/' $PKG_JSON | grep -v faro | grep -v create-plugin

Bump @grafana/data, @grafana/runtime, @grafana/schema, @grafana/ui to ^12.2.0 or later. Add @grafana/i18n@^12.2.0 if the plugin uses translations or @grafana/scenes requires it.

React types

Bump react and react-dom to ^18.3.0 (surfaces React 19 issues early). Add @types/react@^18.3.0 and @types/react-dom@^18.3.0 to devDependencies if missing.

Remove deprecated packages

Remove from devDependencies if present:

  • eslint-plugin-deprecation (replaced by @typescript-eslint/no-deprecated)
  • @types/testing-library__jest-dom (replaced by setupTests.d.ts)
Broken transitive dependencies

If yarn install fails with a stale git reference, do not edit yarn.lock. Add a resolutions entry:

json
"resolutions": {
  "<package-name>": "<working-version-or-git-ref>"
}

Then delete yarn.lock and node_modules and reinstall:

bash
rm -rf node_modules yarn.lock
yarn install --ignore-engines 2>&1 | tail -10

Step 7: Fix unmet @openfeature/web-sdk peer dependency

@grafana/runtime depends on @openfeature/react-sdk which has @openfeature/web-sdk as a peer dependency. Yarn v1 (classic) does not auto-install peer deps.

Check if the plugin uses yarn classic:

bash
yarn --version 2>&1 | head -1

If version starts with 1., check for warnings:

bash
yarn install --ignore-engines 2>&1 | grep "unmet peer dependency.*openfeature/web-sdk"

If warnings are found:

bash
yarn add -D @openfeature/web-sdk @openfeature/core --ignore-engines

Skip condition: Yarn v2+ or npm v7+ (peer deps are auto-installed).


Step 8: Fix source code issues

bash
grep -rn "ReactDOM\.render\|ReactDOM\.unmountComponentAtNode\|ReactDOM\.findDOMNode" src/ --include="*.tsx" --include="*.ts"
grep -rn "\.defaultProps\s*=" src/ --include="*.tsx" --include="*.ts"
grep -rn "\.propTypes\s*=" src/ --include="*.tsx" --include="*.ts"
grep -rn "contextTypes\|getChildContext" src/ --include="*.tsx" --include="*.ts"
grep -rn "createFactory" src/ --include="*.tsx" --include="*.ts"
grep -rn "ChangeEvent<HTMLInputElement>" src/ --include="*.tsx" --include="*.ts"
PatternFix
ReactDOM.render()createRoot(container).render(element)
defaultProps on function componentsMove to destructured parameter defaults
defaultProps on class componentsLeave — still works
propTypesRemove
contextTypes / getChildContextUse React.createContext() + useContext()
createFactoryUse JSX or createElement()
ChangeEvent<HTMLInputElement> on checkboxChange to FormEvent<HTMLInputElement>

Step 9: Build, typecheck, test

bash
rm -rf node_modules dist
yarn install --ignore-engines 2>&1 | tail -10
yarn build 2>&1 | tail -10
yarn typecheck 2>&1 | tail -10
yarn test --watchAll=false 2>&1 | tail -10
ErrorFix
Cannot find module 'react/jsx-runtime'Step 4 not applied — re-run create-plugin add
Cannot find module '@openfeature/web-sdk'Step 7 — yarn add -D @openfeature/web-sdk @openfeature/core
Can't resolve '@grafana/i18n'yarn add @grafana/i18n@^12.2.0
Cannot read properties of undefined (reading 'ReactCurrentOwner')Bump @grafana-cloud/* packages — see Step 6
aria-label is missing on icon-only ButtonAdd aria-label prop (newer @grafana/ui requires it)
Stale git hash in yarn.lockAdd resolutions in package.json, delete lockfile, reinstall

For detailed known issues (i18n crash, @grafana/schema type breaks, publicPath mismatch), see references/known-issues.md.


Step 10: Update CI (if applicable)

bash
grep -rn "plugin-ci-workflows\|e2e-version" .github/workflows/ 2>/dev/null
  • plugin-ci-workflows@main or >= 6.0.0 → already tests React 19. No changes needed.
  • plugin-actions/e2e-version → add skip-grafana-react-19-preview-image: false.
  • Neither found → test manually with GRAFANA_VERSION=dev-preview-react19 docker compose up --build.

Step 11: Squash and push

bash
git reset --soft origin/main
git add -A
git commit -m "fix: Prepare plugin for React 19 compatibility"

Commit message body should list: create-plugin version change, ESLint 9 migration, key dependency bumps, and any source code fixes.


References

© grafana, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/grafana-plugins/react-19-plugin-migration of grafana/skills.

  • SKILL.md
  • references/known-issues.md

Open the folder on GitHubat commit 1ccacf2

Compare with similar skills

React 19 Plugin Migration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

React 19 Plugin Migration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
React 19 Plugin Migration this skillgrafana/skills279—~3kAutomated safety check: PassApache-2.0
React Render Types CompositionHorusGoul/eslint-plugin-react-render-types111—~1.1kAutomated safety check: PassMIT
Modern Web GuidanceJetBrains/skills3643 repos~1.4kAutomated safety check: PassApache-2.0
Typescript Rulessoftspark/ai-toolkit179—~2.7kAutomated safety check: NotesApache-2.0
DaleuiDaleStudy/daleui119—~675Automated safety check: PassMIT
Odc FrontendDouglasNeuroInformatics/OpenDataCapture119—~2.3kAutomated safety check: PassApache-2.0

Similar skills

  • React Render Types Composition

    HorusGoul/eslint-plugin-react-render-types

    Composition patterns for building React components with @renders type annotations from eslint-plugin-react-render-types.

    111 GitHub stars~1.1k tokensUpdated 2 mo ago
    Frontend & DesignAuto-check passed
  • Modern Web Guidance

    JetBrains/skills

    Official

    Search tool for modern web development best practices. An agent skill from JetBrains/skills.

    364 GitHub starsUsed in 3 repos~1.4k tokens
    DevOps & CloudAuto-check passed
  • Typescript Rules

    softspark/ai-toolkit

    TypeScript/JavaScript coding rules: style, patterns, security, testing.

    179 GitHub stars~2.7k tokensUpdated yesterday
    Testing & QAAuto-check: notes
  • Daleui

    DaleStudy/daleui

    Use the daleui React design system with semantic Panda CSS tokens and accessible components.

    119 GitHub stars~675 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Odc Frontend

    DouglasNeuroInformatics/OpenDataCapture

    Write or change React UI in apps/web, apps/gateway or packages/react-core — a component (not the route file that renders it), its user-facing strings, its Storybook story, or moving it into…

    119 GitHub stars~2.3k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Ultracite

    agustinusnathaniel/nextarter-tailwind

    Ultracite is a zero-config linting and formatting preset for JavaScript/TypeScript projects.

    125 GitHub starsUsed in 2 repos~1.2k tokens
    DevelopmentAuto-check passed

More from grafana/skills

All 51 skills in this repo
  • K6 Docs

    grafana/skills

    Official

    Write or review k6 documentation across the three k6 repositories - k6-DefinitelyTyped (TypeScript types), k6-docs (user documentation), and k6 (release notes / changelog).

    279 GitHub stars~678 tokensUpdated yesterday
    Auto-check passed
  • Alerting Irm

    grafana/skills

    Official

    Configure Grafana Alerting, Incident Response Management (IRM), and SLOs end-to-end — provisions Grafana-managed and data-source-managed alert rules, contact points (Slack/PagerDuty/email/webhook)…

    279 GitHub starsUsed in 1 repo~1.9k tokens
    Auto-check passed
  • Dashboarding

    grafana/skills

    Official

    Build, modify, and ship Grafana dashboards as JSON via the HTTP API — panel types (timeseries / stat / gauge / table / heatmap / logs / traces / node-graph), gridPos 24-column layout, units…

    279 GitHub starsUsed in 1 repo~1.4k tokens
    Auto-check passed
  • K6 Perf Test Website

    grafana/skills

    Official

    A skill your agent uses when the user wants to performance-test, load-test, or stress-test a public website end-to-end with k6.

    279 GitHub stars~3.3k tokensUpdated yesterday
    Auto-check passed
  • Promql

    grafana/skills

    Official

    Write, validate, and optimize PromQL for Prometheus / Grafana Mimir / Grafana Cloud Metrics.

    279 GitHub starsUsed in 1 repo~1.1k tokens
    Auto-check passed
  • Adaptive Metrics

    grafana/skills

    Official

    Cut Grafana Cloud Metrics cost by shrinking active-series count with Adaptive Metrics aggregation rules — auto-recommendations from query history, custom exact/regex rules, label-drop config…

    279 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about React 19 Plugin Migration

What does React 19 Plugin Migration do?

Migrate a Grafana plugin to React 19 compatibility. An agent skill from grafana/skills. React 19 Plugin Migration is an agent skill from grafana/skills, published by the product's own GitHub organization. Migrate a Grafana plugin to React 19 compatibility.

When should I use React 19 Plugin Migration?

React 19 Plugin Migration fits situations like: the user asks to update a plugin for React 19; prepare for React 19; fix React 19 compatibility; upgrade to React 19.

How do I install React 19 Plugin Migration in Claude Code?

Run `npx skills add grafana/skills --skill react-19-plugin-migration -a claude-code`. Or copy the skill folder (skills/grafana-plugins/react-19-plugin-migration in grafana/skills) into .claude/skills/react-19-plugin-migration in your project. Claude Code loads it when a task matches its description.

How do I install React 19 Plugin Migration in Codex?

Run `npx skills add grafana/skills --skill react-19-plugin-migration -a codex`. Or copy the skill folder (skills/grafana-plugins/react-19-plugin-migration in grafana/skills) into .agents/skills/react-19-plugin-migration in your project. Codex loads it when a task matches its description.

Can I use React 19 Plugin Migration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add grafana/skills --skill react-19-plugin-migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/react-19-plugin-migration, .gemini/skills/react-19-plugin-migration, .github/skills/react-19-plugin-migration and .opencode/skills/react-19-plugin-migration in your project.

What does React 19 Plugin Migration need to run?

Going by SKILL.md and its folder, React 19 Plugin Migration needs the command-line tools its instructions call (yarn, git, npx, jq, npm and eslint). Our summary lists: Node.js; Docker.

Does React 19 Plugin Migration access the network?

SKILL.md names 3 domains. As links in the text: grafana.com, github.com and react.dev. This is read from the text; nothing was executed.

Is React 19 Plugin Migration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does React 19 Plugin Migration use?

React 19 Plugin Migration is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does React 19 Plugin Migration use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.2k tokens, read only when the agent opens those files.

What are the alternatives to React 19 Plugin Migration?

Skills that share tags, products or a category with React 19 Plugin Migration: React Render Types Composition (HorusGoul/eslint-plugin-react-render-types, 111 stars), Modern Web Guidance (JetBrains/skills, 364 stars), Typescript Rules (softspark/ai-toolkit, 179 stars) and Daleui (DaleStudy/daleui, 119 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains React 19 Plugin Migration?

grafana (a GitHub organization, an official publisher) maintains it in grafana/skills, which has 279 GitHub stars. The repository holds 51 skills in this directory. The repository was last updated on October 6, 2026.

Source: grafana/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.