All Frameworks
Dependency Counts
Section titled “Dependency Counts”Methodology: Dependency Counts.
For dependency counts, we start by looking at the dependencies for the meta-framework package directly. For example, how many production, development and overall dependencies does `Nuxt` have? We then look at dependencies for the starter projects specifically. Looking at a project's dependencies is more realistic (like the `starter-*` projects) as meta-frameworks rarely just include the meta-framework package alone. It is also important to look at direct dependencies.Meta-framework Direct Package Counts
Section titled “Meta-framework Direct Package Counts”| Framework | Deps | Dev | Prod | Graph |
|---|---|---|---|---|
| Astro | 80 | 27 | 53 | View |
| Next.js | 229 | 223 | 6 | View |
| Nuxt | 68 | 11 | 57 | View |
| React Router | 51 | 23 | 28 | View |
| SolidStart | 29 | 4 | 25 | View |
| SvelteKit | 24 | 12 | 12 | View |
| TanStack Start | 8 | 0 | 8 | View |
Metaframework Dependencies
| Framework | Dependency count |
|---|---|
| TanStack Start | 8 |
| SvelteKit | 24 |
| SolidStart | 29 |
| React Router | 51 |
| Nuxt | 68 |
| 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 |
| Nuxt | 11 |
| SvelteKit | 12 |
| 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 | 57 |
The chart includes a dotted median reference line calculated from the visible framework values.
Starter Projects
Section titled “Starter Projects”| Framework | Deps Dev / Prod | All Deps | Dup. Deps | node_modules | Dep Install Size | Graph |
|---|---|---|---|---|---|---|
| Astro | 2 / 1 | 387 | 11 | 207.93MB | 186.65MB | View |
| Next.js | 6 / 3 | 421 | 12 | 560.04MB | 506.22MB | View |
| Nuxt | 2 / 3 | 694 | 63 | 208.81MB | 172.24MB | View |
| React Router | 9 / 6 | 269 | 9 | 116.15MB | 111.11MB | View |
| SolidStart | 1 / 6 | 227 | 8 | 124.34MB | 99.61MB | View |
| SvelteKit | 8 / 0 | 158 | 1 | 97.02MB | 99.76MB | View |
| TanStack Start | 11 / 13 | 424 | 14 | 234.76MB | 198.52MB | 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 | 1 |
| SolidStart | 8 |
| React Router | 9 |
| Astro | 11 |
| Next.js | 12 |
| TanStack Start | 14 |
| Nuxt | 63 |
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 | 97.02 MB |
| React Router | 116.15 MB |
| SolidStart | 124.34 MB |
| Astro | 207.93 MB |
| Nuxt | 208.81 MB |
| TanStack Start | 234.76 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.59s | 1.85s | 4.48s | 0.81s | 1.04s |
| Next.js | 5.57s | 2.97s | 6.42s | 5.20s | 5.17s |
| Nuxt | 2.81s | 2.69s | 3.25s | 3.61s | 3.42s |
| React Router | 1.50s | 1.29s | 1.61s | 1.61s | 1.63s |
| SolidStart | 1.67s | 1.34s | 1.98s | 2.82s | 2.74s |
| SvelteKit | 1.59s | 1.38s | 1.78s | 1.74s | 1.74s |
| TanStack Start | 4.24s | 1.80s | 5.05s | 5.62s | 5.41s |
Avg install time
| Framework | Seconds |
|---|---|
| React Router | 1.50s |
| SvelteKit | 1.59s |
| SolidStart | 1.67s |
| Nuxt | 2.81s |
| Astro | 3.59s |
| TanStack Start | 4.24s |
| Next.js | 5.57s |
The chart includes a dotted median reference line calculated from the visible framework values.
Cold build time
| Framework | Seconds |
|---|---|
| Astro | 0.81s |
| React Router | 1.61s |
| SvelteKit | 1.74s |
| SolidStart | 2.82s |
| Nuxt | 3.61s |
| Next.js | 5.20s |
| TanStack Start | 5.62s |
The chart includes a dotted median reference line calculated from the visible framework values.
Warm build time
| Framework | Seconds |
|---|---|
| Astro | 1.04s |
| React Router | 1.63s |
| SvelteKit | 1.74s |
| SolidStart | 2.74s |
| Nuxt | 3.42s |
| Next.js | 5.17s |
| TanStack Start | 5.41s |
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.24s | 1.18s | 1.40s |
| Next.js | 2.41s | 2.40s | 2.43s |
| Nuxt | 2.35s | 2.32s | 2.38s |
| React Router | 0.94s | 0.85s | 1.27s |
| SolidStart | 2.97s | 2.90s | 3.06s |
| SvelteKit | 1.26s | 1.14s | 1.61s |
| TanStack Start | 3.01s | 2.89s | 3.06s |
Avg dev server startup time
| Framework | Seconds |
|---|---|
| React Router | 0.94s |
| Astro | 1.24s |
| SvelteKit | 1.26s |
| Nuxt | 2.35s |
| Next.js | 2.41s |
| SolidStart | 2.97s |
| TanStack Start | 3.01s |
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 | ~Size | Unnecessary Modules |
|---|---|---|
| Astro | — | — |
| Next.js | 110.0 KB | 302 |
| Nuxt | — | — |
| React Router | — | — |
| SolidStart | — | — |
| SvelteKit | — | — |
| TanStack Start | — | — |
Browser Baseline
Section titled “Browser Baseline”Methodology: Browser Baseline.
| Framework | Baseline | Feature | Year | Features |
|---|---|---|---|---|
| Astro | — | — | — | 0 |
| Next.js | High | — | 2022 | 46 |
| Nuxt | High | — | 2023 | 39 |
| 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 | v20.19.0 | — |
| 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 | 112ms | 112.04ms | 5.25ms | 1.87ms | 0.49ms | 2.89ms |
| Next.js | 336.2ms | 336.12ms | 16.78ms | 1.23ms | 7.47ms | 8.08ms |
| Nuxt | 163.6ms | 163.61ms | 11.39ms | 0.49ms | 1.36ms | 9.54ms |
| React Router | 160.2ms | 160.16ms | 21.34ms | 1.51ms | 2.78ms | 17.06ms |
| SolidStart | 111.2ms | 111.39ms | 14.67ms | 1.36ms | 2.89ms | 10.42ms |
| SvelteKit | 123.4ms | 123.21ms | 13.33ms | 1.07ms | 2.47ms | 9.79ms |
| TanStack Start | 156ms | 156.22ms | 28.58ms | 1.67ms | 14.82ms | 12.1ms |
First Paint (ms)
| Framework | Milliseconds |
|---|---|
| SolidStart | 111.20 ms |
| Astro | 112.00 ms |
| SvelteKit | 123.40 ms |
| TanStack Start | 156.00 ms |
| React Router | 160.20 ms |
| Nuxt | 163.60 ms |
| Next.js | 336.20 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
First Contentful Paint (ms)
| Framework | Milliseconds |
|---|---|
| SolidStart | 111.39 ms |
| Astro | 112.04 ms |
| SvelteKit | 123.21 ms |
| TanStack Start | 156.22 ms |
| React Router | 160.16 ms |
| Nuxt | 163.61 ms |
| Next.js | 336.12 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 | 5.25 ms | 1.87 ms | 0.49 ms | 2.89 ms |
| Nuxt | 11.39 ms | 0.49 ms | 1.36 ms | 9.54 ms |
| SvelteKit | 13.33 ms | 1.07 ms | 2.47 ms | 9.79 ms |
| SolidStart | 14.67 ms | 1.36 ms | 2.89 ms | 10.42 ms |
| Next.js | 16.78 ms | 1.23 ms | 7.47 ms | 8.08 ms |
| React Router | 21.34 ms | 1.51 ms | 2.78 ms | 17.06 ms |
| TanStack Start | 28.58 ms | 1.67 ms | 14.82 ms | 12.10 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 | 129ms | 129.03ms | 4.77ms | 3.76ms | 1.02ms | 0ms |
| Next.js | 168.8ms | 168.76ms | 19.16ms | 1.49ms | 6.61ms | 11.06ms |
| Nuxt | 104.6ms | 104.58ms | 13.66ms | 0.67ms | 2.71ms | 10.28ms |
| React Router | 114ms | 113.92ms | 17.35ms | 1.67ms | 3.33ms | 12.34ms |
| SolidStart | 92.4ms | 92.44ms | 13.29ms | 0.85ms | 2.65ms | 9.8ms |
| SvelteKit | 174ms | 173.96ms | 18.02ms | 2.25ms | 4.73ms | 11.04ms |
| TanStack Start | 122.6ms | 122.56ms | 25.24ms | 1.48ms | 13.92ms | 9.85ms |
First Paint (ms)
| Framework | Milliseconds |
|---|---|
| SolidStart | 92.40 ms |
| Nuxt | 104.60 ms |
| React Router | 114.00 ms |
| TanStack Start | 122.60 ms |
| Astro | 129.00 ms |
| Next.js | 168.80 ms |
| SvelteKit | 174.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
First Contentful Paint (ms)
| Framework | Milliseconds |
|---|---|
| SolidStart | 92.44 ms |
| Nuxt | 104.58 ms |
| React Router | 113.92 ms |
| TanStack Start | 122.56 ms |
| Astro | 129.03 ms |
| Next.js | 168.76 ms |
| SvelteKit | 173.96 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 | 4.77 ms | 3.76 ms | 1.02 ms | 0.00 ms |
| SolidStart | 13.29 ms | 0.85 ms | 2.65 ms | 9.80 ms |
| Nuxt | 13.66 ms | 0.67 ms | 2.71 ms | 10.28 ms |
| React Router | 17.35 ms | 1.67 ms | 3.33 ms | 12.34 ms |
| SvelteKit | 18.02 ms | 2.25 ms | 4.73 ms | 11.04 ms |
| Next.js | 19.16 ms | 1.49 ms | 6.61 ms | 11.06 ms |
| TanStack Start | 25.24 ms | 1.48 ms | 13.92 ms | 9.85 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 | 833 | 1.215ms | 96.83kb | 1x |
| Astro | 684 | 1.41ms | 96.89kb | 1x |
| Next.js | 233 | 4.483ms | 199.57kb | 2x |
| Nuxt | 377 | 2.572ms | 201.27kb | 2x |
| React Router | 345 | 2.862ms | 212.07kb | 2x |
| SolidStart | 421 | 2.278ms | 224.17kb | 2x |
| SvelteKit | 438 | 2.207ms | 183.53kb | 2x |
| TanStack Start | 328 | 3.029ms | 193.62kb | 2x |
Ops/sec
| Framework | Operations per second |
|---|---|
| Baseline HTML | 833 |
| Astro | 684 |
| SvelteKit | 438 |
| SolidStart | 421 |
| Nuxt | 377 |
| React Router | 345 |
| TanStack Start | 328 |
| Next.js | 233 |
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.57 KB |
| Nuxt | 201.27 KB |
| React Router | 212.07 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.22 ms |
| Astro | 1.41 ms |
| SvelteKit | 2.21 ms |
| SolidStart | 2.28 ms |
| Nuxt | 2.57 ms |
| React Router | 2.86 ms |
| TanStack Start | 3.03 ms |
| Next.js | 4.48 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,412.2 | 200 | 22ms | 50ms | 122ms | 42,163 |
| Astro | 1,160.41 | 200 | 33ms | 67ms | 370ms | 34,971 |
| Next.js | 46.2 | 5 | 1710ms | 4725ms | 4649ms | 1,329 |
| Nuxt | 437.8 | 5 | 83ms | 557ms | 2985ms | 14,229 |
| React Router | 345.6 | 10 | 103ms | 540ms | 3449ms | 11,206 |
| SolidStart | 538.6 | 10 | 88ms | 417ms | 2048ms | 17,485 |
| SvelteKit | 477.6 | 25 | 86ms | 328ms | 2534ms | 15,447 |
| TanStack Start | 286.61 | 10 | 176ms | 1864ms | 2864ms | 9,358 |
P99 Latency
Section titled “P99 Latency”P99 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 22.00 ms |
| Astro | 33.00 ms |
| Nuxt | 83.00 ms |
| SvelteKit | 86.00 ms |
| SolidStart | 88.00 ms |
| React Router | 103.00 ms |
| TanStack Start | 176.00 ms |
| Next.js | 1710.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 50.00 ms |
| Astro | 67.00 ms |
| SvelteKit | 328.00 ms |
| SolidStart | 417.00 ms |
| React Router | 540.00 ms |
| Nuxt | 557.00 ms |
| TanStack Start | 1864.00 ms |
| Next.js | 4725.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 | 122.00 ms |
| Astro | 370.00 ms |
| SolidStart | 2048.00 ms |
| SvelteKit | 2534.00 ms |
| TanStack Start | 2864.00 ms |
| Nuxt | 2985.00 ms |
| React Router | 3449.00 ms |
| Next.js | 4649.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 | 21.00 ms |
| Astro | 24.00 ms |
| Nuxt | 60.00 ms |
| SvelteKit | 62.00 ms |
| SolidStart | 68.00 ms |
| React Router | 73.00 ms |
| TanStack Start | 127.00 ms |
| Next.js | 609.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 | 40.00 ms |
| Astro | 46.00 ms |
| Nuxt | 124.00 ms |
| SvelteKit | 140.00 ms |
| SolidStart | 146.00 ms |
| React Router | 157.00 ms |
| TanStack Start | 270.00 ms |
| Next.js | 2241.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| Astro | 88.00 ms |
| Baseline HTML | 92.00 ms |
| SolidStart | 162.00 ms |
| Nuxt | 204.00 ms |
| SvelteKit | 223.00 ms |
| TanStack Start | 276.00 ms |
| React Router | 284.00 ms |
| Next.js | 2429.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 | 5 | 1998ms | 4646ms | 4676ms | 1,157 |
| Nuxt | 73 | 5 | 1872ms | 4176ms | 4265ms | 2,373 |
| React Router | 168.8 | 25 | 329ms | 1802ms | 3921ms | 5,598 |
| TanStack Start | 45.2 | 5 | 3505ms | 4074ms | 4483ms | 1,408 |
P99 Latency
Section titled “P99 Latency”P99 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 329.00 ms |
| Nuxt | 1872.00 ms |
| Next.js | 1998.00 ms |
| TanStack Start | 3505.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 | 1802.00 ms |
| TanStack Start | 4074.00 ms |
| Nuxt | 4176.00 ms |
| Next.js | 4646.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 | 3921.00 ms |
| Nuxt | 4265.00 ms |
| TanStack Start | 4483.00 ms |
| Next.js | 4676.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 | 150.00 ms |
| Nuxt | 344.00 ms |
| Next.js | 688.00 ms |
| TanStack Start | 716.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 | 316.00 ms |
| Nuxt | 477.00 ms |
| TanStack Start | 697.00 ms |
| Next.js | 2338.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 | 396.00 ms |
| Nuxt | 626.00 ms |
| TanStack Start | 1258.00 ms |
| Next.js | 2618.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.