The full appraisal
Every facet, measured
Every claim Carats makes, tested against the field's strongest contender.
| Measurement | Carats | Next.js | Carats margin |
|---|---|---|---|
| JavaScript sent to the browser, gzip | 3,828 B | 173,344 B | 45× |
| Total page weight, gzip | 5,436 B | 176,227 B | 32× |
| Build output size | 1.81 MB | 51.21 MB | 28× |
| Development, second page load | 10 ms | 221 ms | 22× |
| Page load, end to end | 1.98 ms | 21.32 ms | 11× |
| Development server startup | 929 ms | 5,070 ms | 5.5× |
| Production build, median | 1,541 ms | 7,283 ms | 4.7× |
| Disk footprint, installed and built | 111.31 MB | 449.17 MB | 4× |
| Assets per page | 2 | 8 | 4× |
| Production server startup | 316 ms | 880 ms | 2.8× |
| Direct dependencies | 157 | 279 | 1.8× |
| Throughput ceiling | 4,256 rps | 2,442 rps | 1.7× |
| Memory added by the framework | 51.3 MB | 70.5 MB | 1.4× |
Carats tested on Bun 1.3.12, Next.js on Node v24.13.1.
Each framework answered 300 sequential requests, then 2,000 at each of five concurrency levels. Recorded 29 September 2026.
Under pressure
As load rises, the gap widens
The same two servers, 2,000 requests at each of five concurrency levels. A framework that cannot absorb load pays for it on every request it serves.
At four times the concurrency Next.js gains 3%: a ceiling, not a curve. Carats gains 42% over the same range, and was still climbing when the test ended.
Bars are scaled to a maximum of 4,256 requests per second.
We cut only the excess.
Carats renders on the server and sends the page as it is. No client bundle to grow, no hydration to wait on, no JavaScript standing between a visitor and the content.