Long-awaited brilliance

Carats

The refined framework you've been looking for.Crafted for flawless performance.

Bring it to life

$buncreatecaratsDocumentation

The full appraisal

Every facet, measured

Every claim Carats makes, tested against the field's strongest contender.

Measured comparison of Carats and Next.js on the same five-route application, ordered by size of difference.
MeasurementCaratsNext.jsCarats margin
JavaScript sent to the browser, gzip3,828 B173,344 B45×
Total page weight, gzip5,436 B176,227 B32×
Build output size1.81 MB51.21 MB28×
Development, second page load10 ms221 ms22×
Page load, end to end1.98 ms21.32 ms11×
Development server startup929 ms5,070 ms5.5×
Production build, median1,541 ms7,283 ms4.7×
Disk footprint, installed and built111.31 MB449.17 MB4×
Assets per page284×
Production server startup316 ms880 ms2.8×
Direct dependencies1572791.8×
Throughput ceiling4,256 rps2,442 rps1.7×
Memory added by the framework51.3 MB70.5 MB1.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.

Requests per second at concurrency 1 to 200. Carats peaks at 4,256 rps, Next.js at 2,442 rps.
Carats
1,5142,7953,0033,9874,256
Next.js
1,0552,2202,3742,4392,442

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.

$buncreatecaratsRead the documentation