Announcing TypeScript 7.0

TypeScript 7.0 ships the native Go port as the official npm release, delivering 8x–12x faster builds, parallel type-checking, a rebuilt watch mode, and a VS Code extension — with no programmatic API until 7.1.

Announcing TypeScript 7.0

The native TypeScript compiler was benchmarked, previewed, and tested on real codebases for over a year. Then it shipped — and the numbers got larger.

Source

Announcing TypeScript 7.0

By: Microsoft
Published: Jul 08 2026
Type: Release announcement

Saved because this is the moment the native port stops being a roadmap item and becomes the default TypeScript. The API gap, side-by-side migration path, and default configuration changes all affect every project on the upgrade track.

What TypeScript 7.0 actually ships

TypeScript 7.0 is available as the standard typescript package on npm — npm install -D typescript — and installs a tsc binary backed by the native Go compiler. The native era is not rhetoric; it is now what you get when you install TypeScript.

The headline performance figures have grown since the March 2025 announcement. VS Code — 1.5 million lines — goes from 125.7 seconds to 10.6 seconds on a full build: an 11.9x speedup. Sentry runs at 8.9x, Bluesky at 8.7x, Playwright at 8.7x, tldraw at 7.7x. Memory usage falls across the board: VS Code from 5.2 GB to 4.2 GB (−18%), Bluesky from 1.8 GB to 1.3 GB (−26%), with other codebases showing 6–15% reductions. Those are default --checkers 4 numbers. With --checkers 8, VS Code reaches 16.7x.

The most meaningful figure in the post is the editor one. Opening a file with a type error in the VS Code codebase previously took 17.5 seconds from editor open to first visible squiggle. With TypeScript 7 it takes 1.3 seconds — over 13x faster. That’s the metric developers actually feel every day, more than tsc wall time.

Parallel type-checking is now first-class, controlled by the --checkers flag (default: 4 workers). Workers get their own view of the world and may duplicate some shared computation, but given the same input files they always divide them identically and produce the same results. The --builders flag adds parallel project reference building for monorepos, and --singleThreaded disables all parallelism for debugging or constrained CI runners. The flags interact multiplicatively: --checkers 4 --builders 4 can dispatch up to 16 type-checkers at once, so the right values depend on available CPU and memory.

The --watch mode was rebuilt from scratch. Go’s standard library has no built-in file watching API, and existing third-party options had stability or cross-platform problems. The team ported Parcel’s C++ watcher (@parcel/watcher) to idiomatic Go with minimal assembly shims — keeping the original test suite intact — rather than introduce a C++ toolchain dependency. The result is a self-contained Go package with significant resource improvements across platforms that VS Code users had been benefiting from indirectly for years, now embedded directly in tsc --watch.

TypeScript 7.0 ships with no compiler API. Tools that need programmatic access — webpack loaders, typescript-eslint, Volar (which powers Vue, Astro, Svelte, and MDX language support) — cannot yet use TypeScript 7. The team published @typescript/typescript6 as a compatibility package that re-exports the TypeScript 6 API and installs a tsc6 binary. Projects can install TypeScript 7’s tsc alongside TypeScript 6’s API surface via npm aliases. TypeScript 7.1 is where the new API lands, which is the real migration target for the broader toolchain ecosystem. Until then, projects using Angular, Vue, Astro, or Svelte should stay on TypeScript 6 for the language service, and can optionally use TypeScript 7’s tsc for fast project-wide error detection at the CLI.

Default configuration changes from TypeScript 6 are now hard errors in 7.0. strict is true by default. module defaults to esnext. moduleResolution: node/node10 is removed. baseUrl is gone, replaced by paths relative to the project root. Legacy module formats (amd, umd, systemjs) are gone. target: es5 is gone. esModuleInterop can no longer be set to false. The two changes the post flags as most surprising: rootDir now defaults to ./, and types now defaults to [] — projects relying on ambient @types declarations need to list them explicitly. Both are one-line tsconfig.json additions, but they will require active attention during migration.

One type-level behavior change is worth calling out: template literal type inference now handles Unicode code points correctly. HeadTail<"😀abc"> previously inferred ["\ud83d", "\ude00abc"] — splitting the emoji across its UTF-16 surrogate pair. TypeScript 7 infers ["😀", "abc"], consistent with for...of iteration. This is a breaking change only for utilities that explicitly modeled UTF-16 code units.

What I want to remember

Remember: TypeScript 7.0’s API gap is intentional — the compiler and language service shipped first, and the programmatic API comes in 7.1. Anything that imports typescript directly (linters, loaders, framework language tools) stays on TypeScript 6 until 7.1, and @typescript/typescript6 is the package that makes both coexist cleanly in the same project.