Web framework benchmarks

Framework SSR capacity

024.6k49.1k
responses/s
Bar: median · box: middle 50% of three runs · whiskers: min–max
17 roster entries not measured here
Method & data

Production HTTP routing → complete SSR HTML. Shared 32-card catalog with escaping, branches, lists and a request-specific value. Framework shells may differ. No full-document cache, database, network I/O or hydration timing.

3 rotated independent production server processes per phase kind. Capacity: 64 connections. Equal-load latency: 50 scheduled requests/s. Every response is validated; generator-limited phases are rejected.

Recorded versions
Proa
Proa 7ffb8a19ecfa / Rust / Tokio
Exact
Exact 94b8671f70fe / Bun 1.4.2
Next.js
Next.js 16.4.6 / Bun 1.4.2
Astro
Astro 7.4.8 / Bun 1.4.2
JSONCSV

Original capture ↗ · View source ↗
Source SHA-256 f0b25979c6dddcbc028845d1c57660b1d71703f3c68bd8af8ea8003b85088067 · Artifact SHA-256 c9d0fea4e1b5407de4aeba2256977cc3afad44d7eb4bdf2e83f3f4471f941433
Different framework shells and hydration protocols produce different payload sizes. This workload does not measure browser hydration, application startup, database I/O or developer experience. A separate contract and capture from the synchronous pure-renderer suite; numbers must not be combined.

Maintained by Andrew Hariri, founder of Proa Labs. Proa is included in the comparisons. Each experiment identifies its recorded host, source and capture date. Some captures include uncommitted source changes. No external database is included.

Workload preview

Open full page ↗

Tags shown as text, such as <b>plain text</b>, intentionally test that dynamic data is escaped safely. Preview styling and images are outside the timed benchmark.