@grafana/create-plugin 6.7.0-canary.2359.20364172906.0 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ # v6.7.0 (Wed Jan 07 2026)
2
+
3
+ #### 🚀 Enhancement
4
+
5
+ - chore: only support react router v6 for new plugin scaffolds [#2360](https://github.com/grafana/plugin-tools/pull/2360) ([@jackw](https://github.com/jackw))
6
+
7
+ #### 🐛 Bug Fix
8
+
9
+ - Update grafana patch dependencies to v12.3.1 [#2362](https://github.com/grafana/plugin-tools/pull/2362) ([@renovate-sh-app[bot]](https://github.com/renovate-sh-app[bot]))
10
+
11
+ #### Authors: 2
12
+
13
+ - [@renovate-sh-app[bot]](https://github.com/renovate-sh-app[bot])
14
+ - Jack Westbrook ([@jackw](https://github.com/jackw))
15
+
16
+ ---
17
+
1
18
  # v6.6.0 (Thu Dec 18 2025)
2
19
 
3
20
  #### 🚀 Enhancement
package/dist/constants.js CHANGED
@@ -30,7 +30,6 @@ const EXTRA_TEMPLATE_VARIABLES = {
30
30
  grafanaImage: "grafana-enterprise"
31
31
  };
32
32
  const DEFAULT_FEATURE_FLAGS = {
33
- useReactRouterV6: true,
34
33
  bundleGrafanaUI: false,
35
34
  useExperimentalRspack: false,
36
35
  useExperimentalUpdates: true
@@ -57,7 +57,6 @@ function getTemplateData(cliArgs) {
57
57
  const { features } = getConfig();
58
58
  const currentVersion = CURRENT_APP_VERSION;
59
59
  const bundleGrafanaUI = features.bundleGrafanaUI ?? DEFAULT_FEATURE_FLAGS.bundleGrafanaUI;
60
- const getReactRouterVersion = () => features.useReactRouterV6 ? "6.22.0" : "5.2.0";
61
60
  const isAppType = (pluginType) => pluginType === PLUGIN_TYPES.app || pluginType === PLUGIN_TYPES.scenes;
62
61
  const isNPM = (packageManagerName) => packageManagerName === "npm";
63
62
  const frontendBundler = features.useExperimentalRspack ? "rspack" : "webpack";
@@ -79,9 +78,7 @@ function getTemplateData(cliArgs) {
79
78
  isNPM: isNPM(packageManagerName),
80
79
  version: currentVersion,
81
80
  bundleGrafanaUI,
82
- useReactRouterV6: features.useReactRouterV6 ?? DEFAULT_FEATURE_FLAGS.useReactRouterV6,
83
- reactRouterVersion: getReactRouterVersion(),
84
- scenesVersion: features.useReactRouterV6 ? "^6.10.4" : "^5.41.3",
81
+ scenesVersion: "^6.10.4",
85
82
  useExperimentalRspack: Boolean(features.useExperimentalRspack),
86
83
  frontendBundler
87
84
  };
@@ -102,9 +99,7 @@ function getTemplateData(cliArgs) {
102
99
  isNPM: isNPM(packageManagerName),
103
100
  version: currentVersion,
104
101
  bundleGrafanaUI,
105
- useReactRouterV6: features.useReactRouterV6 ?? DEFAULT_FEATURE_FLAGS.useReactRouterV6,
106
- reactRouterVersion: getReactRouterVersion(),
107
- scenesVersion: features.useReactRouterV6 ? "^6.10.4" : "^5.41.3",
102
+ scenesVersion: "^6.10.4",
108
103
  pluginExecutable: pluginJson.executable,
109
104
  useExperimentalRspack: Boolean(features.useExperimentalRspack),
110
105
  frontendBundler
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/create-plugin",
3
- "version": "6.7.0-canary.2359.20364172906.0",
3
+ "version": "6.7.0",
4
4
  "repository": {
5
5
  "directory": "packages/create-plugin",
6
6
  "url": "https://github.com/grafana/plugin-tools"
@@ -55,5 +55,5 @@
55
55
  "engines": {
56
56
  "node": ">=20"
57
57
  },
58
- "gitHead": "b93e5ad3bbf1730982be16ca8fb2e382970045e3"
58
+ "gitHead": "64e06e63f0c050e9f06a2b63a2f531497b06959f"
59
59
  }
package/src/constants.ts CHANGED
@@ -49,7 +49,6 @@ export const EXTRA_TEMPLATE_VARIABLES = {
49
49
  };
50
50
 
51
51
  export const DEFAULT_FEATURE_FLAGS = {
52
- useReactRouterV6: true,
53
52
  bundleGrafanaUI: false,
54
53
  useExperimentalRspack: false,
55
54
  useExperimentalUpdates: true,
package/src/types.ts CHANGED
@@ -22,9 +22,7 @@ export type TemplateData = {
22
22
  isNPM: boolean;
23
23
  version: string;
24
24
  bundleGrafanaUI: boolean;
25
- useReactRouterV6: boolean;
26
25
  scenesVersion: string;
27
- reactRouterVersion: string;
28
26
  useExperimentalRspack: boolean;
29
27
  pluginExecutable?: string;
30
28
  frontendBundler: 'webpack' | 'rspack';
@@ -94,7 +94,6 @@ describe('getConfig', () => {
94
94
  const userConfigPath = path.join(tmpDir, '.cprc.json');
95
95
  const userConfig: UserConfig = {
96
96
  features: {
97
- useReactRouterV6: true,
98
97
  bundleGrafanaUI: true,
99
98
  },
100
99
  };
@@ -118,7 +117,6 @@ describe('getConfig', () => {
118
117
  };
119
118
  const userConfig: UserConfig = {
120
119
  features: {
121
- useReactRouterV6: false,
122
120
  bundleGrafanaUI: false,
123
121
  },
124
122
  };
@@ -11,10 +11,6 @@ import { EOL } from 'node:os';
11
11
 
12
12
  export type FeatureFlags = {
13
13
  bundleGrafanaUI?: boolean;
14
-
15
- // If set to true, the plugin will be scaffolded with React Router v6. Defaults to true.
16
- // (Attention! We always scaffold new projects with React Router v6, so if you are changing this to `false` manually you will need to make changes to the React code as well.)
17
- useReactRouterV6?: boolean;
18
14
  useExperimentalRspack?: boolean;
19
15
  useExperimentalUpdates?: boolean;
20
16
  };
@@ -96,7 +96,6 @@ export function getTemplateData(cliArgs?: GenerateCliArgs): TemplateData {
96
96
  const { features } = getConfig();
97
97
  const currentVersion = CURRENT_APP_VERSION;
98
98
  const bundleGrafanaUI = features.bundleGrafanaUI ?? DEFAULT_FEATURE_FLAGS.bundleGrafanaUI;
99
- const getReactRouterVersion = () => (features.useReactRouterV6 ? '6.22.0' : '5.2.0');
100
99
  const isAppType = (pluginType: string) => pluginType === PLUGIN_TYPES.app || pluginType === PLUGIN_TYPES.scenes;
101
100
  const isNPM = (packageManagerName: string) => packageManagerName === 'npm';
102
101
  const frontendBundler = features.useExperimentalRspack ? 'rspack' : 'webpack';
@@ -122,9 +121,7 @@ export function getTemplateData(cliArgs?: GenerateCliArgs): TemplateData {
122
121
  isNPM: isNPM(packageManagerName),
123
122
  version: currentVersion,
124
123
  bundleGrafanaUI,
125
- useReactRouterV6: features.useReactRouterV6 ?? DEFAULT_FEATURE_FLAGS.useReactRouterV6,
126
- reactRouterVersion: getReactRouterVersion(),
127
- scenesVersion: features.useReactRouterV6 ? '^6.10.4' : '^5.41.3',
124
+ scenesVersion: '^6.10.4',
128
125
  useExperimentalRspack: Boolean(features.useExperimentalRspack),
129
126
  frontendBundler,
130
127
  };
@@ -148,9 +145,7 @@ export function getTemplateData(cliArgs?: GenerateCliArgs): TemplateData {
148
145
  isNPM: isNPM(packageManagerName),
149
146
  version: currentVersion,
150
147
  bundleGrafanaUI,
151
- useReactRouterV6: features.useReactRouterV6 ?? DEFAULT_FEATURE_FLAGS.useReactRouterV6,
152
- reactRouterVersion: getReactRouterVersion(),
153
- scenesVersion: features.useReactRouterV6 ? '^6.10.4' : '^5.41.3',
148
+ scenesVersion: '^6.10.4',
154
149
  pluginExecutable: pluginJson.executable,
155
150
  useExperimentalRspack: Boolean(features.useExperimentalRspack),
156
151
  frontendBundler,
@@ -22,15 +22,14 @@ export const externals: ExternalsType = [
22
22
  'redux',
23
23
  'rxjs',
24
24
  'i18next',
25
- 'react-router',{{#unless useReactRouterV6}}
26
- 'react-router-dom',{{/unless}}
25
+ 'react-router',
27
26
  'd3',
28
27
  'angular',{{#unless bundleGrafanaUI}}
29
28
  /^@grafana\/ui/i,{{/unless}}
30
29
  /^@grafana\/runtime/i,
31
30
  /^@grafana\/data/i,{{#if bundleGrafanaUI}}
32
31
  'react-inlinesvg',{{/if}}
33
-
32
+
34
33
  // Mark legacy SDK imports as external if their name starts with the "grafana/" prefix
35
34
  ({ request }: ExternalItemFunctionData, callback: (error?: Error, result?: string) => void) => {
36
35
  const prefix = 'grafana/';
@@ -43,4 +42,4 @@ export const externals: ExternalsType = [
43
42
 
44
43
  callback();
45
44
  },
46
- ];
45
+ ];
@@ -7,7 +7,7 @@ services:
7
7
  context: .
8
8
  args:
9
9
  grafana_image: ${GRAFANA_IMAGE:-{{~grafanaImage~}} }
10
- grafana_version: ${GRAFANA_VERSION:-12.3.0}
10
+ grafana_version: ${GRAFANA_VERSION:-12.3.1}
11
11
  development: ${DEVELOPMENT:-false}
12
12
  anonymous_auth_enabled: ${ANONYMOUS_AUTH_ENABLED:-true}
13
13
  ports:
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "features": {
3
3
  "bundleGrafanaUI": {{ bundleGrafanaUI }},
4
- "useReactRouterV6": {{ useReactRouterV6 }},
5
4
  "useExperimentalRspack": {{ useExperimentalRspack }}
6
5
  }
7
6
  }
@@ -18,51 +18,50 @@
18
18
  "devDependencies": {
19
19
  "@grafana/eslint-config": "^9.0.0",
20
20
  "@grafana/plugin-e2e": "^3.1.0",
21
- "@grafana/tsconfig": "^2.0.0",
22
- "@playwright/test": "^1.57.0",{{#if useExperimentalRspack}}
23
- "@rspack/core": "^1.6.0",
24
- "@rspack/cli": "^1.6.0",{{/if}}
25
- "@stylistic/eslint-plugin-ts": "^4.4.0",
26
- "@swc/core": "^1.15.0",
21
+ "@grafana/tsconfig": "^2.0.1",
22
+ "@playwright/test": "^1.52.0",{{#if useExperimentalRspack}}
23
+ "@rspack/core": "^1.3.0",
24
+ "@rspack/cli": "^1.3.0",{{/if}}
25
+ "@stylistic/eslint-plugin-ts": "^2.9.0",
26
+ "@swc/core": "^1.14.0",
27
27
  "@swc/helpers": "^0.5.0",
28
- "@swc/jest": "^0.2.0",
29
- "@testing-library/jest-dom": "^6.6.0",
30
- "@testing-library/react": "^16.3.0",
28
+ "@swc/jest": "^0.2.26",
29
+ "@testing-library/jest-dom": "6.1.4",
30
+ "@testing-library/react": "14.0.0",
31
31
  "@types/jest": "^29.5.0",
32
- "@types/node": "^24.0.0",
32
+ "@types/node": "^20.8.7",
33
33
  "@types/react": "^18.3.0",
34
- "@types/react-dom": "^18.3.0",{{#if isAppType}}{{#unless useReactRouterV6}}
35
- "@types/react-router-dom": "^{{ reactRouterVersion }}",{{/unless}}{{/if}}
36
- "@typescript-eslint/eslint-plugin": "^8.38.0",
37
- "@typescript-eslint/parser": "^8.38.0",{{#unless useExperimentalRspack}}
38
- "copy-webpack-plugin": "^13.0.0",{{/unless}}
39
- "css-loader": "^7.1.0",
40
- "eslint": "^9.32.0",
41
- "eslint-config-prettier": "^10.1.0",
42
- "eslint-plugin-jsdoc": "^52.0.0",
43
- "eslint-plugin-react": "^7.37.0",
34
+ "@types/react-dom": "^18.3.0",
35
+ "@typescript-eslint/eslint-plugin": "^8.3.0",
36
+ "@typescript-eslint/parser": "^8.3.0",{{#unless useExperimentalRspack}}
37
+ "copy-webpack-plugin": "^11.0.0",{{/unless}}
38
+ "css-loader": "^6.7.3",
39
+ "eslint": "^9.0.0",
40
+ "eslint-config-prettier": "^8.8.0",
41
+ "eslint-plugin-jsdoc": "^51.2.3",
42
+ "eslint-plugin-react": "^7.37.5",
44
43
  "eslint-plugin-react-hooks": "^7.0.0",
45
44
  "eslint-webpack-plugin": "^5.0.0",{{#unless useExperimentalRspack}}
46
- "fork-ts-checker-webpack-plugin": "^9.1.0",{{/unless}}
47
- "glob": "^11.1.0",
48
- "identity-obj-proxy": "^3.0.0",
45
+ "fork-ts-checker-webpack-plugin": "^8.0.0",{{/unless}}
46
+ "glob": "^10.2.7",
47
+ "identity-obj-proxy": "3.0.0",
49
48
  "imports-loader": "^5.0.0",
50
- "jest": "^29.7.0",
51
- "jest-environment-jsdom": "^29.7.0",
52
- "prettier": "^3.6.0",
53
- "replace-in-file-webpack-plugin": "^1.0.0",{{#if useExperimentalRspack}}
54
- "rspack-plugin-virtual-module": "^1.0.0",{{/if}}
55
- "sass": "^1.89.0",
56
- "sass-loader": "^16.0.0",
57
- "semver": "^7.7.0",
58
- "style-loader": "^4.0.0",{{#unless useExperimentalRspack}}
59
- "swc-loader": "^0.2.0",{{/unless}}
60
- "terser-webpack-plugin": "^5.3.0",
61
- "ts-node": "^10.9.0",{{#if useExperimentalRspack}}
62
- "ts-checker-rspack-plugin": "^1.2.0",{{/if}}
63
- "typescript": "5.9.2",
64
- "webpack": "^5.101.0"{{#unless useExperimentalRspack}},
65
- "webpack-cli": "^6.0.0",
49
+ "jest": "^29.5.0",
50
+ "jest-environment-jsdom": "^29.5.0",
51
+ "prettier": "^2.8.7",
52
+ "replace-in-file-webpack-plugin": "^1.0.6",{{#if useExperimentalRspack}}
53
+ "rspack-plugin-virtual-module": "^0.1.13",{{/if}}
54
+ "sass": "1.63.2",
55
+ "sass-loader": "13.3.1",
56
+ "semver": "^7.6.3",
57
+ "style-loader": "3.3.3",{{#unless useExperimentalRspack}}
58
+ "swc-loader": "^0.2.3",{{/unless}}
59
+ "terser-webpack-plugin": "^5.3.10",
60
+ "ts-node": "^10.9.2",{{#if useExperimentalRspack}}
61
+ "ts-checker-rspack-plugin": "^1.0.0",{{/if}}
62
+ "typescript": "5.5.4",
63
+ "webpack": "^5.94.0"{{#unless useExperimentalRspack}},
64
+ "webpack-cli": "^5.1.4",
66
65
  "webpack-livereload-plugin": "^3.0.2",
67
66
  "webpack-subresource-integrity": "^5.1.0",
68
67
  "webpack-virtual-modules": "^0.6.2"{{/unless}}
@@ -72,15 +71,15 @@
72
71
  },
73
72
  "dependencies": {
74
73
  "@emotion/css": "11.10.6",
75
- "@grafana/data": "^12.3.0",
76
- "@grafana/i18n": "^12.3.0",
77
- "@grafana/runtime": "^12.3.0",
78
- "@grafana/ui": "^12.3.0",
79
- "@grafana/schema": "^12.3.0",{{#if_eq pluginType "scenesapp" }}
74
+ "@grafana/data": "^12.3.1",
75
+ "@grafana/i18n": "^12.3.1",
76
+ "@grafana/runtime": "^12.3.1",
77
+ "@grafana/ui": "^12.3.1",
78
+ "@grafana/schema": "^12.3.1",{{#if_eq pluginType "scenesapp" }}
80
79
  "@grafana/scenes": "{{ scenesVersion }}",{{/if_eq}}
81
80
  "react": "^18.3.0",
82
81
  "react-dom": "^18.3.0"{{#if isAppType}},
83
- "react-router-dom": "^{{ reactRouterVersion }}",
82
+ "react-router-dom": "^6.22.0",
84
83
  "rxjs": "7.8.2"{{/if}}
85
84
  },
86
85
  "packageManager": "{{ packageManagerName }}@{{ packageManagerVersion }}"