Vercel Labs hat mit Scriptc einen Compiler vorgestellt, der gewöhnlichen TypeScript-Code in eigenständige native Programme übersetzt. Kein Node, keine V8, keine JavaScript-Engine im fertigen Binary. Für schlanke Kommandozeilen-Tools klingt das nach einem Sprung, doch das Versprechen gilt nur für einen Teil des Codes.
drweb.de als bevorzugte Quelle auf Google hinzufügenQualitätsgeprüfte Inhalte direkt in Google News & DiscoverJetzt hinzufügenEin Hallo-Welt-Programm aus Scriptc wiegt rund 320 Kilobyte und startet in etwa vier Millisekunden. Dieselbe Ausgabe zieht unter Node.js eine Laufzeitumgebung von rund 120 Megabyte nach sich.[1] Genau diese Lücke will der neue TypeScript-Compiler von Vercel Labs schließen.
Das Wichtigste in Kürze
- Scriptc von Vercel Labs übersetzt TypeScript direkt in native Binaries, ohne eine JavaScript-Engine mitzuliefern.
- Ein statisch kompiliertes Programm ist rund 320 Kilobyte groß und startet in etwa vier Millisekunden.
- Für nicht statisch übersetzbaren Code, etwa untypisierte npm-Pakete, bettet der Modus
--dynamicdie Engine quickjs-ng mit rund 620 Kilobyte doch wieder ein. - Das Projekt steht unter der Apache-2.0-Lizenz, läuft zuerst auf macOS und gilt ausdrücklich als Experiment.
Was macht Scriptc anders als Node und Bun?

Drei Stufen entscheiden bei Scriptc über das Schicksal jeder Zeile. Der Compiler nutzt den echten TypeScript-Type-Checker, senkt den Code auf eine Zwischenform ab und lässt daraus über C oder LLVM ein natives Programm bauen.
Statischer Kern: Klassen, Closures, async/await und Teile der Node-Standardbibliothek landen ohne Engine direkt im Binary. Vercel Labs verspricht, dass sich ein so kompiliertes Programm Byte für Byte wie unter Node verhält.
Bauzeit-Rechnen: Mit comptime() lässt sich Code schon beim Kompilieren ausführen und das Ergebnis fest ins Binary schreiben. Das nimmt dem fertigen Programm Arbeit ab, weil es den Wert zur Laufzeit nicht mehr selbst berechnen muss.
Wo bröckelt das Versprechen ohne JavaScript-Engine?
Der Haken: Sobald echter Projektcode ins Spiel kommt, wird aus der klaren Ansage ein Vielleicht. Untypisierte Abhängigkeiten und jeder mit any markierte Code lassen sich nicht statisch übersetzen.
Die Engine kehrt zurück: Für genau diese Fälle schaltet der Modus --dynamic eine eingebettete JavaScript-Engine zu, quickjs-ng mit rund 620 Kilobyte.[2] Das Binary wächst mit eingebetteten Abhängigkeiten schnell auf etwa drei Megabyte, und die Zusage einer Engine-freien Datei gilt dann nicht mehr.
Frühes Stadium: Scriptc ist erst wenige Tage alt, läuft vorrangig auf macOS und erzeugt andere Plattformen nur per Cross-Compilation. Vercel Labs führt das Projekt als Experiment, nicht als unterstütztes Produkt.
Scriptc ist kein Node-Ersatz, sondern ein scharfes Spezialwerkzeug. Für ein kleines Kommandozeilen-Tool ist es ein Gewinn, für die typische App mit hundert Abhängigkeiten noch lange nicht.
— Markus Seyfferth, Chefredakteur Dr. Web
Schlank gegen Standard: gleiche Ausgabe, andere Größe
Was heißt das für Entwicklerteams im DACH-Raum?
Ein Muster: Scriptc steht nicht allein. Die TypeScript-Werkzeugkette wird gerade auf Tempo getrimmt, vom neuen Go-Compiler in TypeScript 7 bis zur in elf Tagen nach Rust portierten Laufzeit Bun.
Andere Baustelle: Anders als diese Projekte setzt Scriptc nicht am Type-Checker an, sondern am fertigen Programm. Das passt zum Trend schlanker Frontends, wie ihn zuletzt der Umstieg eines Forums von React zurück auf htmx gezeigt hat.
Konkreter Nutzen: Ein Blick lohnt vor allem bei kleinen Kommandozeilen-Werkzeugen und bei Serverless-Funktionen, wo ein 320-Kilobyte-Start jede Node-Kaltstartzeit unterbietet. Bei der Wahl zwischen nativem, hybridem und plattformübergreifendem Ansatz hilft unser Tech-Stack-Vergleich für Mobile-Apps weiter.
Der Rat: Für Produktionscode ist es zu früh. Testen Sie Scriptc an einem internen Hilfsprogramm und prüfen Sie im Coverage-Report, wie viel Ihres Codes wirklich statisch kompiliert, bevor Sie mehr darauf aufbauen.
Quellen
[1] Vercel Labs: „scriptc — TypeScript-to-Native Compiler“
[2] Vercel Labs: „scriptc“ auf GitHub
Mehr Newshunger?
- TypeScript 7 ist da: Der Go-Compiler beschleunigt Builds um das Zwölffache
- Bun in Rust neu geschrieben: Wie eine KI in 11 Tagen ein JavaScript-Runtime portierte
- htmx statt React: Warum ein Forum sein Frontend zurückbaut
- Firefox im Browser-Tab: Puter Labs kompiliert die Gecko-Engine nach WebAssembly
- PGSimCity: Postgres als begehbare 3D-Stadt erklärt
- libsm64: Mario 64 als Programmbibliothek für eigene Engines