Skip to content
rshono

Benchmarks

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

Load & build
MetricrshonoNext.jsTanStack Start
Initial payload, prerendered pagebrotli, document + JS + CSS60.4 kB162.3 kB98.8 kB
Cold production buildmedian of the trials533ms3.50s3.02s
Cold dev server startto a served /interactive508ms1.53s2.33s
Spawn to first responsefresh process216ms330ms528ms
Throughput
MetricrshonoNext.jsTanStack Start
/ — prerenderedserved from disk30,922 rps4,932 rps3,971 rps
/ssr — 100 rowsrendered per request566 rps276 rps253 rps
/interactivethree client components1,995 rps542 rps933 rps
/api/healthno React on the path25,933 rps3,361 rps12,037 rps
Memory
MetricrshonoNext.jsTanStack Start
IdleRSS before any load90.63 MB95.42 MB160.08 MB
After loadRSS high-water mark, 256 MB old space173.36 MB197.70 MB219.58 MB
Churn per 1k requestsgrowth ÷ requests served178.2 kB1.40 MB442.6 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.