Skip to content
rshono

Benchmarks

One app, built three ways to the same spec. Measured on Apple M1 · 8 cores, 2026-08-04.

Load & build
MetricrshonoNext.jsTanStack Start
Initial payload, prerendered pagebrotli, document + JS + CSS60.2 kB162.3 kB98.8 kB
Cold production buildmedian of the trials429ms3.17s3.16s
Cold dev server startto a served /interactive504ms1.60s2.25s
Spawn to first responsefresh process268ms330ms529ms
Throughput
MetricrshonoNext.jsTanStack Start
/ — prerenderedserved from disk35,103 rps6,414 rps4,962 rps
/ssr — 100 rowsrendered per request354 rps322 rps287 rps
/interactivethree client components1,375 rps676 rps975 rps
/api/healthno React on the path30,334 rps4,524 rps12,597 rps
Memory
MetricrshonoNext.jsTanStack Start
IdleRSS before any load73.47 MB95.16 MB159.55 MB
After loadRSS high-water mark, 256 MB old space157.22 MB199.56 MB209.80 MB
Churn per 1k requestsgrowth ÷ requests served159.6 kB1.09 MB341.4 kB

One spec file says what each app must do, and the payload runner asserts it — a route that stopped rendering the same thing fails the check rather than quietly reporting a smaller number.

pnpm --filter @rshono/benchmarks setup:apps
pnpm --filter @rshono/benchmarks bench

packages/benchmarks has the method and what it deliberately does not measure.