TypeScript 7 GA: the reality of the Go port
On July 8, 2026, Microsoft shipped TypeScript 7.0, and the industry's most-used compiler changed languages. The JavaScript codebase, codenamed "Strada", hands the baton to "Corsa", the Go port that Anders Hejlsberg announced in March 2025. The binary is called tsc again, the package is still typescript, and full builds drop between 7.7x and 11.9x on the official benchmarks. - Source: Announcing TypeScript 7.0
Behind that headline are nuances worth a full post: what's in and what's out, why half the ecosystem broke overnight, and how the VS Code team itself handled the migration.
The timeline
The port wasn't rushed. The milestones, with dates:
- March 2025: Hejlsberg announces the native port and opens the
typescript-gorepo. The stated goal: cut most build times by 10x. - Source: A 10x Faster TypeScript - May 2025: public previews with the
@typescript/native-previewpackage and thetsgobinary. It reached 8.5 million weekly downloads, which measures exactly how curious people were. - Source: Announcing TypeScript Native Previews - December 2025: the key announcement: "TypeScript 6.0 is the Last JavaScript-Based Release". Type-checking was nearly complete and
--build/--incrementalalready ported. - Source: Progress on TypeScript 7 - March 2026: TypeScript 6.0 GA, the bridge. Same deprecations 7.0 will turn into hard errors, with the
ignoreDeprecationsescape hatch. - Source: Announcing TypeScript 6.0 - July 2026: 7.0 GA (
typescript@7.0.2), binary renamed totsc. - September 2026: the
typescript-gorepo is archived and the code moves back into the main repo. And VS Code starts bundling TS 7 out of the box (releasevscode-typescript/v1.0.1, September 30). - Source: TypeScript releases
One compatibility number sums up the effort: of the compiler's ~20,000 test cases, only 74 behaved differently between 6.0 and 7.0 in December 2025, and the two remaining gaps (regex and isolatedDeclarations) closed before GA. This was a port of fidelity, not reinvention. - Source: Progress on TypeScript 7
Why it's so fast
Three technical reasons, from the GA announcement: native code, multithreading with shared memory, and a set of new optimizations. The port parallelizes parsing, type-checking and emit, and adds new flags to squeeze it:
--checkers N(default 4): more type-checkers in parallel.--builders N: parallel project references builds.- The
--watchfile watcher is Parcel's, ported to Go. - Source: Announcing TypeScript 7.0
The fine detail: it was a port "as faithfully as possible, writing new code while maintaining the structure and logic of the original codebase". That's why results are consistent between the two compilers: same logic, different engine.
The numbers, including the uncomfortable ones
The GA table:
| Codebase | TS 6 | TS 7 | Speedup | Memory |
|---|---|---|---|---|
| VS Code | 125.7s | 10.6s | 11.9x | 5.2 → 4.2 GB |
| Sentry | 139.8s | 15.7s | 8.9x | 4.9 → 4.6 GB |
| Bluesky | 24.3s | 2.8s | 8.7x | 1.8 → 1.3 GB |
| Playwright | 12.8s | 1.47s | 8.7x | 1.0 → 0.9 GB |
| tldraw | 11.2s | 1.46s | 7.7x | 0.6 → 0.5 GB |
- Source: Announcing TypeScript 7.0
With --checkers 8, VS Code drops to 7.51s: 16.7x. The editor too: opening a file with an error in the VS Code codebase went from 17.5 seconds to under 1.3. And the company figures: Slack from 7.5 minutes to 1.25 in CI (and -40% of merge queue time), Canva from 58s to 4.8s for the editor's first error, Microsoft News saved 400 hours a month waiting for builds. - Source: same
Now the part the headline skips. The "10x" is a marketing average: the official table's real range is 7.7x to 11.9x, and the VS Code team itself measured 7x on --noEmit and 4x on full watch. - Source: Iterating faster with TypeScript 7 On memory, the official table shows reductions of 6% to 26%, but the most-read independent critique of the preview claims the opposite in some scenarios (parallel checkers duplicate work across processes). - Source: Why does tsgo use so much memory? Two readings, one piece of advice: measure on your repo.
What's in and what's out
What 7.0 does NOT include: a programmatic API. This single decision explains almost everything else. "We expect TypeScript 7.1 to ship with a new (and different) API". Meanwhile, everything importing the typescript API stayed on 6.0: webpack loaders, typescript-eslint, ts-morph, codemods. - Source: Announcing TypeScript 7.0
There's no tsserver either: the language service is LSP. It works on VS Code, Visual Studio, WebStorm "and any other modern editor", and it reduced failing language server commands by over 80% and crashes by over 60% compared to TS 6. But tsserver plugins died: Vue (Volar), Astro, Svelte, MDX and Angular templates all stay on TS 6 for that exact reason. - Source: same, Announcing TypeScript 7.0 Beta
What it does include: 6.0's defaults now irreversible (strict: true, module: esnext, target es2025, types: []), hard errors for the old deprecations (target: es5, moduleResolution: node, baseUrl, esModuleInterop: false...), template literal types that preserve full Unicode code points, and the @typescript/typescript6 package to run both compilers side by side:
// package.json
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
typescript resolves to the 6.0 package for your peer-dependency tools; @typescript/native gives you the modern binary. Both live in the same node_modules. - Source: Announcing TypeScript 7.0
How to try it today
# install
npm install -D typescript
# verify
npx tsc --version # Version 7.0.2
# the safe first use: check without emit
npx tsc --noEmit -p tsconfig.json
In VS Code, the TypeScript Native Preview extension activates the TS 7 language server; since September 30, 2026, it ships bundled with the editor. In Visual Studio, it turns on automatically per workspace. - Source: VS Code extension, TypeScript releases
For projects depending on the old API, Microsoft's official recommendation for Angular works as a general template: TS 7 for fast CLI checks, TS 6.0 for tools embedding the compiler. That's the ecosystem's temporary fork: tsc for humans, typescript6 for machines still reading the JS API.
VS Code already wrote the migration manual
The VS Code team published their full process, and it's the perfect case study, because they migrated the largest TS codebase on Earth: - Source: Iterating faster with TypeScript 7
- Summer 2025:
--noEmitchecks with the preview on small extensions. Zero risk. - Fall 2025: the 6.0 bridge, cleaning up deprecations.
- January-February 2026: 6 and 7 in parallel in CI; all builtin extensions on the preview.
- February 2026: TS 7 as the default for the whole repo. Along the way, they dropped webpack and adopted esbuild.
Their result: tsc --noEmit from 36s to 5s, full watch from ~80s to ~20s, project load in the editor from ~60s to ~10s. The lesson from the sequence: they didn't migrate in one big bang; they migrated in four steps, each with a clean exit.
Final tips
- Your first use is
--noEmit. Emit, without an API and on the new pipeline, is where surprises live. The pure check gives you the benefit without the risk. - The "10x" isn't your number. It's VS Code's, with 1.5 million lines. On a 50k-line project, your improvement will be smaller in absolute terms, though your CI will still thank you.
- 6.0's deprecations are your current job. Run your build with
stableTypeOrderingand withoutignoreDeprecations. Whatever compiles cleanly there compiles identically on 7.0, per Microsoft's own contract. - If you live in Vue/Astro/Svelte/Angular, your editor stays on 6.0. Not a bug, the plan. The 7.1 API will lift the plugin blockade.
- Keep
@typescript/typescript6in your holster. When a dependency demands the 6.0 API, it's your exit without uninstalling anything.
The Angular case deserves its own chapter, and it has one: Angular and TypeScript 7 (tsgo), with what the team is prototyping. And if your interest is the toolchain being built on top (Oxc, oxlint with tsgo), head over to Vite 8 and the VoidZero stack.
How long does your tsc --noEmit take today? Drop the number in the comments and let's compare in a year.