Vercel Labs Ships scriptc, a TypeScript-to-Native Compiler That Leaves the JavaScript Engine Behind
InfoQ Homepage News Vercel Labs Ships scriptc, a TypeScript-to-Native Compiler That Leaves the JavaScript Engine Behind
Web Development When AI Accelerates Development, Can Your CI Pipeline Keep Up? (Webinar Oct 8th)Vercel Labs Ships scriptc, a TypeScript-to-Native Compiler That Leaves the JavaScript Engine Behind
Sep 25, 2026 3 min read
by
Follow us on
Youtube232K Followers Linkedin26K Followers InstagramNew RSS19K Readers X57.1k Followers Facebook21K Likes BlueskyNew Listen to this article - 0:00 Audio ready to play Your browser does not support the audio element. 0:00 0:00Vercel Labs has released scriptc, an experimental Apache 2.0 licensed compiler that turns ordinary TypeScript into small native executables with no Node, V8 and no JavaScript engine in the binary.
The repository was created on 22 July 2026 and has since gathered around 4.9k stars. scriptc uses the real TypeScript compiler for parsing and type checking, lowers programs to a typed IR, then emits readable C, LLVM IR, assembly, objects, native executables or WebAssembly via WASI Preview 1.
Every construct lands in one of three tiers: compiled statically by default, run dynamically inside an embedded quickjs-ng engine of roughly 620KB when --dynamic is passed for npm packages and any typed code, or rejected at compile time with an SC code and a rewrite hint.
A benchmark of scriptc 0.0.16 against Bun 1.3.12 and Node 24.18.0 recorded median CLI startup of 1.78ms versus 21.29ms for Bun and 61.78ms for Node, with idle memory of 1.9MiB for a framework free node:http server. The same tests found Hono required --dynamic, pushing 62% of the server into QuickJS and cutting throughput to 18.4k requests per second against Bun's 70.5k.
On Hacker News, one developer reported their results running about 7.5 times slower than Node 24:
Looking at the byte-array results (best case): scriptc is about 7.5x slower than Node 24, even after Claude tried making some scriptc-specific optimizations. But the executable starts up 12x faster (1.5 ms vs 18.6 ms), uses 72x less memory (2.5 MiB vs 181 MiB), and is a single 370 KB executable with no runtime dependencies.
Filip Pizlo argued that using floats for all numbers and deferring integer inference skips "half the problem of fast JS", and that leaning on QuickJS is a poor fit for a performance project, since any is common enough that real programs will keep falling into the island.
Simon Willison noted that coding agents landed 918,000 lines in a single week, and also added that building small, fast binaries without writing C or Rust "seems like a valuable capability".
One developer found coverage produced hundreds of errors on every local project:
Despite the hate it is receiving, I thought lets test it at least, and tried it to any project that I have locally. For every single of them the coverage generates hundreds of errors and so it is basically useless. I get that I can write a project from scratch, don't use any third party library, and it'll compile to binary, but then why should I not use Rust, Go, Zig, D, C, V, Ada, C++, Nim, Swift, Kotlin Native, Haskell... literally anything designed to be compiled and compiled well?
A recurring worry is longevity, with commenters pointing at Vercel's zerolang, which stopped receiving commits weeks after launch. Remo Jansen's attempt to compile the TypeScript 6 compiler itself failed at an internal compiler error, though he measured a 3.6ms cold start against Node's 48.9ms and a much slower 2.33s on compute.
The compiler needs Node.js 24 or newer, installs with npm install -g scriptc, and the limitations page documents deliberate divergences worth reading first: strings are stored as UTF-8, memory is reference counted rather than garbage collected, Object.keys reports declaration order, and process.argv[0] is "scriptc". Dependency behaviour is covered in the npm dependencies guide, including the experimental --npm-static flag that compiles named packages out of the island.
scriptc targets macOS, Linux, Windows and WASI Preview 1, is enforced by differential tests that compare stdout, stderr and exit codes byte for byte against Node, and remains explicitly experimental. Documentation is at scriptc.dev.
About the Author
Daniel Curtis
Show moreShow lessThis content is in the Web Development topic
Related Topics:
-
Related Editorial
-
-
AI's Physical Constraints: How AI Rewired the Data Center
Related Sponsors
-
-
Related Sponsor
PostgreSQL Built for Time-Series Scale
Handle massive time-series data with PostgreSQL, without sacrificing performance. Discover how Tiger Data delivers high-speed ingest, fast queries, and scalable storage. Learn More.
The InfoQ Newsletter
A round-up of last week’s content on InfoQ sent out every Tuesday. Join a community of over 250,000 senior developers. View an example