Run Time Stats
Run Time benchmarks use each meta-framework’s app-* package.
Currently, each test uses a different route in its app, configured to meet each test’s requirements.
See Default Benchmark Setup for the base set-up. Each test’s specific setup is linked in the methodology with links in each section.
Client Side Rendered Tests (Lighthouse)
Section titled “Client Side Rendered Tests (Lighthouse)”These CSR browser performance tests use Lighthouse to measure paint timings and a controlled navigation interaction.
Methodology: Client Side Rendered Tests (Lighthouse).
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 | Interaction Latency | Input Delay | Processing Duration | Presentation Delay |
|---|---|---|---|---|---|---|
| Astro | 97ms | 97.083ms | 2.264ms | 1.902ms | 0.362ms | 0ms |
| Next.js | 337ms | 337.141ms | 21.88ms | 1.161ms | 4.53ms | 16.189ms |
| Nuxt | 161ms | 160.954ms | 15.207ms | 0.832ms | 1.458ms | 12.917ms |
| Pracht | 109ms | 108.779ms | 19.313ms | 0.808ms | 3.195ms | 15.31ms |
| React Router | 173ms | 172.621ms | 17.674ms | 1.621ms | 5.027ms | 11.026ms |
| SolidStart | 97ms | 97.103ms | 18.946ms | 0.976ms | 2.018ms | 15.952ms |
| SvelteKit | 108ms | 108.186ms | 17.399ms | 0.67ms | 1.751ms | 14.978ms |
| TanStack Start | 122ms | 121.746ms | 23.325ms | 1.347ms | 3.044ms | 18.934ms |
| Framework | Milliseconds |
|---|---|
| Astro | 97.00 ms |
| SolidStart | 97.00 ms |
| SvelteKit | 108.00 ms |
| Pracht | 109.00 ms |
| TanStack Start | 122.00 ms |
| Nuxt | 161.00 ms |
| React Router | 173.00 ms |
| Next.js | 337.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Astro | 97.08 ms |
| SolidStart | 97.10 ms |
| SvelteKit | 108.19 ms |
| Pracht | 108.78 ms |
| TanStack Start | 121.75 ms |
| Nuxt | 160.95 ms |
| React Router | 172.62 ms |
| Next.js | 337.14 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Interaction Breakdown (Lighthouse)
Total latency is split into the three consecutive phases reported by Lighthouse.
- The input delay, which starts when the user initiates an interaction with the page, and ends when the event callbacks for the interaction begin to run.
- The processing duration, which consists of the time it takes for event callbacks to run to completion.
- The presentation delay, which is the time it takes for the browser to present the next frame which contains the visual result of the interaction.
| Framework or version | Interaction latency | Input delay | Processing duration | Presentation delay |
|---|---|---|---|---|
| Astro | 2.26 ms | 1.90 ms | 0.36 ms | 0.00 ms |
| Nuxt | 15.21 ms | 0.83 ms | 1.46 ms | 12.92 ms |
| SvelteKit | 17.40 ms | 0.67 ms | 1.75 ms | 14.98 ms |
| React Router | 17.67 ms | 1.62 ms | 5.03 ms | 11.03 ms |
| SolidStart | 18.95 ms | 0.98 ms | 2.02 ms | 15.95 ms |
| Pracht | 19.31 ms | 0.81 ms | 3.19 ms | 15.31 ms |
| Next.js | 21.88 ms | 1.16 ms | 4.53 ms | 16.19 ms |
| TanStack Start | 23.33 ms | 1.35 ms | 3.04 ms | 18.93 ms |
Server Side Rendered Tests (Lighthouse)
Section titled “Server Side Rendered Tests (Lighthouse)”These SSR browser performance tests use Lighthouse to measure paint timings and a controlled navigation interaction.
Methodology: Server Side Rendered Tests (Lighthouse).
| Framework | First Paint | FCP | Interaction Latency | Input Delay | Processing Duration | Presentation Delay |
|---|---|---|---|---|---|---|
| Astro | 57ms | 57.414ms | 0.9ms | 0.642ms | 0.258ms | 0ms |
| Next.js | 383ms | 383.007ms | 23.416ms | 1.851ms | 8.77ms | 12.795ms |
| Nuxt | 86ms | 86.462ms | 13.817ms | 0.89ms | 2.073ms | 10.854ms |
| Pracht | 88ms | 87.59ms | 18.17ms | 0.846ms | 1.712ms | 15.612ms |
| React Router | 121ms | 121.017ms | 15.734ms | 1.672ms | 6.621ms | 7.441ms |
| SolidStart | 82ms | 81.711ms | 17.779ms | 0.911ms | 2.887ms | 13.981ms |
| SvelteKit | 82ms | 82.24ms | 15.139ms | 0.915ms | 2.352ms | 11.872ms |
| TanStack Start | 89ms | 89.366ms | 22.231ms | 1.343ms | 3.862ms | 17.026ms |
| Framework | Milliseconds |
|---|---|
| Astro | 57.00 ms |
| SolidStart | 82.00 ms |
| SvelteKit | 82.00 ms |
| Nuxt | 86.00 ms |
| Pracht | 88.00 ms |
| TanStack Start | 89.00 ms |
| React Router | 121.00 ms |
| Next.js | 383.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Astro | 57.41 ms |
| SolidStart | 81.71 ms |
| SvelteKit | 82.24 ms |
| Nuxt | 86.46 ms |
| Pracht | 87.59 ms |
| TanStack Start | 89.37 ms |
| React Router | 121.02 ms |
| Next.js | 383.01 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Interaction Breakdown (Lighthouse)
Total latency is split into the three consecutive phases reported by Lighthouse.
- The input delay, which starts when the user initiates an interaction with the page, and ends when the event callbacks for the interaction begin to run.
- The processing duration, which consists of the time it takes for event callbacks to run to completion.
- The presentation delay, which is the time it takes for the browser to present the next frame which contains the visual result of the interaction.
| Framework or version | Interaction latency | Input delay | Processing duration | Presentation delay |
|---|---|---|---|---|
| Astro | 0.90 ms | 0.64 ms | 0.26 ms | 0.00 ms |
| Nuxt | 13.82 ms | 0.89 ms | 2.07 ms | 10.85 ms |
| SvelteKit | 15.14 ms | 0.92 ms | 2.35 ms | 11.87 ms |
| React Router | 15.73 ms | 1.67 ms | 6.62 ms | 7.44 ms |
| SolidStart | 17.78 ms | 0.91 ms | 2.89 ms | 13.98 ms |
| Pracht | 18.17 ms | 0.85 ms | 1.71 ms | 15.61 ms |
| TanStack Start | 22.23 ms | 1.34 ms | 3.86 ms | 17.03 ms |
| Next.js | 23.42 ms | 1.85 ms | 8.77 ms | 12.79 ms |
Server Side Throughput Tests
Section titled “Server Side Throughput Tests”Methodology: Server Side Throughput Tests.
Measures how many requests each framework’s server handler can process per second when rendering a 1,000-row table, and how long each response takes. Requests bypass network overhead to focus on server rendering performance.
| Framework | Ops/sec | Median Latency | Body Size | Duplication |
|---|---|---|---|---|
| Baseline HTML | 833 | 1.211ms | 96.83kb | 1x |
| Astro | 778 | 1.364ms | 96.89kb | 1x |
| Next.js | 142 | 7.24ms | 204.56kb | 2x |
| Nuxt | 365 | 2.87ms | 201.73kb | 2x |
| Pracht | 610 | 1.708ms | 187.02kb | 2x |
| React Router | 347 | 2.91ms | 216.84kb | 2x |
| SolidStart | 375 | 2.742ms | 224.22kb | 2x |
| SvelteKit | 455 | 2.233ms | 184.29kb | 2x |
| TanStack Start | 362 | 2.787ms | 192.53kb | 2x |
| Framework | Operations per second |
|---|---|
| Baseline HTML | 833 |
| Astro | 778 |
| Pracht | 610 |
| SvelteKit | 455 |
| SolidStart | 375 |
| Nuxt | 365 |
| TanStack Start | 362 |
| React Router | 347 |
| Next.js | 142 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Kilobytes |
|---|---|
| Baseline HTML | 96.83 KB |
| Astro | 96.89 KB |
| SvelteKit | 184.29 KB |
| Pracht | 187.02 KB |
| TanStack Start | 192.53 KB |
| Nuxt | 201.73 KB |
| Next.js | 204.56 KB |
| React Router | 216.84 KB |
| SolidStart | 224.22 KB |
The chart includes a dotted median reference line calculated from the visible framework values.
Median of measured run average latencies; not a pooled request-level median.
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 1.21 ms |
| Astro | 1.36 ms |
| Pracht | 1.71 ms |
| SvelteKit | 2.23 ms |
| SolidStart | 2.74 ms |
| TanStack Start | 2.79 ms |
| Nuxt | 2.87 ms |
| React Router | 2.91 ms |
| Next.js | 7.24 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
SSR Load Test
Section titled “SSR Load Test”Methodology: SSR Load Test.
Measures server throughput and response latency as concurrent connections increase, with each request rendering a 1,000-row table.
This version uses ordinary <a> links to measure server rendering without the extra work of rendering framework router link components.
Compare it with the router link load test to see how framework router link components affect server rendering performance.
| Framework | Representative peak req/s | Representative peak connections | Median sweep P99 @ 25 | Median sweep P99 @ 50 | Median sweep P99 @ 100 | Total measured requests |
|---|---|---|---|---|---|---|
| Baseline HTML | 1,782.2 | 100 | 17ms | 32ms | 96ms | 153,613 |
| Astro | 1,626.8 | 25 | 22ms | 49ms | 93ms | 144,438 |
| Next.js | 55.4 | 5 | 1,193ms | 4,193ms | 4,593ms | 4,894 |
| Nuxt | 510 | 100 | 80ms | 391ms | 2,829ms | 49,759 |
| Pracht | 677.6 | 25 | 42ms | 103ms | 1,034ms | 64,071 |
| React Router | 303.2 | 25 | 108ms | 757ms | 3,590ms | 29,583 |
| SolidStart | 571 | 10 | 88ms | 325ms | 2,033ms | 54,914 |
| SvelteKit | 590.6 | 25 | 75ms | 226ms | 1,976ms | 56,792 |
| TanStack Start | 415.8 | 50 | 106ms | 571ms | 2,572ms | 40,817 |
P99 Latency
Section titled “P99 Latency”| Framework | Milliseconds |
|---|---|
| Baseline HTML | 17.00 ms |
| Astro | 22.00 ms |
| Pracht | 42.00 ms |
| SvelteKit | 75.00 ms |
| Nuxt | 80.00 ms |
| SolidStart | 88.00 ms |
| TanStack Start | 106.00 ms |
| React Router | 108.00 ms |
| Next.js | 1193.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 32.00 ms |
| Astro | 49.00 ms |
| Pracht | 103.00 ms |
| SvelteKit | 226.00 ms |
| SolidStart | 325.00 ms |
| Nuxt | 391.00 ms |
| TanStack Start | 571.00 ms |
| React Router | 757.00 ms |
| Next.js | 4193.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Astro | 93.00 ms |
| Baseline HTML | 96.00 ms |
| Pracht | 1034.00 ms |
| SvelteKit | 1976.00 ms |
| SolidStart | 2033.00 ms |
| TanStack Start | 2572.00 ms |
| Nuxt | 2829.00 ms |
| React Router | 3590.00 ms |
| Next.js | 4593.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency
Section titled “P90 Latency”| Framework | Milliseconds |
|---|---|
| Astro | 16.00 ms |
| Baseline HTML | 16.00 ms |
| Pracht | 38.00 ms |
| Nuxt | 53.00 ms |
| SvelteKit | 54.00 ms |
| SolidStart | 64.00 ms |
| TanStack Start | 82.00 ms |
| React Router | 85.00 ms |
| Next.js | 499.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 30.00 ms |
| Astro | 32.00 ms |
| Pracht | 77.00 ms |
| Nuxt | 102.00 ms |
| SvelteKit | 114.00 ms |
| SolidStart | 137.00 ms |
| TanStack Start | 164.00 ms |
| React Router | 180.00 ms |
| Next.js | 1807.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Astro | 63.00 ms |
| Baseline HTML | 70.00 ms |
| SolidStart | 146.00 ms |
| Pracht | 153.00 ms |
| SvelteKit | 182.00 ms |
| Nuxt | 187.00 ms |
| TanStack Start | 232.00 ms |
| React Router | 300.00 ms |
| Next.js | 2234.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency
Section titled “P75 Latency”| Framework | Milliseconds |
|---|---|
| Baseline HTML | 14.00 ms |
| Astro | 15.00 ms |
| Pracht | 37.00 ms |
| SvelteKit | 43.00 ms |
| Nuxt | 50.00 ms |
| SolidStart | 54.00 ms |
| TanStack Start | 65.00 ms |
| React Router | 83.00 ms |
| Next.js | 478.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 30.00 ms |
| Astro | 31.00 ms |
| Pracht | 75.00 ms |
| SolidStart | 86.00 ms |
| SvelteKit | 93.00 ms |
| Nuxt | 97.00 ms |
| TanStack Start | 132.00 ms |
| React Router | 171.00 ms |
| Next.js | 951.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 57.00 ms |
| Astro | 61.00 ms |
| SolidStart | 120.00 ms |
| SvelteKit | 139.00 ms |
| Pracht | 149.00 ms |
| TanStack Start | 163.00 ms |
| Nuxt | 171.00 ms |
| React Router | 286.00 ms |
| Next.js | 992.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
SSR Router Link Load Test
Section titled “SSR Router Link Load Test”Methodology: SSR Router Link Load Test.
Measures server throughput and response latency as concurrent connections increase, with each request rendering a 1,000-row table using framework router link components.
Compare it with the plain link load test to see how these components affect server rendering performance. These tests make HTTP requests only; they do not measure browser navigation or prefetching.
Frameworks without a router link component are excluded.
| Framework | Representative peak req/s | Representative peak connections | Median sweep P99 @ 25 | Median sweep P99 @ 50 | Median sweep P99 @ 100 | Total measured requests |
|---|---|---|---|---|---|---|
| Next.js | 49.6 | 5 | 1,330ms | 4,597ms | 4,788ms | 4,483 |
| Nuxt | 165.4 | 5 | 539ms | 3,055ms | 3,802ms | 16,313 |
| Pracht | 371.6 | 25 | 93ms | 453ms | 3,144ms | 34,660 |
| React Router | 176 | 50 | 287ms | 1,627ms | 3,963ms | 17,221 |
| TanStack Start | 255.2 | 5 | 179ms | 1,678ms | 3,019ms | 25,379 |
P99 Latency
Section titled “P99 Latency”| Framework | Milliseconds |
|---|---|
| Pracht | 93.00 ms |
| TanStack Start | 179.00 ms |
| React Router | 287.00 ms |
| Nuxt | 539.00 ms |
| Next.js | 1330.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 453.00 ms |
| React Router | 1627.00 ms |
| TanStack Start | 1678.00 ms |
| Nuxt | 3055.00 ms |
| Next.js | 4597.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| TanStack Start | 3019.00 ms |
| Pracht | 3144.00 ms |
| Nuxt | 3802.00 ms |
| React Router | 3963.00 ms |
| Next.js | 4788.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency
Section titled “P90 Latency”| Framework | Milliseconds |
|---|---|
| Pracht | 71.00 ms |
| TanStack Start | 122.00 ms |
| React Router | 160.00 ms |
| Nuxt | 161.00 ms |
| Next.js | 543.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 143.00 ms |
| TanStack Start | 268.00 ms |
| React Router | 296.00 ms |
| Nuxt | 305.00 ms |
| Next.js | 2141.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 287.00 ms |
| TanStack Start | 297.00 ms |
| Nuxt | 331.00 ms |
| React Router | 409.00 ms |
| Next.js | 2475.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency
Section titled “P75 Latency”| Framework | Milliseconds |
|---|---|
| Pracht | 68.00 ms |
| TanStack Start | 98.00 ms |
| React Router | 142.00 ms |
| Nuxt | 154.00 ms |
| Next.js | 526.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 136.00 ms |
| TanStack Start | 200.00 ms |
| React Router | 279.00 ms |
| Nuxt | 292.00 ms |
| Next.js | 1053.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| TanStack Start | 213.00 ms |
| Pracht | 263.00 ms |
| Nuxt | 308.00 ms |
| React Router | 369.00 ms |
| Next.js | 1033.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.