Summary
#2595 ("feat: add support for Typescript 6", merged 2026-04-30) fixed two of the three TS6 deprecation errors by updating @grafana/tsconfig (dropping downlevelIteration and switching moduleResolution from node → bundler), but the third deprecation — baseUrl — still ships in the scaffolded .config/tsconfig.json template. As a result, any plugin scaffolded by @grafana/create-plugin that bumps to TypeScript 6 still fails tsc --noEmit.
Reproduction
In any plugin scaffolded by @grafana/create-plugin@7.3.0 (or earlier) with typescript@^6.0.0 and the latest @grafana/tsconfig@2.1.0:
$ npm run typecheck
error TS5101: Option 'baseUrl' is deprecated and will stop functioning in TypeScript 7.0.
Specify compilerOption '"ignoreDeprecations": "6.0"' to silence this error.
Visit https://aka.ms/ts6 for migration information.
The other two errors (downlevelIteration, moduleResolution=node10) that #2595 documented are now gone — only baseUrl remains.
Root cause
packages/create-plugin/templates/common/.config/tsconfig.json still contains:
{
"compilerOptions": {
...
"rootDir": "../src",
"baseUrl": "../src",
...
},
...
}
baseUrl cannot be unset from a child tsconfig that extends the scaffold (TypeScript has no "remove an inherited option" mechanism), so plugin authors hitting this on TS6 either have to:
- Add
"ignoreDeprecations": "6.0" to their root tsconfig.json — a band-aid that just defers the problem to TS7.
- Edit the "DO NOT EDIT THIS FILE DIRECTLY" scaffolded
.config/tsconfig.json and rewrite any baseUrl-resolving non-relative imports in their source.
Neither option is great when the fix really belongs in the scaffold itself.
Proposed fix
Remove "baseUrl": "../src" from packages/create-plugin/templates/common/.config/tsconfig.json. rootDir stays — only baseUrl is deprecated.
Optionally, ship a migration (e.g. 008-remove-tsconfig-baseUrl) that:
- Removes the
baseUrl line from .config/tsconfig.json if present.
- Rewrites any non-relative imports in
src/** that resolved via baseUrl to relative form.
Step 2 isn't strictly necessary for the migration if .config/jest.config.js's modulePaths: ['<rootDir>/src'] is left in place (Jest will keep resolving them at test runtime), but TypeScript itself will fail without it. A codemod could be helpful but plugins differ enough that a manual rewrite may be acceptable for the migration.
Worked example
I just shipped this fix in grafana/grafana-cube-datasource#314:
- Removed
baseUrl: "../src" from .config/tsconfig.json (despite the warning).
- Rewrote 13 files (16 import statements + 1
jest.mock call) to use relative paths.
- Net diff: 18 files, +21/-22 lines.
tsc --noEmit now passes cleanly under both TS 5.9.3 and TS 6.0.3 with no ignoreDeprecations escape hatch.
The pattern was small and mechanical — happy to help with a PR against the scaffold and/or a migration script if you'd find that useful.
Why this matters
Every plugin scaffolded by create-plugin currently inherits this latent problem. As Renovate or maintainers bump TypeScript to 6, every one of them will independently hit this and have to choose between band-aid and scaffold-edit. Fixing it at the scaffold solves it for everyone in one stroke and unblocks a clean TS7 path before the deprecation becomes a hard error.
Summary
#2595 ("feat: add support for Typescript 6", merged 2026-04-30) fixed two of the three TS6 deprecation errors by updating
@grafana/tsconfig(droppingdownlevelIterationand switchingmoduleResolutionfromnode→bundler), but the third deprecation —baseUrl— still ships in the scaffolded.config/tsconfig.jsontemplate. As a result, any plugin scaffolded by@grafana/create-pluginthat bumps to TypeScript 6 still failstsc --noEmit.Reproduction
In any plugin scaffolded by
@grafana/create-plugin@7.3.0(or earlier) withtypescript@^6.0.0and the latest@grafana/tsconfig@2.1.0:The other two errors (
downlevelIteration,moduleResolution=node10) that #2595 documented are now gone — onlybaseUrlremains.Root cause
packages/create-plugin/templates/common/.config/tsconfig.jsonstill contains:{ "compilerOptions": { ... "rootDir": "../src", "baseUrl": "../src", ... }, ... }baseUrlcannot be unset from a child tsconfig that extends the scaffold (TypeScript has no "remove an inherited option" mechanism), so plugin authors hitting this on TS6 either have to:"ignoreDeprecations": "6.0"to their roottsconfig.json— a band-aid that just defers the problem to TS7..config/tsconfig.jsonand rewrite anybaseUrl-resolving non-relative imports in their source.Neither option is great when the fix really belongs in the scaffold itself.
Proposed fix
Remove
"baseUrl": "../src"frompackages/create-plugin/templates/common/.config/tsconfig.json.rootDirstays — onlybaseUrlis deprecated.Optionally, ship a migration (e.g.
008-remove-tsconfig-baseUrl) that:baseUrlline from.config/tsconfig.jsonif present.src/**that resolved viabaseUrlto relative form.Step 2 isn't strictly necessary for the migration if
.config/jest.config.js'smodulePaths: ['<rootDir>/src']is left in place (Jest will keep resolving them at test runtime), but TypeScript itself will fail without it. A codemod could be helpful but plugins differ enough that a manual rewrite may be acceptable for the migration.Worked example
I just shipped this fix in grafana/grafana-cube-datasource#314:
baseUrl: "../src"from.config/tsconfig.json(despite the warning).jest.mockcall) to use relative paths.tsc --noEmitnow passes cleanly under both TS 5.9.3 and TS 6.0.3 with noignoreDeprecationsescape hatch.The pattern was small and mechanical — happy to help with a PR against the scaffold and/or a migration script if you'd find that useful.
Why this matters
Every plugin scaffolded by create-plugin currently inherits this latent problem. As Renovate or maintainers bump TypeScript to 6, every one of them will independently hit this and have to choose between band-aid and scaffold-edit. Fixing it at the scaffold solves it for everyone in one stroke and unblocks a clean TS7 path before the deprecation becomes a hard error.