astradevlabsastradevlabs
← All posts
Dev Tips4 min

The TypeScript 7 RC Upgrade Playbook: 7 Steps to the 10x Compiler

Dev Tips

The 10x-faster, Go-native TypeScript compiler is no longer a preview package with a weird binary name. As of the 7.0 Release Candidate (June 18, 2026), it installs as plain typescript from npm and runs as plain tsc — and Microsoft says stable lands within the month. Here is a step-by-step playbook for moving a real project onto it this week.

If you want the backstory on the Go port first, Anders Hejlsberg's Build session is the best hour on the subject:

1. Get clean on TypeScript 6.0 first

TypeScript 7.0 hard-adopts 6.0's defaults and turns its deprecations into hard errors. If you're still on 5.x, upgrade to 6.0 before touching 7.0 — it's where you'll do the actual migration work. The big removals to fix now:

  • target: es5 and downlevelIteration are gone.
  • baseUrl is gone — rewrite paths relative to the project root.
  • moduleResolution: node/node10/classic are gone — use nodenext or bundler.
  • module: amd, umd, systemjs, none are gone — use esnext or preserve.

A codebase that compiles cleanly on 6.0 (with stableTypeOrdering on) should compile identically on 7.0.

2. Install the RC

sh
npm install -D typescript@rc
npx tsc --version
# Version 7.0.1-rc

That's it. Unlike the beta, there's no @typescript/native-preview package or tsgo binary to juggle — the RC ships as the typescript package with a tsc entry point. Run your existing build untouched and compare output.

3. Fix the two "surprising" config defaults

Two 6.0-era default changes bite most projects on first contact:

rootDir now defaults to ./. If your tsconfig.json sits above src, set it explicitly to keep your output structure:

json
{
  "compilerOptions": {
    "rootDir": "./src"
  },
  "include": ["./src"]
}

types now defaults to [] instead of every @types package in scope. List what you actually rely on (e.g. "types": ["node", "jest"]), or restore the old behavior with "types": ["*"].

4. Keep 6.0 around for tooling that needs the old API

The stable programmatic API doesn't arrive until TypeScript 7.1, so tools like typescript-eslint that import from typescript may still need 6.0. Microsoft ships a compatibility package for exactly this — alias it and keep the RC alongside:

json
{
  "devDependencies": {
    "typescript": "npm:@typescript/typescript6@^6.0.0",
    "typescript-7": "npm:typescript@rc"
  }
}

You get a tsc6 binary and the 6.0 API for tooling, while npx tsc runs the fast 7.0 compiler.

5. Tune the parallelism flags

7.0 parses, type-checks, and emits in parallel. Three new flags control it:

  • --checkers — number of type-checker workers, default 4. Raise it on big machines with many cores; lower it on skinny CI runners. More checkers means more memory.
  • --builders — parallel project-reference builders, great for monorepos. Note it multiplies with --checkers: --checkers 4 --builders 4 can mean 16 concurrent checkers.
  • --singleThreaded — one thread for everything; useful for debugging or honest 6-vs-7 benchmarks.

Pin --checkers to a fixed number across your team and CI. Varying it can, in rare cases, surface order-dependent results.

6. Switch your editor over

Install the TypeScript Native Preview extension in VS Code to get the same speedup in your editor — it's LSP-based, so it works in most modern editors too. Feature gaps from the beta (semantic highlighting, sort imports, remove unused imports) are now closed, and Microsoft reports failing language-server commands are down over 20x versus 6.0. The rebuilt --watch mode, ported from Parcel's file watcher, also cuts resource usage noticeably on large node_modules trees.

7. Know the sharp edges before you ship

Three things to check before flipping CI to the RC:

  1. JSDoc-typed JavaScript is stricter: @enum and Closure-style function syntax aren't specially recognized anymore, and a bare ? is no longer a type. Mostly-JS codebases need a real audit.
  2. Template literal types now split strings by Unicode code point, so HeadTail<"😀abc"> infers ["😀", "abc"] instead of surrogate halves — a breaking change if you do type-level string length tricks.
  3. No stable API until 7.1 — if you build tooling on the compiler API, you're on 6.0 (via the alias above) for a while yet.

If you hit a regression, file it on the microsoft/typescript-go tracker now — this is the window where behavior gets finalized.

References