ts-rust (ook bekend als tsc-rs) is een experimentele poort van de TypeScript 7-compiler naar Rust. Het project is ontstaan uit een experiment om te zien of Large Language Models (LLM's) in staat zijn een complexe compiler om te zetten. Na diverse pogingen met GPT-modellen bleek Claude Opus 5.5 het meest effectief, waarbij een werkende v0 in slechts tien uur werd geproduceerd.
Belangrijkste punten uit het artikel:
- Prestaties: In benchmarks is tsc-rs aanzienlijk sneller dan de officiële tsc 6 en 7. Hoewel
bun check in veel gevallen nog sneller is, biedt tsc-rs een voordeel voor Effect-projecten door ingebouwde diagnostics.
- Compatibiliteit: De tool is gebaseerd op een specifieke revisie van de Microsoft TypeScript Go-poort en vertoont in de meeste real-world projecten een compatibiliteit van 100%.
- Functionaliteit: Het project ondersteunt Linux x64 en macOS arm64 en is beschikbaar via npm. Het bevat specifieke ondersteuning voor Effect language service diagnostics.
- Ontwikkelingsproces: Het project illustreert de enorme kosten en hoeveelheid code die LLM's kunnen genereren, met uitgaven van tienduizenden dollars aan API-tokens.
Er zijn nog enkele bekende beperkingen, waaronder issues met monorepos, project references en een langzame groei van het geheugengebruik tijdens lange sessies.
ts-rust (aka tsc-rs)
Motivaties
De drijfveren achter dit project zijn:
- Het testen van de mogelijkheden van LLM-modellen.
- Het creëren van een snelle TypeScript type-checker.
- Het ontwikkelen van een TypeScript-checker die met hoge prestaties in WASM kan werken.
- Memes.
Waarschuwingen
Dit is een vroege release. In alle geteste real-world projecten is er 100% compatibiliteit, waardoor het voor de overgrote meerderheid van de applicaties als een directe vervanger zou moeten werken. Raadpleeg de sectie "Bekende problemen" voor meer details.
Opmerkelijk is dat de auteur van het project zelf geen enkele regel van de gegenereerde code heeft gelezen.
Installatie
Let op: er is geen garantie dat dit in elke omgeving werkt.
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json
Ontwikkelingsproces en kosten
Het porting-proces is uitgevoerd met diverse OpenAI-modellen. In totaal is er meer dan $400.000 aan API-tokens besteed aan GPT-5.6 Sol en GPT 6 Astra. Deze modellen schreven over meerdere maanden tijd meer dan 1,3 miljoen regels Rust via /goal-loops, maar bereikten nooit meer dan 84% compatibiliteit.
Toen de auteur merkte dat de limieten van Claude Code minder snel werden verbruikt, is Opus 5.5 ingezet. Dit model produceerde binnen 10 uur een werkende v0. In tegenstelling tot de verwachting bleek Opus 5.5 niet voort te bouwen op de code van de Codex-modellen, maar volledig vanaf nul te beginnen. Het model ging verder dan Astra in een tiende van de tijd.
De uiteindelijke kosten voor de voltooiing via Claude bedroegen ongeveer $24.047 aan API-uitgaven over een periode van twee weken. Dit kwam overeen met 925% tot 983% van de wekelijkse limieten van een $200-plan.
Wat is ts-rust precies?
ts-rust is een directe poort van de native TypeScript-compiler van Microsoft die in Go is geschreven (microsoft/TypeScript, voorheen typescript-go). Het behoudt de algoritmen en het gedrag van de Go-versie en hanteert dezelfde command-line (tsc), language server en API.
Installatie en platformen
De installatie verloopt via npm:
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json
tsc-rs accepteert dezelfde opties als tsc. De npm-pakketnaam is tsc-rs om conflicten met het officiële typescript-pakket te voorkomen. Elke release bevat ook een standalone archief per platform (het tsc-binair bestand met de bijbehorende lib-bestanden).
Beschikbare platformen:
- Linux x64 (statisch, elke distributie)
- macOS arm64
- Windows en Linux arm64 zijn momenteel nog niet beschikbaar.
Voor gebruik in VS Code kan worden verwezen naar de README van het npm-pakket.
Effect-diagnostiek
tsc-rs heeft de Effect language service diagnostics (codes 377xxx) ingebouwd, waardoor een Effect-project geen tweede compiler nodig heeft. Deze diagnostics komen voort uit dezelfde check als de TypeScript-diagnostics en worden ook door de language server getoond. Ze worden alleen uitgevoerd wanneer de tsconfig de plugin bevat, net als bij @effect/language-service:
{
"compilerOptions": {
"plugins": [{ "name": "@effect/language-service" }]
}
}
De regels, opties en @effect-diagnostics commentaren zijn een poort van Effect-TS/tsgo 0.46.1. De editor-functies van de language service (zoals quick fixes, refactors, hover en completions) zijn niet gepoort.
Status en compatibiliteit
De poort is vastgepind op één upstream revisie: microsoft/TypeScript 673a5f17d713 (2026-09-29, TypeScript 7.1.0-dev; zie UPSTREAM.md) en is vergeleken met de Go-versie van diezelfde revisie. Voor vergelijkingen dient typescript@7.1.0-dev.20260929.1 te worden gebruikt, en niet 7.0.x of @typescript/native-preview.
Resultaten
- Identieke output: TanStack Query core en Hono vertonen diagnostiek die identiek is aan die van Go. Alle 181.711 gepoorte Go-tests zijn geslaagd. De antwoorden van de language server en API komen overeen met Go in de oracle-testsets.
- Snelheid: Bij 60 open-source projecten neemt de type-checking ongeveer de helft van de tijd in beslag vergeleken met Go (geometrisch gemiddelde). De preview-pakketten zijn gebouwd in CI zonder PGO en BOLT, waardoor ze langzamer zijn dan de gemeten build.
- Real-world projecten: Bij 120 open-source repo's verschilt de output van de command-line alleen op de punten die onder "Bekende problemen" worden genoemd en waar de output van Go zelf per run verschilt.
Benchmarks
Benchmark: T3 Code
Volledige type-check van T3 Code, vergeleken met tsc 6, tsc 7 en de nieuwe bun check in Bun. T3 Code gebruikt Effect, waardoor er twee scenario's zijn.
Zonder Effect-diagnostics
| Checker | Tijd | vs tsc 6 | vs tsc 7 | bun check |
| bun check | 4.07s | 15.4× | 3.95× sneller | - |
| tsc-rs | 7.25s | 8.6× | 2.22× sneller | - |
| tsc 7 | 16.10s | 3.9× | baseline | - |
| tsc 6 | 62.63s | baseline | 3.89× langzamer | - |
Met Effect-diagnostics
| Checker | Tijd | vs tsc 6 | vs tsc 7 + Effect |
| tsc-rs (Effect ingebouwd) | 11.13s | 12.5× | 1.89× sneller |
| tsc 7 + @effect/tsgo | 21.07s | 6.6× | baseline |
| bun check, dan effect-tsgo diag. | 37.60s | 3.7× | 1.78× langzamer |
| tsc 6 + @effect/language-service | 138.63s | baseline | 6.58× langzamer |
bun check is het snelst wanneer Effect-diagnostics niet nodig zijn. Echter, voor Effect-projecten heeft tsc-rs het voordeel dat deze diagnostics in één check worden meegenomen.
Benchmark: Real-world apps
Volledige type-check van zes open-source apps. De multiplier geeft de versnelling ten opzichte van tsc 6 weer.
| App | Regels gecheckt | tsc 6 | tsc 7 | tsc-rs | bun check |
| VS Code | 3.75M | 54.56s | 6.84s (8.0×) | 4.20s (13.0×) | 1.62s (33.7×) |
| Sentry (frontend) | 2.11M | 58.76s | 7.90s (7.4×) | 4.46s (13.2×) | 3.14s (18.7×)* |
| Playwright | 585k | 4.48s | 0.66s (6.8×) | 0.34s (13.2×) | 0.18s (25.0×) |
| Excalidraw | 449k | 5.32s | 0.80s (6.7×) | 0.70s (7.6×) | 0.18s (29.0×) |
| TypeORM | 386k | 3.86s | 0.55s (7.0×) | 0.36s (10.7×) | 0.19s (20.0×) |
| tRPC (server package) | 209k | 1.10s | 0.16s (6.8×) | 0.09s (12.0×) | 0.12s (9.1×)* |
| Geometrisch gemiddelde | - | - | 7.1× | 11.4× | 20.9× |
Vergeleken met tsc 7 is tsc-rs 1,61× sneller en bun check 2,95× sneller. bun check is het snelst op elke app, behalve tRPC.
Opmerkingen bij de metingen:
bun check rapporteert fouten die geen enkele andere checker rapporteert (3 bij Sentry, 2 bij tRPC).
tsc-rs rapporteert 10 fouten bij VS Code en 2 bij Sentry. Deze komen exact overeen met TypeScript 7.1.0-dev.
- Metingen zijn uitgevoerd op een Apple M4 Pro (12 cores, 48 GB), macOS 26.5.1 met
hyperfine (mediaan van 5 runs).
Bekende problemen
- Monorepos: In sommige monorepos zijn bronbestanden van een workspace-pakket zowel via
node_modules als via een directe import bereikbaar. tsc-rs kan hierdoor voor meer bestanden output schrijven dan tsc en rapporteert dan TS6059 (bestand bevindt zich niet onder rootDir). In tegenstelling tot tsc is het resultaat van tsc-rs hierbij consistent per run.
- Project References (
tsc -b): Wanneer een project de output van een ander project importeert zonder een project referentie, kan tsc-rs oude of ontbrekende output lezen (TS2305 of TS2307), terwijl tsc de nieuwe output leest. Dit kan worden opgelost door de referentie toe te voegen.
- Geheugengebruik: In de editor groeit het geheugengebruik langzaam tijdens lange sessies (ongeveer 20 MiB per 1.000 edits), maar dit blijft onder het verbruik van
tsc.
- Versie-weergave:
tsc-rs --version print de TypeScript-versie die is gepoort (7.1.0-dev), niet de npm-versie.
Ontwikkeling
Structuur
crates/tsgoport: De compiler, bestaande uit crates, goportutil en goportlsproto in crates/tsgoport/parts, gebruikmakend van de lib-bestanden in crates/ts_goport/libs.
tools/tsastcodegen: Genereert crates/ts_goport/src/astdata.
tools/tsdiagnosticscodegen: Genereert crates/tsgoport/src/diagnostics/catalog.rs en crates/tsgoport/src/diag.rs.
crates/ts_wasm: De WebAssembly-build (npm/wasm).
Commando's voor ontwikkeling
Build:
./scripts/run-cargo-capped.sh build --release -p ts_goport --bins
Verificatie:
./scripts/verify.sh
De resulterende binaries zijn goport (type check) en tsgo (de Go tsgo command line).
Licentie
Het project staat onder de MIT-licentie. De poort behoudt de licenties en notices van de originele code: TypeScript (Apache-2.0) en delen van de Go standaardbibliotheek (BSD-3-Clause). Zie NOTICE.md voor details.
ts-rust (aka tsc-rs)
Motivaties
De drijfveren achter dit project zijn:
- Het testen van de mogelijkheden van LLM-modellen.
- Het creëren van een snelle TypeScript type-checker.
- Het ontwikkelen van een TypeScript-checker die met hoge prestaties in WASM kan werken.
- Memes.
Waarschuwingen
Dit is een vroege release. In alle geteste real-world projecten is er 100% compatibiliteit, waardoor het voor de overgrote meerderheid van de applicaties als een directe vervanger zou moeten werken. Raadpleeg de sectie "Bekende problemen" voor meer details.
Opmerkelijk is dat de auteur van het project zelf geen enkele regel van de gegenereerde code heeft gelezen.
Installatie
Let op: er is geen garantie dat dit in elke omgeving werkt.
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json
Ontwikkelingsproces en kosten
Het porting-proces is uitgevoerd met diverse OpenAI-modellen. In totaal is er meer dan $400.000 aan API-tokens besteed aan GPT-5.6 Sol en GPT 6 Astra. Deze modellen schreven over meerdere maanden tijd meer dan 1,3 miljoen regels Rust via /goal-loops, maar bereikten nooit meer dan 84% compatibiliteit.
Toen de auteur merkte dat de limieten van Claude Code minder snel werden verbruikt, is Opus 5.5 ingezet. Dit model produceerde binnen 10 uur een werkende v0. In tegenstelling tot de verwachting bleek Opus 5.5 niet voort te bouwen op de code van de Codex-modellen, maar volledig vanaf nul te beginnen. Het model ging verder dan Astra in een tiende van de tijd.
De uiteindelijke kosten voor de voltooiing via Claude bedroegen ongeveer $24.047 aan API-uitgaven over een periode van twee weken. Dit kwam overeen met 925% tot 983% van de wekelijkse limieten van een $200-plan.
Wat is ts-rust precies?
ts-rust is een directe poort van de native TypeScript-compiler van Microsoft die in Go is geschreven (microsoft/TypeScript, voorheen typescript-go). Het behoudt de algoritmen en het gedrag van de Go-versie en hanteert dezelfde command-line (tsc), language server en API.
Installatie en platformen
De installatie verloopt via npm:
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json
tsc-rs accepteert dezelfde opties als tsc. De npm-pakketnaam is tsc-rs om conflicten met het officiële typescript-pakket te voorkomen. Elke release bevat ook een standalone archief per platform (het tsc-binair bestand met de bijbehorende lib-bestanden).
Beschikbare platformen:
- Linux x64 (statisch, elke distributie)
- macOS arm64
- Windows en Linux arm64 zijn momenteel nog niet beschikbaar.
Voor gebruik in VS Code kan worden verwezen naar de README van het npm-pakket.
Effect-diagnostiek
tsc-rs heeft de Effect language service diagnostics (codes 377xxx) ingebouwd, waardoor een Effect-project geen tweede compiler nodig heeft. Deze diagnostics komen voort uit dezelfde check als de TypeScript-diagnostics en worden ook door de language server getoond. Ze worden alleen uitgevoerd wanneer de tsconfig de plugin bevat, net als bij @effect/language-service:
{
"compilerOptions": {
"plugins": [{ "name": "@effect/language-service" }]
}
}
De regels, opties en @effect-diagnostics commentaren zijn een poort van Effect-TS/tsgo 0.46.1. De editor-functies van de language service (zoals quick fixes, refactors, hover en completions) zijn niet gepoort.
Status en compatibiliteit
De poort is vastgepind op één upstream revisie: microsoft/TypeScript 673a5f17d713 (2026-09-29, TypeScript 7.1.0-dev; zie UPSTREAM.md) en is vergeleken met de Go-versie van diezelfde revisie. Voor vergelijkingen dient typescript@7.1.0-dev.20260929.1 te worden gebruikt, en niet 7.0.x of @typescript/native-preview.
Resultaten
- Identieke output: TanStack Query core en Hono vertonen diagnostiek die identiek is aan die van Go. Alle 181.711 gepoorte Go-tests zijn geslaagd. De antwoorden van de language server en API komen overeen met Go in de oracle-testsets.
- Snelheid: Bij 60 open-source projecten neemt de type-checking ongeveer de helft van de tijd in beslag vergeleken met Go (geometrisch gemiddelde). De preview-pakketten zijn gebouwd in CI zonder PGO en BOLT, waardoor ze langzamer zijn dan de gemeten build.
- Real-world projecten: Bij 120 open-source repo's verschilt de output van de command-line alleen op de punten die onder "Bekende problemen" worden genoemd en waar de output van Go zelf per run verschilt.
Benchmarks
Benchmark: T3 Code
Volledige type-check van T3 Code, vergeleken met tsc 6, tsc 7 en de nieuwe bun check in Bun. T3 Code gebruikt Effect, waardoor er twee scenario's zijn.
Zonder Effect-diagnostics
| Checker | Tijd | vs tsc 6 | vs tsc 7 | bun check |
| bun check | 4.07s | 15.4× | 3.95× sneller | - |
| tsc-rs | 7.25s | 8.6× | 2.22× sneller | - |
| tsc 7 | 16.10s | 3.9× | baseline | - |
| tsc 6 | 62.63s | baseline | 3.89× langzamer | - |
Met Effect-diagnostics
| Checker | Tijd | vs tsc 6 | vs tsc 7 + Effect |
| tsc-rs (Effect ingebouwd) | 11.13s | 12.5× | 1.89× sneller |
| tsc 7 + @effect/tsgo | 21.07s | 6.6× | baseline |
| bun check, dan effect-tsgo diag. | 37.60s | 3.7× | 1.78× langzamer |
| tsc 6 + @effect/language-service | 138.63s | baseline | 6.58× langzamer |
bun check is het snelst wanneer Effect-diagnostics niet nodig zijn. Echter, voor Effect-projecten heeft tsc-rs het voordeel dat deze diagnostics in één check worden meegenomen.
Benchmark: Real-world apps
Volledige type-check van zes open-source apps. De multiplier geeft de versnelling ten opzichte van tsc 6 weer.
| App | Regels gecheckt | tsc 6 | tsc 7 | tsc-rs | bun check |
| VS Code | 3.75M | 54.56s | 6.84s (8.0×) | 4.20s (13.0×) | 1.62s (33.7×) |
| Sentry (frontend) | 2.11M | 58.76s | 7.90s (7.4×) | 4.46s (13.2×) | 3.14s (18.7×)* |
| Playwright | 585k | 4.48s | 0.66s (6.8×) | 0.34s (13.2×) | 0.18s (25.0×) |
| Excalidraw | 449k | 5.32s | 0.80s (6.7×) | 0.70s (7.6×) | 0.18s (29.0×) |
| TypeORM | 386k | 3.86s | 0.55s (7.0×) | 0.36s (10.7×) | 0.19s (20.0×) |
| tRPC (server package) | 209k | 1.10s | 0.16s (6.8×) | 0.09s (12.0×) | 0.12s (9.1×)* |
| Geometrisch gemiddelde | - | - | 7.1× | 11.4× | 20.9× |
Vergeleken met tsc 7 is tsc-rs 1,61× sneller en bun check 2,95× sneller. bun check is het snelst op elke app, behalve tRPC.
Opmerkingen bij de metingen:
bun check rapporteert fouten die geen enkele andere checker rapporteert (3 bij Sentry, 2 bij tRPC).
tsc-rs rapporteert 10 fouten bij VS Code en 2 bij Sentry. Deze komen exact overeen met TypeScript 7.1.0-dev.
- Metingen zijn uitgevoerd op een Apple M4 Pro (12 cores, 48 GB), macOS 26.5.1 met
hyperfine (mediaan van 5 runs).
Bekende problemen
- Monorepos: In sommige monorepos zijn bronbestanden van een workspace-pakket zowel via
node_modules als via een directe import bereikbaar. tsc-rs kan hierdoor voor meer bestanden output schrijven dan tsc en rapporteert dan TS6059 (bestand bevindt zich niet onder rootDir). In tegenstelling tot tsc is het resultaat van tsc-rs hierbij consistent per run.
- Project References (
tsc -b): Wanneer een project de output van een ander project importeert zonder een project referentie, kan tsc-rs oude of ontbrekende output lezen (TS2305 of TS2307), terwijl tsc de nieuwe output leest. Dit kan worden opgelost door de referentie toe te voegen.
- Geheugengebruik: In de editor groeit het geheugengebruik langzaam tijdens lange sessies (ongeveer 20 MiB per 1.000 edits), maar dit blijft onder het verbruik van
tsc.
- Versie-weergave:
tsc-rs --version print de TypeScript-versie die is gepoort (7.1.0-dev), niet de npm-versie.
Ontwikkeling
Structuur
crates/tsgoport: De compiler, bestaande uit crates, goportutil en goportlsproto in crates/tsgoport/parts, gebruikmakend van de lib-bestanden in crates/ts_goport/libs.
tools/tsastcodegen: Genereert crates/ts_goport/src/astdata.
tools/tsdiagnosticscodegen: Genereert crates/tsgoport/src/diagnostics/catalog.rs en crates/tsgoport/src/diag.rs.
crates/ts_wasm: De WebAssembly-build (npm/wasm).
Commando's voor ontwikkeling
Build:
./scripts/run-cargo-capped.sh build --release -p ts_goport --bins
Verificatie:
./scripts/verify.sh
De resulterende binaries zijn goport (type check) en tsgo (de Go tsgo command line).
Licentie
Het project staat onder de MIT-licentie. De poort behoudt de licenties en notices van de originele code: TypeScript (Apache-2.0) en delen van de Go standaardbibliotheek (BSD-3-Clause). Zie NOTICE.md voor details.