Skip to content
Development
Skill

/ts-config

Use when creating or migrating a tsconfig.json, choosing module/moduleResolution, or fixing TS 6.0 deprecations that are hard errors in TS 7.0. Not for language syntax (ts-language-patterns).

From plugin
fusengine-claude-plugins
34200 skills40 agents34 commands

Claude Code

$ npx -y skills add fusengine/claude-plugins --skill ts-config --agent claude-code

SKILL.md

ts-config.SKILL.md
name: ts-config
description: "Use when creating or migrating a tsconfig.json, choosing module/moduleResolution, or fixing TS 6.0 deprecations that are hard errors in TS 7.0. Not for language syntax (ts-language-patterns)."
versions:
  typescript: "7.0"
  node: "24"
  bun: "1.4"
user-invocable: false
references: references/bundler-track.md, references/node-track.md, references/deprecations-6.md, references/templates/tsconfig.bundler.md, references/templates/tsconfig.node.md
related-skills: ts-language-patterns, solid-generic

<objective> This skill covers the two supported TypeScript 7.0 config tracks for 2026 — bundler (Bun, Vite, esbuild, webpack: module Preserve + moduleResolution bundler) and Node (pure Node.js native type stripping: module nodenext + moduleResolution nodenext) — and how to pick between them by runtime.

It also covers the TS 6.0 deprecation cleanup that TS 7.0 (native Go compiler) enforces as hard errors: dropping moduleResolution node/node10, setting verbatimModuleSyntax, strict + noUncheckedIndexedAccess, explicit types, and explicit rootDir now that it is no longer inferred.

Out of scope: TypeScript language syntax and idioms belong to ts-language-patterns; framework configs that ship their own tsconfig base (Next.js/Astro/Vite plugin skills) and non-TS build tooling are not covered. </objective>

TypeScript Config (TS 7.0)

Agent Workflow (MANDATORY)

Before writing any tsconfig, spawn 3 agents in parallel, one `Agent` call each with a `name`:

1. **fuse-ai-pilot:explore-codebase** - Detect runtime (Bun/Node/bundler), existing tsconfig, `package.json` `type` 2. **fuse-ai-pilot:research-expert** - Confirm current flags on typescriptlang.org release notes + runtime docs 3. **mcp__context7__query-docs** - `/microsoft/typescript` for any flag whose behavior is unclear

After writing, run **fuse-ai-pilot:sniper** for validation.

---

Overview

There are exactly **two supported config trajectories** in 2026. Pick by runtime, never mix.

| Track | Runtime | `module` | `moduleResolution` | |-------|---------|----------|--------------------| | **Bundler** | Bun, Vite, esbuild, webpack | `Preserve` | `bundler` | | **Node** | Pure Node.js (native type stripping) | `nodenext` | `nodenext` |

---

Critical Rules

1. **Never `moduleResolution: node` / `node10`** - deprecated in 6.0, hard error in 7.0. Use `bundler` or `nodenext`. 2. **Always `verbatimModuleSyntax: true`** - both tracks. Forces explicit `import type`, matches Node's type stripping. 3. **`strict` + `noUncheckedIndexedAccess`** - strict is the default since 6.0 (kept in 7.0); add `noUncheckedIndexedAccess` explicitly. 4. **Set `types` explicitly** - since 6.0 (kept in 7.0) `types` defaults to `[]`. Add `["node"]`, `["bun"]`, etc. or you lose globals. 5. **Set `rootDir` when sources are nested** - since 6.0 (kept in 7.0) `rootDir` defaults to the tsconfig dir, no longer inferred.

---

Decision: which track?

Runs on Bun, or bundled by Vite/esbuild/webpack/Parcel?
  → Bundler track  → references/bundler-track.md

Runs directly on `node file.ts` (type stripping), or emits .js for Node?
  → Node track     → references/node-track.md

Migrating an existing 5.x config / seeing deprecation errors?
  → references/deprecations-6.md  (do this first, then pick a track)

---

Reference Guide

Concepts

| Topic | Reference | When to Consult | |-------|-----------|-----------------| | **Bundler track** | [bundler-track.md](references/bundler-track.md) | Load when configuring a Bun or bundler (Vite/esbuild/webpack) project | | **Node track** | [node-track.md](references/node-track.md) | Load when configuring a pure Node.js project with native type stripping | | **6.0 deprecations / 7.0 errors** | [deprecations-6.md](references/deprecations-6.md) | Load when migrating from TS 5.x/6.0, fixing deprecation errors, or adopting the TS 7.0 `tsc` |

Templates

| Template | When to Use | |----------|-------------| | [tsconfig.bundler.md](references/templates/tsconfig.bundler.md) | Complete Bun/bundler tsconfig | | [tsconfig.node.md](references/templates/tsconfig.node.md) | Complete pure-Node tsconfig |

---

Quick Reference

Bundler / Bun

{
  "compilerOptions": {
    "module": "Preserve",
    "moduleResolution": "bundler",
    "verbatimModuleSyntax": true,
    "allowImportingTsExtensions": true,
    "noEmit": true,
    "strict": true,
    "noUncheckedIndexedAccess": true
  }
}

Pure Node.js (native type stripping)

{
  "compilerOptions": {
    "module": "nodenext",
    "rewriteRelativeImportExtensions": true,
    "erasableSyntaxOnly": true,
    "verbatimModuleSyntax": true,
    "noEmit": true, // only if you never emit .js
    "strict": true
  }
}

---

Best Practices

DO

  • Add `"ignoreDeprecations": "6.0"` **temporarily** on TS 6.0 while migrating, then remove it — TS 7.0 does not honour it (deprecated options are hard errors)
  • Keep tools that need the compiler API (e.g. typescript-eslint) on TS 6 via the `@typescript/typescript6` alias while `tsc` runs TS 7.0 — see [deprecations-6.md](references/deprecations-6.md)
  • Use subpath imports `"#/*": "./src/*"` in `package.json` `imports` (supported under `nodenext` and `bundler`)
  • Fold any `baseUrl` prefix into each `paths` entry (`baseUrl` is deprecated)

DON'T

  • Mix `module: Preserve` with `moduleResolution: nodenext` (or vice-versa)
  • Set `esModuleInterop`, `allowSyntheticDefaultImports`, or `alwaysStrict` to `false` (no longer allowed)
  • Use `enum`, `namespace` with runtime code, or parameter properties in files run by Node's type stripping
Read more
@fusengine
Ships withfusengine-claude-plugins

A plugin ecosystem that turns Claude Code into a supervised, multi-agent development environment.

34200 skills40 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
34
Star history of fusengine/agents on GitHub, a chart by star-history.com

Other skills on fusengine-claude-plugins.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about ts-config.

Which coding agents can use ts-config?
ts-config installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.