Benchmarks
The same fixture source runs under both frameworks and bun bench measures them side by side. Every number below is one full run's output — no estimates, no best-of cherry-picking.
- Framework install size — 6.5 MB vs 358.9 MB55× smaller
- Production build6–32× faster
- First page, cold5.3–16× faster
- Client JS incl. deferred (gzip)2.2–14× less
- Warm request (dev)5.3–13× faster
- Warm request (prod)1.9–6.9× faster
- HMR save → visible1.3–5.9× faster
- Dev server ready3.6–5.4× faster
- Dev server memory3.1–4.3× less
Ranges span all three fixtures. Absolute numbers per fixture are below. pnext trails on two metrics: dev warm requests on the larger fixtures, and production idle memory (~112 MB vs Next's ~86–91 MB, Bun's runtime baseline).
Payload metrics are measured on the built output, so they are neither a cold nor a warm run. Set Run back to All to see them.
hello-worldA single page.
ssrA server-rendered site.
dashboardA mid-size admin app — 30 routes, 18 client islands.
visibleA landing page whose one island loads when it scrolls into view.
Ratio is Next.js ÷ pnext, so above 1.00× means pnext is ahead. Lower is better for every metric here.
Client runtime bundles
What a minimal page on each rung downloads at first paint, and what it can fetch after: the navigation runtime on idle when the page has a Link, the rest on idle or on demand.
| Page | First paint raw | Gzip | Brotli | Deferred gzip |
|---|---|---|---|---|
| server page | 0 B | 0 B | 0 B | 0 B |
| server page + Link | 2.46 KB | 1.34 KB | 1.13 KB | 20.84 KB |
| island (Preact) | 21.45 KB | 8.50 KB | 7.72 KB | 0 B |
| island (compat.react) | 39.16 KB | 14.99 KB | 13.58 KB | 0 B |
| island (compat.next) | 31.93 KB | 13.07 KB | 11.80 KB | 32.68 KB |
Method
- Run of 2026-11-03 on Linux 6.6.141 (x64), AMD EPYC x4. Bun 1.4.0, Next.js 16.3.4. 5 per metric (first discarded), medians reported.
- Every fixture runs unmodified on both frameworks (via
compat.next), same app from the same source. - Cold starts include on-demand compilation; memory is measured across the whole process tree at a fixed point, never sampled arbitrarily.
- Full details, targets, and the exact commands are in the performance reference.