Nothing boots
zlow --version: 0.9 ms. A one-file build: 1.0 ms. Node needs 18 ms just to reach your first line. No JavaScript in the compile path to warm up, JIT, or garbage-collect.
Native binary · TypeScript 5.9 syntax
zlow compiles zod in 11 ms. tsc takes 1.6 seconds. One native binary. Zero warm-up.
$ zlow build src/ --out-dir dist/
241 files · 11 ms · tsc: 1,591 ms
$ zlow check src/
warning src/parse.ts:88:3: unreachable code
241 files checked in 41 ms
build
Types in, JavaScript out. Faster than every transpiler we could find.
tsc --noCheck on zod, 75× on rxjsbun--watch rebuilds in 0.6 ms. Faster than your editor redrawscheck
Eight rules, validated against tsc's own 13,420-file suite. 8× faster than tsgo, 46× faster than tsc.
zero false positivestsconfig.json, strictNullChecks includedbundle (in progress)
One ES module or split chunks. Then proved: the bundle is loaded and every export diffed against esbuild's.
0.76× gzipped@__PURE__declarations
isolatedDeclarations emit, rolled up across the whole graph into a single file. Private names stripped.
anytsc --listFileszero crashes$ zlow declarations src/index.ts --rollup
// dist/index.d.ts
export declare function parse(src: string): Ast;
export declare const version: string;
$ zlow bundle src/index.ts --tree-shake
3 chunks · 156 KB · 0.96× esbuild
api
A native addon, loaded straight into the caller. No spawn, no pipe, no round trip.
11× faster than swc, 1.5× faster than oxctransformSync: one import, no configimport { transformSync } from 'zlow';
const { code } = transformSync(
'const x: number = 1;',
{ loader: 'ts' },
);
// route(): 'addon', 1.39 µs/call, no spawn
Interleaved rounds, median of seven, latest everything. The harness refuses to print a ratio unless every tool emitted the same file count. No winning by doing less work.
tsc 5.9.2 · bun 1.3.1 · esbuild 0.28.1 · tsgo 7.0.0-dev.20260707.2 · oxc-transform 0.143.0 · swc 1.15.47
| Command | rxjs · 251 files, 795 KB | zod · 241 files, 1.7 MB |
|---|---|---|
tsc --noCheck | 754 ms | 1,591 ms |
| esbuild | 49 ms | 54 ms |
bun (Bun.Transpiler) | 35 ms | 56 ms |
zlow build | 10 ms | 11 ms |
Source in, code out, no file I/O. oxc and swc ship no comparable CLI, so this is their fair arena.
| Library | rxjs, in memory | Throughput | One 28-byte file |
|---|---|---|---|
| zlow (native addon) | 4.8 ms | 170 MB/s | 1.39 µs |
| oxc-transform | 7.0 ms | 116 MB/s | 2.02 µs |
| swc | 16.3 ms | 50 MB/s | 15.79 µs |
tsc transpileModule | 205 ms | 4 MB/s | n/a |
Three properties you can verify from the outside.
zlow --version: 0.9 ms. A one-file build: 1.0 ms. Node needs 18 ms just to reach your first line. No JavaScript in the compile path to warm up, JIT, or garbage-collect.
build and check are separate commands, on purpose. Transpile speed can never regress as the checker grows. Type-check in CI; build in milliseconds everywhere else.
Types are removed in place, never rebuilt from a parse tree. Every surviving byte stays where it was, so stack traces point at your source and the common case needs no source map at all.
One platform binary: linux, macOS, Windows, x64 and arm64. npm downloads only yours.
npm install --save-dev zlowzlow build src/ --out-dir dist/ # parallel + incremental
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
zlow tokens|ast|symbols|graph file.ts # inspect any stageYour tsconfig.json already works, JSONC and extends included. One rule governs everything: 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. Every line has a number behind it.
tsc --listFiles, incremental rebuilds, watch mode, parallel builds..d.ts rollup. rxjs lands at 0.96× esbuild with no minifier involved.--narrowing: typeof, truthiness, guards, switches, discriminated unions, instanceof, in and more. Closes 84 of the 109 false positives. 'possibly null' is at zero across tsc's suite; 'possibly undefined' carries 7, which is why it is still a flag.Full tsc parity is a non-goal for v0. Build speed is the product, and it is already here.
One install, one command. If it is not faster on your code, that is a bug. File it.
Pre-1.0. Every figure is a reproducible measurement. Run the benchmarks yourself.