Skip to content

TypeScript 7 Benchmarks: Measured Speed Across Three Repos

TypeScript 7 benchmarks measured across three real repos: the official Microsoft numbers plus my own cold and warm type-check times, TS 6 vs TS 7.

· · 7 min read
Terminal window showing TypeScript compiler build output with timing

Quick Take

TypeScript 7 runs 6x to 11x faster on real type-checks than TypeScript 6, and the biggest wins land on the largest codebases. Here are the official Microsoft numbers plus my own cold and warm times across a 5k, 40k, and 400k line repo.

Quick take: In my TypeScript 7 benchmarks, cold type-checking ran 6x to 11x faster than TypeScript 6, and the gap widened as the codebase grew. Microsoft's own figures show 8x to 12x. The catch is that how much you gain depends heavily on your repo.

TypeScript 7 speed is the whole reason Project Corsa exists, so I stopped trusting the headline slides and measured it myself. Across three repos - a 5,000 line CLI library, a 40,000 line React app, and a 400,000 line monorepo - cold type-check times fell from 3.1s, 14.2s, and 96.4s on TS 6 to 0.5s, 1.6s, and 8.9s on TS 7. That's 6.2x, 8.9x, and 10.8x. The official Microsoft TypeScript 7 benchmarks land in the same range, and the trend is clear: the bigger the project, the bigger the win. Want the Project Corsa background first? Read the TypeScript 7 hub guide.

What do the official TypeScript 7 benchmarks show?

Microsoft published a tight set of numbers with the GA release. Type-checking the VS Code codebase dropped from 125.7 seconds on TypeScript 6 to 10.6 seconds on TypeScript 7, an 11.9x speedup. Turn on parallel checkers with --checkers 8 and the same run finishes in 7.51 seconds. Opening a file that already has type errors went from 17.5 seconds to under 1.3 seconds, which is more than 13x and the part you feel every single minute. Memory usage fell between 6 and 26 percent depending on the project, with VS Code itself down about 18 percent.

Those are real, reproducible figures. But VS Code is a 1.5 million line beast. Do the gains hold on the kind of app most of us actually ship? That's what I wanted to know.

Long-exposure light trails from cars curving along a dark road
Photo by Getty Images on Unsplash

How did I measure it?

Same machine every run: a 2023 MacBook Pro, M3 Max, 36 GB RAM, macOS 15. I pinned [email protected] and [email protected] in separate installs so nothing else moved between runs.

# TS 6 (JavaScript compiler, runs on Node)
npm install -D [email protected]
npx tsc --noEmit

# TS 7 (native Go compiler, ships as the standard tsc)
npm install -D [email protected]
npx tsc --noEmit

I split each measurement into two modes. Cold means no build info and no cache, the worst case and the one everybody quotes. Warm means an incremental rebuild after touching a single file, which is what your editor and pre-commit hook actually do all day long.

# cold: wipe incremental state, then time the full check
rm -f tsconfig.tsbuildinfo && rm -rf node_modules/.cache
hyperfine --warmup 1 --runs 5 'npx tsc --noEmit'

# warm: prime once, touch one file, re-check incrementally
npx tsc --noEmit --incremental
touch src/index.ts
hyperfine --runs 5 'npx tsc --noEmit --incremental'

I took the best of five runs for each cell, since background noise only ever makes a run slower, never faster. No skipLibCheck tricks either. The point was to check everything, the way CI does. TS 6 ran on Node 24; the TS 7 binary needs no runtime at all, which is part of why its cold numbers start so much lower. I kept the laptop plugged in and let each repo cool down between passes so thermal throttling wouldn't quietly skew a run.

TypeScript 7 benchmarks across three repo sizes

Here's the full table. Cold and warm, TS 6 versus TS 7, plus the cold speedup.

RepoLOCTS 6 coldTS 7 coldTS 6 warmTS 7 warmCold speedup
CLI library~5k3.1s0.5s1.2s0.2s6.2x
React app~40k14.2s1.6s4.8s0.7s8.9x
Monorepo~400k96.4s8.9s31.0s3.2s10.8x

The chart below plots the cold column, TS 6 against TS 7, side by side.

Cold type-check time, TS 6 vs TS 7 (seconds, lower is better) CLI ~5k 3.1s 0.5s React ~40k 14.2s 1.6s Mono ~400k 96.4s 8.9s TypeScript 6 TypeScript 7 Best of 5 cold runs, M3 Max, 36 GB RAM. Lower is better.

The shape is the story. On the small library, going from 3.1s to 0.5s barely registers in a workday. You were never really waiting on it. On the monorepo, dropping from a minute and a half to under nine seconds changed how the team worked. People stopped switching over to Slack while the check ran. That single behavior shift, honestly, was worth more than the raw seconds.

One column deserves its own callout: the warm times. Look at the monorepo again. TS 6 already rebuilds an incremental change in 31 seconds, and TS 7 does it in 3.2. The 10x ratio still holds, but the absolute numbers are what decide whether you keep working or wander off. Three seconds keeps you in flow. Thirty-one does not. On the smaller repos the warm gap is almost academic, since both finish before you've even moved your hands back to the keyboard.

Does the --checkers flag help?

On small and medium repos, not really. There isn't enough work to spread across cores, and the 40k React app came out within noise of the default. On the 400k monorepo it mattered: --checkers 8 took the cold check from 8.9s to 6.7s, roughly a 25 percent trim.

# spread type-checking across 8 parallel workers
npx tsc --noEmit --checkers 8

My rule of thumb? Below about 100k lines, skip it. Above that, benchmark --checkers against your core count and keep whatever wins. Where this really compounds is CI, where a runner sits idle on spare cores anyway. I broke down that pipeline setup in the TypeScript 7 GitHub Actions guide.

Abstract red and gold streaks of light zooming forward at high speed
Photo by Rana Mia on Unsplash

When do the gains shrink?

Here's the honest caveat: your mileage will vary, sometimes a lot. Type-check speed depends on how gnarly your types are, not just line count. A 20k line file full of deep conditional and mapped types can check slower than a 200k line app of plain interfaces. Heavy .d.ts files from big dependencies, recursive generics, and giant union types all tax the checker, and they tax both compilers.

Warm rebuilds also compress the gap. Once incremental state is primed, TS 6 was already fast enough on the small repo that I couldn't feel the difference. So don't upgrade expecting a clean 11x everywhere. Expect a large, obvious win on cold builds and CI, a smaller one on the warm editor loop, and run your own numbers before you promise a stakeholder anything. Would I still upgrade every project I own? Yes, but for the cold builds, not the warm ones.

  • TypeScript 7 migration guide - the upgrade path from TS 5.x through the TS 6 bridge, with the exact tsconfig changes these speed numbers assume.

Frequently Asked Questions

How much faster is TypeScript 7 in benchmarks?
Microsoft reports 8x to 12x faster full builds. Type-checking the VS Code codebase dropped from 125.7 seconds on TypeScript 6 to 10.6 seconds on TypeScript 7, an 11.9x speedup. In my own runs across three repos, cold type-check speedups ranged from 6.2x on a small library to 10.8x on a 400k line monorepo.
What is the difference between cold and warm type-check benchmarks?
A cold run has no build info and no cache, so it type-checks everything from scratch. A warm run is an incremental rebuild after changing one file, which is what your editor and pre-commit hook do all day. TypeScript 7 shows its biggest gains on cold runs; warm incremental runs are already fast on both versions, so the gap narrows.
Does the --checkers flag make TypeScript 7 faster?
Only on large codebases. The --checkers flag spreads type-checking across parallel workers. Microsoft measured VS Code dropping from 10.6 seconds to 7.51 seconds with --checkers 8. On my 400k line monorepo it trimmed the cold check from 8.9 to 6.7 seconds, but on small and medium repos it made no measurable difference.
Do TypeScript 7 speed gains vary by codebase?
Yes, a lot. Type-check time depends on how complex your types are, not just line count. Deep conditional and mapped types, recursive generics, and large union types tax the checker heavily. A small file of gnarly types can check slower than a huge file of plain interfaces, so you should benchmark your own project before promising a specific number.