59ms: anatomy of a dev cold start
(The native Rust runtime is an experimental track — v0.1's june dev is the
Bun/Node host. These numbers are why the track exists.)
We benchmarked our Rust dev runtime's cold start — process spawn to first HTML byte — and then took it apart. Three cuts, all measured (medians, reproducible scripts in the repo):
| cut | before | after |
|---|---|---|
| listen-early (dev scripts off the critical path) | ~100ms blocking | 3ms to listening |
| V8 startup snapshot (Web globals baked into the heap) | 24.4ms | 5µs |
| React vendors in the snapshot's module map | 98ms | 18ms |
End to end: 244ms → 59ms on a hello-world page, with the remaining budget split between process spawn (~10ms) and first-render JIT (~30ms) — the latter is V8 physics for unbundled dev, and the bundled production path has already measured 22ms.
The honest caveats: one dev machine, medians not marketing minimums, and
next dev/Vite comparisons are class-level, not same-app shootouts yet.
Benchmark rigor is its own roadmap item.
One number we did not expect: rebuilding a worker isolate after a file edit dropped from 137ms to 16ms, which is what makes push-based HMR (the server re-renders and pushes the diff over the live channel) feel instant.