Cloudflare and VoidZero Introduce tsrs: An AI-Generated Rust Port
Cloudflare announced tsrs, a Rust TypeScript port built with VoidZero that claims up to 8x faster checking and around 70% less memory than TypeScript 7.0.
By Dillip Chowdary β’ Oct 27, 2026 β’ Source: InfoQ
Cloudflare has announced tsrs, a Rust port of the TypeScript compiler it is developing with VoidZero and Max Schwenk of Owner.com. The work sits inside the Oxc toolchain, in close collaboration with the TypeScript team, and Cloudflare is emphatic it is not a fork: that team retains full control over the language's design. InfoQ's report by Daniel Curtis, published on 27 October 2026, cites up to 8x faster type checking and around 70% less memory than TypeScript 7.0.
Developers who type-check an existing repo, including people who own the CI check, are the readers for what follows. The piece gives Owner.com's monolith numbers, an independent npm comparison, ImportStatic's TypeScript 7.1 beta result, the npm and npx commands, and the experimental limits: no watch mode, no language server, no --init or --showConfig, and an exit code unlike tsc. It also places tsrs next to Microsoft's tsgo and Theo Browne's tsc-rs.
What Cloudflare and VoidZero shipped
@tsrs/wasm is the WebAssembly build, so checks can run in a browser or on Workers without dragging a garbage collector into the bundle the way a Go binary does. The port ships beside Microsoft's Go-based compiler, tsgo, and Theo Browne's tsc-rs. Cloudflare is merging tsc-rs and tsrs into a single package and adding language server and content mapper support. Daniel Rosenwasser said much of the speed "does not just come down to language choice," and that some optimisations discovered in tsrs are feeding a leaner TypeScript 7.1.
What changed for builders in Cloudflare and VoidZero
Owner's 37,000-file monolith needed 19 GiB and 80 seconds on TypeScript 7.0 and dropped to 7 seconds on tsrs. A separate npm-package benchmark measured 5.3x faster checking and 72% less memory, with identical diagnostics and byte-identical emit. Peter Steinberger moved to tsrs over the weekend, called it a drop-in replacement, and reported around 5x faster checks for OC. He wrote that Microsoft took a team and two years to rewrite the TypeScript compiler in Go, while an agent produced something significantly better within weeks.
Against the TypeScript 7.1 beta, ImportStatic measured 2.7x, a smaller gain than the 8x figure taken against TypeScript 7.0 at the same number of checker workers. The npm test that matched diagnostics and emit also showed tsrs exiting with code 2 on type errors where tsc exits 1, enough to quietly break a CI script that expects 1. Others questioned whether the arena-based, never-freed memory model is sound. Daniel Rosenwasser said some optimisations discovered in tsrs are feeding a leaner TypeScript 7.1.

| Measurement | Before | After with tsrs |
|---|---|---|
| Type-check speed, same checker workers | TypeScript 7.0 | up to 8x faster |
| Memory, same checker workers | TypeScript 7.0 | around 70% less |
| Owner.com 37,000-file monolith | 19 GiB and 80 seconds on TypeScript 7.0 | 7 seconds |
| Independent npm-package benchmark | tsc | 5.3x faster, 72% less memory, identical diagnostics, byte-identical emit |
| ImportStatic measurement | TypeScript 7.1 beta | 2.7x faster |
| Peter Steinberger on OC | checker replaced over a weekend | around 5x faster, drop-in replacement |
| Exit code on type errors | tsc exits 1 | tsrs exits 2 |
Advertisement
Tech Pulse Daily
Get tomorrow's pulse first
Join engineers who read Tech Pulse before stand-up. Free, weekday mornings.
How to install or upgrade Cloudflare and VoidZero
Install tsrs as a dev dependency and aim it at the tsconfig already in the tree. The announcement's two commands are a local install and a no-emit check of the current directory. The -p . flag selects that project. The --noEmit flag skips writing output. The two commands below are the whole published try-out. Teams still on TypeScript 5 or TypeScript 6 should adopt Microsoft's native Go port first, because tsrs tracks TypeScript 7, and only then swap this package in.
npm install -D tsrsnpx tsrs -p . --noEmitAfter the Go port is in place, migration reuses the existing tsconfig. --init and --showConfig are both unsupported, and diagnostic order can differ from tsc. With watch mode absent, the npx line is one check and then an exit. The language server is not in this build, so editor features that need one stay on the TypeScript tools already in the repo. Language server and content mapper support are what Cloudflare is adding by merging tsc-rs and tsrs into one package.
Gotchas and compatibility in Cloudflare and VoidZero
Watch mode is missing, and so is a language server. --init and --showConfig are unsupported, and diagnostic order can differ from tsc. The status code is the sharper mismatch. The benchmark that found 5.3x faster checking, 72% less memory, identical diagnostics, and byte-identical emit also found tsrs exiting 2 on type errors while tsc exited 1. A CI script that expects exit code 1 can break once the binary changes. The release is experimental, so these differences are in the package a developer installs now.
What to watch after Cloudflare and VoidZero
Cloudflare is combining Theo Browne's tsc-rs and tsrs into one package and adding language server and content mapper support there. Watch mode, --init, and --showConfig remain unavailable in the experimental release. Peter Steinberger wrote: "Moved to tsrs over the weekend. Drop-in replacement. Around 5x faster for OC." He also wrote that it took Microsoft a team and two years to rewrite the TS compiler in Go, and that you can "let an agent rip and get sth significantly better within weeks." TypeScript 7.1 is already taking optimisations discovered in tsrs.
Schwenk's account names the method with counts attached. He wrote "zero" code, directed agents led by Claude Opus 5.5, and used 15,197 TypeScript conformance cases as the spec. On Owner's 37,000-file monolith, TypeScript 7.0 took 19 GiB and 80 seconds, and tsrs took 7 seconds. The code is Apache-2.0 on GitHub. A pipeline has to treat exit code 2 as the type-error status, because tsc uses 1. Browser and Workers runs use @tsrs/wasm so the bundle does not pick up a garbage collector the way a Go binary does.
Developer Action Items
- β Diff the official changelog for Microsoft / Cloudflare / Cloudflare 7.0 before you bump β APIs, defaults, and removed flags only.
- β Install through the vendor's documented channel in staging; keep a one-command rollback and time-box the canary.
- β Grep your repo for old flag names, lockfile pins, and plugin versions that the notes mark as breaking.
- β Prefer the first patch cut over the day-zero tag unless you have a reason to be on the leading edge.
- β If InfoQ did not name a region, plan, or SKU, screenshot the official availability line before you promise it to users.
Cloudflare and VoidZero FAQ
What is tsrs, and who is building it?
tsrs is an experimental Rust port of the TypeScript compiler that tracks TypeScript 7. Cloudflare announced it and is developing it with VoidZero and Max Schwenk of Owner.com, incubating the work inside the Oxc toolchain with the TypeScript team, which keeps control of the language design. It is Apache-2.0, available on GitHub, and not a fork.
How much faster is tsrs than TypeScript 7.0 and the 7.1 beta?
Cloudflare claims up to 8x faster type checking and around 70% less memory than TypeScript 7.0 at the same number of checker workers. Owner's 37,000-file monolith dropped from 19 GiB and 80 seconds to 7 seconds. An npm comparison measured 5.3x and 72% less memory, Peter Steinberger reported around 5x on OC, and ImportStatic measured 2.7x against the TypeScript 7.1 beta.
How do you install tsrs and run a check?
Add it as a dev dependency and point it at the current project with npm install -D tsrs and npx tsrs -p . --noEmit. Teams still on TypeScript 5 or 6 should adopt Microsoft's native Go port first. After that, migrating reuses the existing tsconfig.
Can tsrs break CI even when the diagnostics match?
Yes. A comparison that found identical diagnostics and byte-identical emit also found that tsrs exits with code 2 on type errors where tsc exits 1. A script that only treats exit code 1 as a type-check failure can take the wrong branch.
What does the experimental release leave out?
There is no watch mode and no language server yet, --init and --showConfig are unsupported, and diagnostic order can differ. Cloudflare plans language server and content mapper support by merging Theo Browne's tsc-rs and tsrs into a single package. Browser and Workers checks use @tsrs/wasm.
Sources
Author
Dillip Chowdary
Writes Tech Bytes coverage of AI, engineering, and the tools that actually ship. Editor of Tech Pulse Daily.
Related on Tech Bytes
Advertisement