You've likely heard a lot of buzz around TypeScript lately—so let's dive into what makes it exciting.
Microsoft recently introduced a native port of the TypeScript compiler (tsgo
), built with Golang
. The TypeScript compiler (tsc
) is itself written in TypeScript, and while this "dogfooding" approach has worked well for small to medium projects, it has always struggled with performance at scale. Its reliance on a single-threaded event loop limits compilation speed, making large projects sluggish.
With tsgo
, Microsoft aims to remove these bottlenecks by porting the compiler and tools in a compiled language. The results? Up to 10x faster compilation, substantially reduced memory usage, and far better scalability for massive TypeScript projects. If you spend time in JetBrains IDEs (iykwim), you'll probably notice snappier startup times too 😉.
For instance, tsgo
cuts VS Code's compilation time from 77.8s to just 7.5s - a staggering 10.4x speedup. Here's how other popular projects compare -
Project | LOC | tsc | tsgo | Speedup |
---|---|---|---|---|
VS Code | 1,505,000 | 77.8s | 7.5s | 10.4x |
Playwright | 356,000 | 11.1s | 1.1s | 10.1x |
TypeORM | 270,000 | 17.5s | 1.3s | 13.5x |
date-fns | 104,000 | 6.5s | 0.7s | 9.5x |
tRPC (server + client) | 18,000 | 5.5s | 0.6s | 9.1x |
rxjs (observable) | 2,100 | 1.1s | 0.1s | 11.0x |
These numbers highlight a fundamental shift in TypeScript development; dramatically faster builds and smoother workflows.
Beyond raw speed, tsgo
substantially reduces memory usage, making it more efficient for large-scale projects. Developers using IntelliSense
will also notice major improvements in responsiveness, as type checking becomes significantly snappier.
Switching to tsgo
is as simple as updating your build script -
{
"scripts": {
"build": "tsc -p tsconfig.json"
"build": "tsgo -p tsconfig.json"
}
}
With TypeScript 7.0, tsgo
will become the fully native toolchain, while TypeScript 6.x remains an option for compatibility.
But... why Golang?
A burning question
Why not Rust
, Zig
, or something from the C-family
?
The answer is simple - Golang
compiles directly into a standalone binary, making it fast and efficient.
More importantly, Golang excels at concurrency
. Its lightweight goroutines and built-in parallel execution model making it ideal for compilers, efficiently handling tasks without complex threading.
What does this mean for us at Appwrite?
At Appwrite, we use TypeScript
extensively on our frontend, alongside Svelte
for the UI. While our codebase isn't particularly TypeScript-heavy, tsgo
could still offer noticeable performance benefits.
Project | LOC | Svelte | TypeScript | Other | TS LOC |
---|---|---|---|---|---|
Console | 71,143 | 83.2% | 16.3% | 7.3% | 11,596 |
Website | 176,958 | 83.6% | 9.1% | 5.7% | 16,103 |
Given our relatively lean TypeScript footprint, the impact might not be as dramatic as in larger codebases. Still, any boost in build times and developer experience is always a win.