performance

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.

  1. Framework install size — 6.5 MB vs 358.9 MB55× smaller
  2. Production build6–32× faster
  3. First page, cold5.3–16× faster
  4. Client JS incl. deferred (gzip)2.2–14× less
  5. Warm request (dev)5.3–13× faster
  6. Warm request (prod)1.9–6.9× faster
  7. HMR save → visible1.3–5.9× faster
  8. Dev server ready3.6–5.4× faster
  9. 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).

Category
Run

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.

pnextNext.js

hello-worldA single page.

Dev server ready
65.0 ms279.0 ms
4.29×
Dev first page HTML
81.4 ms1268.4 ms
15.58×
Dev warm request (p50 of 7)
1.7 ms17.1 ms
10.23×
HMR save → visible
10.3 ms61.3 ms
5.93×
Production build cold (wall)
313.4 ms5098.8 ms
16.27×
Production build warm (wall)
345.1 ms1964.4 ms
5.69×
Prod start (ready)
72.0 ms133.3 ms
1.85×
Prod warm request (p50 of 7)
0.4 ms1.6 ms
4.56×
Dev server RSS (ready + 7 warm)
112.5 MB476.7 MB
4.24×
Prod build peak RSS
125.7 MB1081.4 MB
8.60×
Prod server RSS (ready + 7 warm)
57.8 MB92.4 MB
1.60×
Framework install size
6.5 MB358.9 MB
54.89×
First-page client JS incl. deferred (gzip)
39.33 KB130.38 KB
3.32×
First-paint client JS (gzip)
6.54 KB130.38 KB
19.93×
First-page client JS (raw)
15.00 KB442.50 KB
29.51×
Deferred client JS, idle or on demand (gzip)
32.78 KB0.00 KB
0.00×
First-page JS files
35
1.67×
Zero-island route client JS
15.00 KB442.50 KB
29.51×

ssrA server-rendered site.

Dev server ready
68.0 ms324.1 ms
4.77×
Dev first page HTML
140.4 ms1488.4 ms
10.60×
Dev warm request (p50 of 7)
4.7 ms33.2 ms
7.09×
HMR save → visible
18.7 ms92.5 ms
4.94×
Production build cold (wall)
435.8 ms5569.3 ms
12.78×
Production build warm (wall)
422.9 ms2330.5 ms
5.51×
Prod start (ready)
73.9 ms152.2 ms
2.06×
Prod warm request (p50 of 7)
0.4 ms1.6 ms
4.18×
Dev server RSS (ready + 7 warm)
139.2 MB486.0 MB
3.49×
Prod build peak RSS
134.0 MB1103.3 MB
8.23×
Prod server RSS (ready + 7 warm)
57.8 MB92.4 MB
1.60×
Framework install size
6.5 MB358.9 MB
54.89×
First-page client JS incl. deferred (gzip)
45.89 KB130.63 KB
2.85×
First-paint client JS (gzip)
13.18 KB130.63 KB
9.91×
First-page client JS (raw)
31.98 KB442.81 KB
13.85×
Deferred client JS, idle or on demand (gzip)
32.70 KB0.00 KB
0.00×
First-page JS files
46
1.50×
Zero-island route client JS
15.58 KB442.50 KB
28.40×

dashboardA mid-size admin app — 30 routes, 18 client islands.

Dev server ready
87.0 ms316.4 ms
3.64×
Dev first page HTML
406.0 ms2148.6 ms
5.29×
Dev warm request (p50 of 7)
9.5 ms50.5 ms
5.31×
HMR save → visible
100.7 ms133.3 ms
1.32×
Production build cold (wall)
1280.0 ms7682.9 ms
6.00×
Production build warm (wall)
1249.9 ms2303.9 ms
1.84×
Prod start (ready)
73.8 ms140.4 ms
1.90×
Prod warm request (p50 of 7)
6.0 ms11.5 ms
1.92×
Dev server RSS (ready + 7 warm)
223.6 MB701.2 MB
3.14×
Prod build peak RSS
228.0 MB1295.3 MB
5.68×
Prod server RSS (ready + 7 warm)
90.7 MB120.2 MB
1.33×
Framework install size
6.5 MB358.9 MB
54.89×
First-page client JS incl. deferred (gzip)
61.99 KB134.58 KB
2.17×
First-paint client JS (gzip)
25.92 KB134.58 KB
5.19×
First-page client JS (raw)
111.51 KB503.60 KB
4.52×
Deferred client JS, idle or on demand (gzip)
36.07 KB0.00 KB
0.00×
First-page JS files
59
1.80×

visibleA landing page whose one island loads when it scrolls into view.

Dev server ready
56.5 ms304.0 ms
5.38×
Dev first page HTML
94.4 ms1310.8 ms
13.89×
Dev warm request (p50 of 7)
1.7 ms22.8 ms
13.34×
HMR save → visible
13.6 ms75.6 ms
5.57×
Production build cold (wall)
150.7 ms4799.7 ms
31.84×
Production build warm (wall)
161.7 ms2056.6 ms
12.72×
Prod start (ready)
22.6 ms134.5 ms
5.94×
Prod warm request (p50 of 7)
0.2 ms1.5 ms
6.86×
Dev server RSS (ready + 7 warm)
113.6 MB488.5 MB
4.30×
Prod build peak RSS
95.9 MB1155.1 MB
12.05×
Prod server RSS (ready + 7 warm)
49.4 MB92.8 MB
1.88×
Framework install size
6.5 MB358.9 MB
54.89×
First-page client JS incl. deferred (gzip)
9.28 KB132.80 KB
14.31×
First-paint client JS (gzip)
2.88 KB132.32 KB
45.99×
First-page client JS (raw)
6.98 KB447.18 KB
64.05×
Deferred client JS, idle or on demand (gzip)
6.41 KB0.48 KB
0.07×
First-page JS files
16
6.00×

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.

PageFirst paint rawGzipBrotliDeferred gzip
server page0 B0 B0 B0 B
server page + Link2.46 KB1.34 KB1.13 KB20.84 KB
island (Preact)21.45 KB8.50 KB7.72 KB0 B
island (compat.react)39.16 KB14.99 KB13.58 KB0 B
island (compat.next)31.93 KB13.07 KB11.80 KB32.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.