Native binary · TypeScript 5.9 syntax

TypeScript,
at native speed.

Transpile, bundle, roll up declarations and type-check — one binary, no Node.js in the hot path.

zsh
$ zlow build src/ --out-dir dist/
241 files · 11 ms · tsc: 1,591 ms

$ zlow check src/
241 files checked in 41 ms

11 ms

zod, transpiled

170 MB/s

in process

0.9 ms

startup

3,181

tsc agrees

Measured, not claimed

Interleaved rounds, median of seven. The harness refuses to print a ratio unless every tool emitted the same file count — no winning by doing less work.

zod: 241 files, 1.7 MB

zlow
11 ms
esbuild
54 ms
bun
56 ms
tsc
1,591 ms
10 ms100 ms1 s
Square-root scale: 11 ms and 1,591 ms share no readable linear axis. All four emitted 241 of 241 files.
Commandrxjs · 251 fileszod · 241 files
tsc --noCheck754 ms1,591 ms
esbuild49 ms54 ms
bun (Bun.Transpiler)35 ms56 ms
zlow build10 ms11 ms

tsc 5.9.2 · esbuild 0.28.1 · bun 1.3.1 · tsgo 7.0.0-dev · oxc-transform 0.143.0 · swc 1.15.47. In process, per file: zlow 1.39 µs, oxc 2.02 µs, swc 15.79 µs.

Four commands

build

Erase, do not re-print

Types are removed in place, so every surviving byte keeps its offset and stack traces point at your source. 145× tsc, 4.9× esbuild.

check

Checking never blocks building

Two commands, on purpose: transpile speed cannot regress as the checker grows. 41 ms on zod — 8× tsgo, 46× tsc.

bundle

Verified by loading it

One ES module or split chunks, then every export diffed against esbuild’s by running both. rxjs lands at 0.96× its size with no minifier.

api

1.39 µs per file, in your process

A native addon rather than a spawn: 1.5× oxc, 11× swc. Pipe and spawn fallbacks sit behind it, so it never simply fails.

One install. No config.

Six platform binaries; npm downloads only yours. Your tsconfig.json already works.

npm install --save-dev zlow
zlow build  src/ --out-dir dist/ --watch
zlow check  src/                       # type-check only
zlow bundle src/index.ts --tree-shake
zlow declarations src/index.ts --rollup

One rule governs the lot: no silent wrongness. An option zlow cannot honour is a hard error with nothing written, never output that merely looks right.

Pre-1.0, and specific about it

Transpile, source maps, declarations, project plumbing and the checker ship today; bundling is in progress. Full tsc parity is a non-goal for v0 — build speed is the product.