Run Time Stats
Client Side Rendered Tests
Section titled “Client Side Rendered Tests”Methodology: Client Side Rendered Tests.
Some frameworks have been moved off their golden path to make client side tests fair when comparing. See the methodology link above for the full details.
| Framework | First Paint | FCP | INP |
|---|---|---|---|
| Astro | 89.4ms | 89.38ms | 3.5ms |
| Next.js | 349.8ms | 349.54ms | 19.28ms |
| Nuxt | 163.2ms | 163.28ms | 11.16ms |
| React Router | 152.6ms | 152.6ms | 16.4ms |
| SolidStart | 104.4ms | 104.41ms | 13.73ms |
| SvelteKit | 113.4ms | 113.69ms | 13.23ms |
| TanStack Start | 159.6ms | 159.45ms | 28.67ms |
First Paint (ms)
First Contentful Paint (ms)
Interaction to Next Paint (ms)
Server Side Rendered Tests
Section titled “Server Side Rendered Tests”Methodology: Server Side Rendered Tests.
| Framework | First Paint | FCP | INP |
|---|---|---|---|
| Astro | 70.6ms | 70.7ms | 0.83ms |
| Next.js | 141.6ms | 141.5ms | 17.94ms |
| Nuxt | 104.4ms | 104.57ms | 11.31ms |
| React Router | 106ms | 105.98ms | 18.01ms |
| SolidStart | 108ms | 107.82ms | 21.35ms |
| SvelteKit | 90.4ms | 90.3ms | 13.13ms |
| TanStack Start | 128.6ms | 128.38ms | 31.34ms |
First Paint (ms)
First Contentful Paint (ms)
Interaction to Next Paint (ms)
Server Side Throughput Tests
Section titled “Server Side Throughput Tests”Methodology: Server Side Throughput Tests.
| Framework | Ops/sec | Median Latency | Body Size | Duplication |
|---|---|---|---|---|
| Baseline HTML | 825 | 1.2ms | 96.83kb | 1x |
| Astro | 531 | 1.84ms | 99.82kb | 1x |
| Mastro | 515 | 1.912ms | 181.95kb | 1x |
| Next.js | 217 | 4.813ms | 199.57kb | 2x |
| Nuxt | 349 | 2.778ms | 201.27kb | 2x |
| React Router | 338 | 2.923ms | 211.63kb | 2x |
| SolidStart | 385 | 2.624ms | 230.24kb | 2x |
| SvelteKit | 433 | 2.238ms | 183.49kb | 2x |
| TanStack Start | 302 | 3.29ms | 193.62kb | 2x |
Ops/sec
Body Size
Median Latency
Server Side Load Test
Section titled “Server Side Load Test”Methodology: Server Side Load Test.
| Framework | Peak req/s | Peak Connections | P99 @ 25 | P99 @ 50 | P99 @ 100 | Total Req. |
|---|---|---|---|---|---|---|
| Baseline HTML | 1,652 | 200 | 18ms | 43ms | 98ms | 48,934 |
| Astro | 690.6 | 25 | 46ms | 121ms | 1792ms | 20,866 |
| Next.js | 38 | 5 | 2189ms | 4721ms | 4760ms | 1,034 |
| Nuxt | 59.6 | 10 | 2417ms | 4422ms | 4370ms | 1,910 |
| React Router | 173 | 10 | 298ms | 1739ms | 3910ms | 5,698 |
| SolidStart | 60.8 | 10 | 3409ms | 4242ms | 4027ms | 2,007 |
| SvelteKit | 498.2 | 25 | 77ms | 188ms | 2225ms | 15,614 |
| TanStack Start | 41.6 | 10 | 4068ms | 4292ms | 4483ms | 1,268 |
P99 Latency
Section titled “P99 Latency”P99 Latency at 25 Connections
P99 Latency at 50 Connections
P99 Latency at 100 Connections
P90 Latency
Section titled “P90 Latency”P90 Latency at 25 Connections
P90 Latency at 50 Connections
P90 Latency at 100 Connections
Core Web Vitals
Section titled “Core Web Vitals”CWV Desktop
Section titled “CWV Desktop”| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 91 | 87 | 91 | 82 | 97 |
| SolidStart | 91 | 66 | 91 | 83 | 100 |
| SvelteKit | 79 | 77 | 78 | 71 | 94 |
| Next.js | 72 | 69 | 76 | 67 | 94 |
| React Router | 61 | 62 | 66 | 70 | 90 |
| Nuxt.js | 65 | 57 | 67 | 59 | 95 |
Good Largest Contentful Paint
Measures how fast a page's main content loads. To provide a good user experience, the LCP should be 2.5 seconds or less.
Good Cumulative Layout Shift
Measures how much and how far content unexpectedly moves on a page. To provide a good user experience, sites should maintain a CLS score of 0.1 or less for at least 75% of page visits.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
Good Time To First Byte
Measures the time between the request for a resource and when the first byte of a response begins to arrive. A good TTFB is less than or equal to 800ms.
Good Interaction to Next Paint
Measures overall page responsiveness to user actions. To provide a good user experience, the INP should be 200ms or less.
CWV Mobile
Section titled “CWV Mobile”| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 77 | 92 | 71 | 60 | 86 |
| SolidStart | 90 | 63 | 90 | 81 | 100 |
| SvelteKit | 67 | 81 | 60 | 58 | 75 |
| Next.js | 51 | 69 | 50 | 47 | 58 |
| Nuxt.js | 45 | 58 | 43 | 45 | 65 |
| React Router | 41 | 64 | 41 | 53 | 56 |
Good Largest Contentful Paint
Measures how fast a page's main content loads. To provide a good user experience, the LCP should be 2.5 seconds or less.
Good Cumulative Layout Shift
Measures how much and how far content unexpectedly moves on a page. To provide a good user experience, sites should maintain a CLS score of 0.1 or less for at least 75% of page visits.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
Good Time To First Byte
Measures the time between the request for a resource and when the first byte of a response begins to arrive. A good TTFB is less than or equal to 800ms.
Good Interaction to Next Paint
Measures overall page responsiveness to user actions. To provide a good user experience, the INP should be 200ms or less.
Methodology: Core Web Vitals.