lunx.docs
DocsGuidesBenchmarks

Benchmarks

The same React + TypeScript app built by every tool, installed from npm, in one session. HMR is the time from saving App.tsx to Chromium showing the change.

lunx 1.2.0

Small app

ToolDev bootHMRBuild (cold)Build (warm)JS (gzip)
lunx248 ms30 ms369 ms385 ms66.2 KB
Vite 8409 ms40 ms663 ms487 ms66.4 KB
Rsbuild 2432 ms86 ms511 ms487 ms67.6 KB
Rspack 2376 ms208 ms386 ms370 ms67.4 KB
Parcel1449 ms35 ms1693 ms1761 ms68.0 KB
webpack1578 ms275 ms4313 ms4066 ms68.7 KB
esbuild––66 ms65 ms67.3 KB
Bun––41 ms46 ms64.0 KB

Large app: 2,000 components

ToolDev bootHMRBuild (cold)Build (warm)JS (gzip)
lunx243 ms151 ms583 ms547 ms83.4 KB
Vite 8389 ms161 ms829 ms651 ms83.7 KB
Rsbuild 2944 ms440 ms777 ms754 ms88.5 KB
Rspack 2700 ms656 ms804 ms878 ms89.3 KB
Parcel4523 ms177 ms5042 ms5060 ms88.9 KB
webpack4268 ms1113 ms8763 ms8715 ms87.3 KB
esbuild––145 ms144 ms85.2 KB
Bun––106 ms82 ms80.5 KB

An unchanged lunx build of the large app takes about 150 ms with the build cache.

Where lunx is behind

  • esbuild and Bun bundle several times faster, without a dev server, HMR or framework support.
  • Bun's JS is 3–4% smaller: it removes more unused code inside React's CommonJS files.
  • Rspack's warm build of the small app is 15 ms faster, within run-to-run noise.
Run it yourself
In the lunx repository: npx tsx scripts/bench-arena.mjs --hmr [--scale 2000]. Results are written to reports/BENCH_ARENA*.json. Compare ratios, not absolute times; they depend on the machine.