filestarter

The starter template cleans itself — so every future plugin starts clean

filestarter is where new Lossless plugins are born, which means it's also where the dead fastify/MCP/zod dependencies kept being born. Purged at the source, with the toolchain bumped to TypeScript 6 + ESLint 10.

Why Care?

During the family-wide dependency campaign we kept finding the same three never-imported runtime dependencies — fastify, @modelcontextprotocol/sdk, zod — in plugin after plugin. The trail leads here: filestarter is the scaffold new Lossless plugins are cloned from, so its dependency list is heritable. Every dead dependency in the template becomes a dead dependency in every future plugin, and a recurring line item in every future Dependabot triage.

Fixing the template fixes the lineage.

What's New?

  • Removed at the source: fastify, @modelcontextprotocol/sdk, zod — zero imports in the template's own code. Plugins scaffolded from here now start with zero runtime dependencies.

  • TypeScript 5.8.3 → 6.0.3, tsconfig migrated off deprecated options (moduleResolution: "node""bundler", baseUrl/paths removed) — so scaffolded plugins are also born TS-7-ready.

  • ESLint 9.31 → 10.7 + @eslint/plugin-kit 0.7.2, typescript-eslint 8.65, esbuild 0.25.6 → 0.28.1, builtin-modules 5.3.

  • @types/node pinned down 24 → 22 to match Obsidian's Electron 39 / Node 22 runtime — a pin future scaffolds now inherit deliberately.

Verified: tsc -noEmit clean on TS 6, esbuild production bundle green.

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