All Frameworks
Dependency Counts
Section titled “Dependency Counts”Methodology: Dependency Counts.
These views separate a framework's core package, the direct packages maintained by its ecosystem, and the complete default starter configuration.Meta-framework Direct Package Counts
Section titled “Meta-framework Direct Package Counts”First, we look at the direct dependency counts of the meta-framework package itself.
| Framework | Deps | Dev | Prod | Graph |
|---|---|---|---|---|
| Astro | 80 | 27 | 53 | View |
| Next.js | 229 | 223 | 6 | View |
| Nuxt | 73 | 14 | 59 | View |
| React Router | 51 | 23 | 28 | View |
| SolidStart | 29 | 4 | 25 | View |
| SvelteKit | 25 | 13 | 12 | View |
| TanStack Start | 8 | 0 | 8 | View |
Metaframework Dependencies
| Framework | Dependency count |
|---|---|
| TanStack Start | 8 |
| SvelteKit | 25 |
| SolidStart | 29 |
| React Router | 51 |
| Nuxt | 73 |
| Astro | 80 |
| Next.js | 229 |
The chart includes a dotted median reference line calculated from the visible framework values.
Metaframework Development Dependencies
| Framework | Dependency count |
|---|---|
| TanStack Start | 0 |
| SolidStart | 4 |
| SvelteKit | 13 |
| Nuxt | 14 |
| React Router | 23 |
| Astro | 27 |
| Next.js | 223 |
The chart includes a dotted median reference line calculated from the visible framework values.
Metaframework Production Dependencies
| Framework | Dependency count |
|---|---|
| Next.js | 6 |
| TanStack Start | 8 |
| SvelteKit | 12 |
| SolidStart | 25 |
| React Router | 28 |
| Astro | 53 |
| Nuxt | 59 |
The chart includes a dotted median reference line calculated from the visible framework values.
Meta-framework Direct Packages
Section titled “Meta-framework Direct Packages”Next, we look at the direct framework-maintained packages that each starter declares. This excludes the starter’s third-party setup packages.
| Framework | Deps Dev / Prod | All Deps | Dup. Deps | Graph |
|---|---|---|---|---|
| Astro | 1 / 1 | 387 | 11 | View |
| Next.js | 1 / 1 | 382 | 11 | View |
| Nuxt | 0 / 1 | 707 | 85 | View |
| React Router | 1 / 3 | 243 | 9 | View |
| SolidStart | 0 / 4 | 211 | 6 | View |
| SvelteKit | 5 / 0 | 159 | 2 | View |
| TanStack Start | 1 / 6 | 249 | 6 | View |
Meta-framework Direct Package Dependencies
| Framework | Dependency count |
|---|---|
| SvelteKit | 159 |
| SolidStart | 211 |
| React Router | 243 |
| TanStack Start | 249 |
| Next.js | 382 |
| Astro | 387 |
| Nuxt | 707 |
The chart includes a dotted median reference line calculated from the visible framework values.
Meta-framework Direct Package Development Dependencies
| Framework | Dependency count |
|---|---|
| Nuxt | 0 |
| SolidStart | 0 |
| Astro | 1 |
| Next.js | 1 |
| React Router | 1 |
| TanStack Start | 1 |
| SvelteKit | 5 |
The chart includes a dotted median reference line calculated from the visible framework values.
Meta-framework Direct Package Production Dependencies
| Framework | Dependency count |
|---|---|
| SvelteKit | 0 |
| Astro | 1 |
| Next.js | 1 |
| Nuxt | 1 |
| React Router | 3 |
| SolidStart | 4 |
| TanStack Start | 6 |
The chart includes a dotted median reference line calculated from the visible framework values.
Meta-framework Direct Package Duplicate Dependencies
| Framework | Dependency count |
|---|---|
| SvelteKit | 2 |
| SolidStart | 6 |
| TanStack Start | 6 |
| React Router | 9 |
| Astro | 11 |
| Next.js | 11 |
| Nuxt | 85 |
The chart includes a dotted median reference line calculated from the visible framework values.
Starter Projects
Section titled “Starter Projects”Finally, we look at the complete dependency footprint of the default starter project, including third-party packages selected by its CLI or documented setup.
| Framework | Deps Dev / Prod | All Deps | Dup. Deps | node_modules | Dep Install Size | Graph |
|---|---|---|---|---|---|---|
| Astro | 2 / 1 | 387 | 11 | 207.94MB | 186.65MB | View |
| Next.js | 6 / 3 | 421 | 12 | 560.04MB | 506.22MB | View |
| Nuxt | 2 / 3 | 707 | 85 | 242.32MB | 205.75MB | View |
| React Router | 9 / 6 | 269 | 9 | 116.27MB | 111.24MB | View |
| SolidStart | 1 / 6 | 227 | 8 | 124.34MB | 99.61MB | View |
| SvelteKit | 8 / 0 | 159 | 2 | 98.14MB | 101.01MB | View |
| TanStack Start | 11 / 13 | 405 | 12 | 214.05MB | 179.49MB | View |
Starter Project Dev Dependencies
| Framework | Dependency count |
|---|---|
| SolidStart | 1 |
| Astro | 2 |
| Nuxt | 2 |
| Next.js | 6 |
| SvelteKit | 8 |
| React Router | 9 |
| TanStack Start | 11 |
The chart includes a dotted median reference line calculated from the visible framework values.
Starter Project Production Dependencies
| Framework | Dependency count |
|---|---|
| SvelteKit | 0 |
| Astro | 1 |
| Next.js | 3 |
| Nuxt | 3 |
| React Router | 6 |
| SolidStart | 6 |
| TanStack Start | 13 |
The chart includes a dotted median reference line calculated from the visible framework values.
Starter Project Duplicate Dependencies
| Framework | Dependency count |
|---|---|
| SvelteKit | 2 |
| SolidStart | 8 |
| React Router | 9 |
| Astro | 11 |
| Next.js | 12 |
| TanStack Start | 12 |
| Nuxt | 85 |
The chart includes a dotted median reference line calculated from the visible framework values.
Node Modules Size
Section titled “Node Modules Size”Methodology: Node Modules Size.
Node modules size
| Framework | Megabytes |
|---|---|
| SvelteKit | 98.14 MB |
| React Router | 116.27 MB |
| SolidStart | 124.34 MB |
| Astro | 207.94 MB |
| TanStack Start | 214.05 MB |
| Nuxt | 242.32 MB |
| Next.js | 560.04 MB |
The chart includes a dotted median reference line calculated from the visible framework values.
Build and Install Times
Section titled “Build and Install Times”Methodology: Build and Install Times.
| Framework | Avg Install | Min Install | Max Install | Avg Cold Build | Avg Warm Build |
|---|---|---|---|---|---|
| Astro | 3.61s | 1.94s | 4.51s | 0.87s | 0.82s |
| Next.js | 5.95s | 3.17s | 6.82s | 5.21s | 5.21s |
| Nuxt | 5.40s | 3.19s | 6.26s | 4.36s | 3.49s |
| React Router | 1.73s | 1.44s | 1.92s | 1.57s | 1.57s |
| SolidStart | 1.84s | 1.39s | 2.08s | 3.03s | 2.88s |
| SvelteKit | 1.53s | 1.32s | 1.65s | 1.94s | 1.71s |
| TanStack Start | 4.57s | 1.79s | 5.51s | 5.62s | 5.44s |
Avg install time
| Framework | Seconds |
|---|---|
| SvelteKit | 1.53s |
| React Router | 1.73s |
| SolidStart | 1.84s |
| Astro | 3.61s |
| TanStack Start | 4.57s |
| Nuxt | 5.40s |
| Next.js | 5.95s |
The chart includes a dotted median reference line calculated from the visible framework values.
Cold build time
| Framework | Seconds |
|---|---|
| Astro | 0.87s |
| React Router | 1.57s |
| SvelteKit | 1.94s |
| SolidStart | 3.03s |
| Nuxt | 4.36s |
| Next.js | 5.21s |
| TanStack Start | 5.62s |
The chart includes a dotted median reference line calculated from the visible framework values.
Warm build time
| Framework | Seconds |
|---|---|
| Astro | 0.82s |
| React Router | 1.57s |
| SvelteKit | 1.71s |
| SolidStart | 2.88s |
| Nuxt | 3.49s |
| Next.js | 5.21s |
| TanStack Start | 5.44s |
The chart includes a dotted median reference line calculated from the visible framework values.
Dev Server Startup
Section titled “Dev Server Startup”Methodology: Dev Server Startup.
| Framework | Avg Start | Min Start | Max Start |
|---|---|---|---|
| Astro | 1.32s | 1.29s | 1.34s |
| Next.js | 2.71s | 2.53s | 3.02s |
| Nuxt | 2.72s | 2.62s | 2.81s |
| React Router | 0.86s | 0.84s | 0.90s |
| SolidStart | 2.94s | 2.87s | 3.06s |
| SvelteKit | 1.31s | 1.23s | 1.38s |
| TanStack Start | 2.76s | 2.20s | 2.97s |
Avg dev server startup time
| Framework | Seconds |
|---|---|
| React Router | 0.86s |
| SvelteKit | 1.31s |
| Astro | 1.32s |
| Next.js | 2.71s |
| Nuxt | 2.72s |
| TanStack Start | 2.76s |
| SolidStart | 2.94s |
The chart includes a dotted median reference line calculated from the visible framework values.
Core-JS Polyfills
Section titled “Core-JS Polyfills”Methodology: Core-JS Polyfills.
| Framework | Core-JS detected | Matching JS files | Modules not needed by target browsers |
|---|---|---|---|
| Astro | No | — | — |
| Next.js | Yes | 110.0 KB | 302 |
| Nuxt | No | — | — |
| React Router | No | — | — |
| SolidStart | No | — | — |
| SvelteKit | No | — | — |
| TanStack Start | No | — | — |
Browser Baseline
Section titled “Browser Baseline”Methodology: Browser Baseline.
| Framework | Baseline | Feature | Year | Features |
|---|---|---|---|---|
| Astro | — | — | — | 0 |
| Next.js | High | — | 2022 | 46 |
| Nuxt | High | — | 2023 | 43 |
| React Router | High | — | 2022 | 40 |
| SolidStart | High | — | 2020 | 30 |
| SvelteKit | High | — | 2020 | 42 |
| TanStack Start | High | — | 2022 | 45 |
Minimum Node Version
Section titled “Minimum Node Version”Methodology: Minimum Node Version.
| Framework | Min Node | Set by |
|---|---|---|
| Astro | v22.12.0 | — |
| Next.js | v20.9.0 | next |
| Nuxt | v22.20.0 | @napi-rs/lzma-linux-x64-gnu |
| React Router | v20.19.0 | vite |
| SolidStart | v24.0.0 | @solidjs/start, starter-solid-start |
| SvelteKit | v22.20.0 | @napi-rs/lzma-linux-x64-gnu |
| TanStack Start | v22.12.0 | @tanstack/react-start, @tanstack/react-start-client, @tanstack/react-start-server, @tanstack/start-client-core, @tanstack/start-fn-stubs, @tanstack/start-plugin-core, @tanstack/start-server-core, @tanstack/start-storage-context |
Client Side Rendered Tests
Section titled “Client Side Rendered Tests”Methodology: Client Side Rendered Tests.
| Framework | First Paint | FCP | Interaction Latency | Input Delay | Processing Duration | Presentation Delay |
|---|---|---|---|---|---|---|
| Astro | 107.6ms | 107.63ms | 2.55ms | 2.27ms | 0.27ms | 0ms |
| Next.js | 341.8ms | 341.69ms | 19.26ms | 1.38ms | 8.27ms | 9.6ms |
| Nuxt | 163.4ms | 163.07ms | 13.83ms | 0.97ms | 1.42ms | 11.44ms |
| React Router | 172.2ms | 172.36ms | 23.29ms | 1.71ms | 2.1ms | 19.49ms |
| SolidStart | 115.2ms | 115.27ms | 14.08ms | 1.16ms | 3.38ms | 9.54ms |
| SvelteKit | 117ms | 116.89ms | 17.27ms | 1.58ms | 2.76ms | 12.93ms |
| TanStack Start | 154.6ms | 154.72ms | 33.81ms | 2.08ms | 15.95ms | 15.78ms |
First Paint (ms)
| Framework | Milliseconds |
|---|---|
| Astro | 107.60 ms |
| SolidStart | 115.20 ms |
| SvelteKit | 117.00 ms |
| TanStack Start | 154.60 ms |
| Nuxt | 163.40 ms |
| React Router | 172.20 ms |
| Next.js | 341.80 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
First Contentful Paint (ms)
| Framework | Milliseconds |
|---|---|
| Astro | 107.63 ms |
| SolidStart | 115.27 ms |
| SvelteKit | 116.89 ms |
| TanStack Start | 154.72 ms |
| Nuxt | 163.07 ms |
| React Router | 172.36 ms |
| Next.js | 341.69 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Interaction Breakdown
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.55 ms | 2.27 ms | 0.27 ms | 0.00 ms |
| Nuxt | 13.83 ms | 0.97 ms | 1.42 ms | 11.44 ms |
| SolidStart | 14.08 ms | 1.16 ms | 3.38 ms | 9.54 ms |
| SvelteKit | 17.27 ms | 1.58 ms | 2.76 ms | 12.93 ms |
| Next.js | 19.26 ms | 1.38 ms | 8.27 ms | 9.60 ms |
| React Router | 23.29 ms | 1.71 ms | 2.10 ms | 19.49 ms |
| TanStack Start | 33.81 ms | 2.08 ms | 15.95 ms | 15.78 ms |
Server Side Rendered Tests
Section titled “Server Side Rendered Tests”Methodology: Server Side Rendered Tests.
| Framework | First Paint | FCP | Interaction Latency | Input Delay | Processing Duration | Presentation Delay |
|---|---|---|---|---|---|---|
| Astro | 70ms | 70.21ms | 1.41ms | 1.15ms | 0.26ms | 0ms |
| Next.js | 163.6ms | 163.59ms | 21.04ms | 1.44ms | 8.13ms | 11.47ms |
| Nuxt | 106.2ms | 106.28ms | 11.33ms | 1.05ms | 1.94ms | 8.33ms |
| React Router | 106ms | 105.84ms | 19.58ms | 2.21ms | 3.04ms | 14.34ms |
| SolidStart | 87.6ms | 87.46ms | 12.73ms | 0.96ms | 2.63ms | 9.14ms |
| SvelteKit | 98.6ms | 98.52ms | 12.46ms | 0.73ms | 3.3ms | 8.43ms |
| TanStack Start | 133.6ms | 133.55ms | 28.58ms | 1.77ms | 16.56ms | 10.25ms |
First Paint (ms)
| Framework | Milliseconds |
|---|---|
| Astro | 70.00 ms |
| SolidStart | 87.60 ms |
| SvelteKit | 98.60 ms |
| React Router | 106.00 ms |
| Nuxt | 106.20 ms |
| TanStack Start | 133.60 ms |
| Next.js | 163.60 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
First Contentful Paint (ms)
| Framework | Milliseconds |
|---|---|
| Astro | 70.21 ms |
| SolidStart | 87.46 ms |
| SvelteKit | 98.52 ms |
| React Router | 105.84 ms |
| Nuxt | 106.28 ms |
| TanStack Start | 133.55 ms |
| Next.js | 163.59 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Interaction Breakdown
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 | 1.41 ms | 1.15 ms | 0.26 ms | 0.00 ms |
| Nuxt | 11.33 ms | 1.05 ms | 1.94 ms | 8.33 ms |
| SvelteKit | 12.46 ms | 0.73 ms | 3.30 ms | 8.43 ms |
| SolidStart | 12.73 ms | 0.96 ms | 2.63 ms | 9.14 ms |
| React Router | 19.58 ms | 2.21 ms | 3.04 ms | 14.34 ms |
| Next.js | 21.04 ms | 1.44 ms | 8.13 ms | 11.47 ms |
| TanStack Start | 28.58 ms | 1.77 ms | 16.56 ms | 10.25 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 | 826 | 1.23ms | 96.83kb | 1x |
| Astro | 658 | 1.456ms | 96.89kb | 1x |
| Next.js | 215 | 4.78ms | 199.52kb | 2x |
| Nuxt | 361 | 2.671ms | 201.57kb | 2x |
| React Router | 335 | 2.958ms | 216.9kb | 2x |
| SolidStart | 430 | 2.252ms | 224.17kb | 2x |
| SvelteKit | 455 | 2.129ms | 183.53kb | 2x |
| TanStack Start | 321 | 3.08ms | 193.62kb | 2x |
Ops/sec
| Framework | Operations per second |
|---|---|
| Baseline HTML | 826 |
| Astro | 658 |
| SvelteKit | 455 |
| SolidStart | 430 |
| Nuxt | 361 |
| React Router | 335 |
| TanStack Start | 321 |
| Next.js | 215 |
The chart includes a dotted median reference line calculated from the visible framework values.
Body Size
| Framework | Kilobytes |
|---|---|
| Baseline HTML | 96.83 KB |
| Astro | 96.89 KB |
| SvelteKit | 183.53 KB |
| TanStack Start | 193.62 KB |
| Next.js | 199.52 KB |
| Nuxt | 201.57 KB |
| React Router | 216.90 KB |
| SolidStart | 224.17 KB |
The chart includes a dotted median reference line calculated from the visible framework values.
Median Latency
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 1.23 ms |
| Astro | 1.46 ms |
| SvelteKit | 2.13 ms |
| SolidStart | 2.25 ms |
| Nuxt | 2.67 ms |
| React Router | 2.96 ms |
| TanStack Start | 3.08 ms |
| Next.js | 4.78 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.
All eight frameworks render the same 1,000-row, three-column table using ordinary
<a> links. This compares server rendering under HTTP load without the extra
work of rendering framework router link components. Requests still pass through
each framework’s server routing. No browser runs and no links are clicked.
| Framework | Peak req/s | Peak Connections | P99 @ 25 | P99 @ 50 | P99 @ 100 | Total Req. |
|---|---|---|---|---|---|---|
| Baseline HTML | 1,745.2 | 100 | 21ms | 51ms | 92ms | 48,595 |
| Astro | 1,193.41 | 50 | 35ms | 46ms | 382ms | 35,632 |
| Next.js | 46.6 | 1 | 1757ms | 4604ms | 4723ms | 1,300 |
| Nuxt | 479 | 10 | 79ms | 444ms | 2841ms | 15,571 |
| React Router | 334.2 | 25 | 103ms | 557ms | 3444ms | 10,842 |
| SolidStart | 538.21 | 10 | 96ms | 346ms | 2062ms | 17,633 |
| SvelteKit | 453 | 200 | 94ms | 374ms | 1755ms | 14,851 |
| TanStack Start | 301 | 10 | 153ms | 1564ms | 2724ms | 9,894 |
P99 Latency
Section titled “P99 Latency”P99 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 21.00 ms |
| Astro | 35.00 ms |
| Nuxt | 79.00 ms |
| SvelteKit | 94.00 ms |
| SolidStart | 96.00 ms |
| React Router | 103.00 ms |
| TanStack Start | 153.00 ms |
| Next.js | 1757.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| Astro | 46.00 ms |
| Baseline HTML | 51.00 ms |
| SolidStart | 346.00 ms |
| SvelteKit | 374.00 ms |
| Nuxt | 444.00 ms |
| React Router | 557.00 ms |
| TanStack Start | 1564.00 ms |
| Next.js | 4604.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 92.00 ms |
| Astro | 382.00 ms |
| SvelteKit | 1755.00 ms |
| SolidStart | 2062.00 ms |
| TanStack Start | 2724.00 ms |
| Nuxt | 2841.00 ms |
| React Router | 3444.00 ms |
| Next.js | 4723.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency
Section titled “P90 Latency”P90 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 19.00 ms |
| Astro | 23.00 ms |
| Nuxt | 55.00 ms |
| SvelteKit | 65.00 ms |
| SolidStart | 66.00 ms |
| React Router | 76.00 ms |
| TanStack Start | 120.00 ms |
| Next.js | 625.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 36.00 ms |
| Astro | 43.00 ms |
| Nuxt | 115.00 ms |
| SolidStart | 148.00 ms |
| SvelteKit | 155.00 ms |
| React Router | 156.00 ms |
| TanStack Start | 253.00 ms |
| Next.js | 2135.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 74.00 ms |
| Astro | 88.00 ms |
| SolidStart | 153.00 ms |
| Nuxt | 202.00 ms |
| SvelteKit | 253.00 ms |
| TanStack Start | 266.00 ms |
| React Router | 327.00 ms |
| Next.js | 2562.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.
The same load test using framework router link components, showing how rendering those components affects server performance compared with ordinary HTML links.
| Framework | Peak req/s | Peak Connections | P99 @ 25 | P99 @ 50 | P99 @ 100 | Total Req. |
|---|---|---|---|---|---|---|
| Next.js | 41.2 | 1 | 2003ms | 4667ms | 4606ms | 1,150 |
| Nuxt | 69 | 10 | 2050ms | 4168ms | 4305ms | 2,210 |
| React Router | 176.6 | 25 | 284ms | 1717ms | 3892ms | 5,903 |
| TanStack Start | 44.6 | 5 | 3509ms | 3960ms | 4448ms | 1,389 |
P99 Latency
Section titled “P99 Latency”P99 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 284.00 ms |
| Next.js | 2003.00 ms |
| Nuxt | 2050.00 ms |
| TanStack Start | 3509.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 1717.00 ms |
| TanStack Start | 3960.00 ms |
| Nuxt | 4168.00 ms |
| Next.js | 4667.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 3892.00 ms |
| Nuxt | 4305.00 ms |
| TanStack Start | 4448.00 ms |
| Next.js | 4606.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency
Section titled “P90 Latency”P90 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 143.00 ms |
| Nuxt | 367.00 ms |
| Next.js | 706.00 ms |
| TanStack Start | 725.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 293.00 ms |
| Nuxt | 509.00 ms |
| TanStack Start | 741.00 ms |
| Next.js | 2469.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 401.00 ms |
| Nuxt | 735.00 ms |
| TanStack Start | 1263.00 ms |
| Next.js | 2690.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Core Web Vitals
Section titled “Core Web Vitals”CWV Desktop
Section titled “CWV Desktop”| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 93 | 89 | 92 | 81 | 98 |
| SolidStart | 100 | 77 | 100 | 85 | 100 |
| SvelteKit | 79 | 78 | 77 | 68 | 95 |
| Next.js | 74 | 72 | 76 | 66 | 94 |
| TanStack Start | 55 | 81 | 46 | 29 | 91 |
| Nuxt | 68 | 58 | 69 | 59 | 96 |
| React Router | 59 | 61 | 65 | 68 | 90 |
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.
| Framework | % |
|---|---|
| SolidStart | 100 |
| Astro | 93 |
| SvelteKit | 79 |
| Next.js | 74 |
| Nuxt | 68 |
| React Router | 59 |
| TanStack Start | 55 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| Astro | 89 |
| TanStack Start | 81 |
| SvelteKit | 78 |
| SolidStart | 77 |
| Next.js | 72 |
| React Router | 61 |
| Nuxt | 58 |
The chart includes a dotted median reference line calculated from the visible framework values.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
| Framework | % |
|---|---|
| SolidStart | 100 |
| Astro | 92 |
| SvelteKit | 77 |
| Next.js | 76 |
| Nuxt | 69 |
| React Router | 65 |
| TanStack Start | 46 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| SolidStart | 85 |
| Astro | 81 |
| SvelteKit | 68 |
| React Router | 68 |
| Next.js | 66 |
| Nuxt | 59 |
| TanStack Start | 29 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| SolidStart | 100 |
| Astro | 98 |
| Nuxt | 96 |
| SvelteKit | 95 |
| Next.js | 94 |
| TanStack Start | 91 |
| React Router | 90 |
The chart includes a dotted median reference line calculated from the visible framework values.
CWV Mobile
Section titled “CWV Mobile”| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 80 | 93 | 73 | 64 | 85 |
| SolidStart | 88 | 66 | 88 | 85 | 75 |
| SvelteKit | 67 | 81 | 58 | 54 | 74 |
| Next.js | 53 | 72 | 48 | 45 | 59 |
| Nuxt | 46 | 59 | 44 | 46 | 65 |
| React Router | 37 | 63 | 37 | 50 | 53 |
| TanStack Start | 31 | 84 | 19 | 13 | 51 |
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.
| Framework | % |
|---|---|
| SolidStart | 88 |
| Astro | 80 |
| SvelteKit | 67 |
| Next.js | 53 |
| Nuxt | 46 |
| React Router | 37 |
| TanStack Start | 31 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| Astro | 93 |
| TanStack Start | 84 |
| SvelteKit | 81 |
| Next.js | 72 |
| SolidStart | 66 |
| React Router | 63 |
| Nuxt | 59 |
The chart includes a dotted median reference line calculated from the visible framework values.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
| Framework | % |
|---|---|
| SolidStart | 88 |
| Astro | 73 |
| SvelteKit | 58 |
| Next.js | 48 |
| Nuxt | 44 |
| React Router | 37 |
| TanStack Start | 19 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| SolidStart | 85 |
| Astro | 64 |
| SvelteKit | 54 |
| React Router | 50 |
| Nuxt | 46 |
| Next.js | 45 |
| TanStack Start | 13 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| Astro | 85 |
| SolidStart | 75 |
| SvelteKit | 74 |
| Nuxt | 65 |
| Next.js | 59 |
| React Router | 53 |
| TanStack Start | 51 |
The chart includes a dotted median reference line calculated from the visible framework values.
Methodology: Core Web Vitals.