cite-wide

The held-back majors land: TypeScript 6, ESLint 10, and a toolchain that tells the truth

Since May we deliberately parked TypeScript 6 and ESLint 10 as 'known open questions.' Today they landed — with the tsconfig migrated off deprecated options so the eventual TypeScript 7 jump is already paid for.

Why Care?

Back in May we did a big type-safety pass and consciously held back the major toolchain bumps — TypeScript 6, ESLint 10 — as "known open questions" rather than churn two migrations at once. Held-back majors have a way of becoming permanent, so the family-wide dependency campaign (see the content-farm plan) was the forcing function: research the release notes first, then move, then prove the build.

The payoff is future-proofing: TypeScript 6 is Microsoft's official bridge to the 10×-faster native TypeScript 7 — a project that compiles clean on 6 with no deprecation escape hatches compiles identically on 7. Cite-wide is now clean on 6 with no escape hatches.

What Was Built / Updated

  • TypeScript 5.8.3 → 6.0.3. The compiler immediately flagged our two deprecated tsconfig options, and we migrated them properly instead of silencing: moduleResolution: "node""bundler" (the correct mode for an esbuild-bundled plugin) and baseUrl + the redundant paths: {"*": ["node_modules/*"]} mapping removed outright.

  • ESLint 9.28 → 10.7. Our flat config carried over untouched — the work of the May flat-config migration is exactly why this was painless. The dead legacy .eslintrc (ignored by ESLint 10 entirely) is deleted.

  • typescript-eslint 8.59.1 → 8.65.0, esbuild 0.28.0 → 0.28.1.

  • @types/node stays pinned ^22 — now with a reason attached: Obsidian's desktop app ships Electron 39, which runs Node 22. The May pin matched the local dev runtime; it turns out it also matches the plugin's actual production runtime.

Verified: pnpm build green end-to-end — tsc -noEmit on TS 6, eslint . on ESLint 10, esbuild production bundle emitted.

Files Touched

  • package.json, pnpm-lock.yaml — version bumps

  • tsconfig.json — bundler resolution, baseUrl/paths removed

  • .eslintrc — deleted (legacy format, dead since the flat config landed)

Reference

  • Campaign plan: content-farm/context-v/plans/Dependency-Upgrades-Across-Plugin-Family.md

  • Resolves "Known Open Questions #1" in this repo's CLAUDE.md