All Results
All results for every tracked framework, including the featured frameworks shown on the Dev Time, Run Time, and Core Web Vitals pages.
Dev Time
Section titled “Dev Time”Dev Time benchmarks use each meta-framework’s starter-* package.
Each starter follows its framework’s CLI or documented setup, with the selected options and adjustments recorded in the methodology.
See Default Benchmark Setup for the shared benchmark environment.
Dependency Counts
Section titled “Dependency Counts”Methodology: Dependency Counts.
Measuring a meta-framework’s dependencies isn’t as straightforward as you might think. You could:
- Measure just the meta-framework package itself
- Maybe a full project setup
Both approaches have flaws. Some meta-frameworks need many other packages to work. A full project setup can include more packages than necessary.
To provide a clearer picture, we run the dependency-count tests three times, starting small and expanding in scope. In this order, we:
- Start with the meta-framework package itself, for example,
@sveltejs/kit - We then expand this to the meta-framework and its first-party packages. Looking at
@sveltejs/kitagain, this means any package maintained by the meta-framework authors that’s needed to run a project, for example, thesveltepackage. - Finally, we count the dependencies for the entire
starter-*project. Their CLI or documentation recommends this setup by default, so this is the default most people will start with.
Core Package Dependencies
Section titled “Core Package Dependencies”The meta-framework package itself, for example, @sveltejs/kit.
| Framework | Deps | Dev | Prod | Graph |
|---|---|---|---|---|
| Astro | 77 | 25 | 52 | View |
| Next.js | 6 | 0 | 6 | View |
| Nuxt | 79 | 13 | 66 | View |
| Pracht | 5 | 2 | 3 | View |
| React Router | 47 | 24 | 23 | View |
| SolidStart | 29 | 4 | 25 | View |
| SvelteKit | 23 | 15 | 8 | View |
| TanStack Start | 23 | 14 | 9 | View |
| Framework | Dependency count |
|---|---|
| Pracht | 5 |
| Next.js | 6 |
| SvelteKit | 23 |
| TanStack Start | 23 |
| SolidStart | 29 |
| React Router | 47 |
| Astro | 77 |
| Nuxt | 79 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Dependency count |
|---|---|
| Next.js | 0 |
| Pracht | 2 |
| SolidStart | 4 |
| Nuxt | 13 |
| TanStack Start | 14 |
| SvelteKit | 15 |
| React Router | 24 |
| Astro | 25 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Dependency count |
|---|---|
| Pracht | 3 |
| Next.js | 6 |
| SvelteKit | 8 |
| TanStack Start | 9 |
| React Router | 23 |
| SolidStart | 25 |
| Astro | 52 |
| Nuxt | 66 |
The chart includes a dotted median reference line calculated from the visible framework values.
First-Party Package Dependencies
Section titled “First-Party Package Dependencies”Looking at a meta-framework’s first-party packages. For @sveltejs/kit, this means packages maintained by the meta-framework authors that are needed to run a project, for example, svelte.
| Framework | Deps Dev / Prod | All Deps | Dup. Deps | Graph |
|---|---|---|---|---|
| Astro | 1 / 1 | 335 | 16 | View |
| Next.js | 1 / 1 | 388 | 12 | View |
| Nuxt | 0 / 1 | 611 | 55 | View |
| Pracht | 2 / 2 | 218 | 4 | View |
| React Router | 1 / 3 | 223 | 5 | View |
| SolidStart | 0 / 4 | 210 | 4 | View |
| SvelteKit | 5 / 0 | 108 | 1 | View |
| TanStack Start | 1 / 7 | 195 | 3 | View |
| Framework | Dependency count |
|---|---|
| SvelteKit | 108 |
| TanStack Start | 195 |
| SolidStart | 210 |
| Pracht | 218 |
| React Router | 223 |
| Astro | 335 |
| Next.js | 388 |
| Nuxt | 611 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Dependency count |
|---|---|
| Nuxt | 0 |
| SolidStart | 0 |
| Astro | 1 |
| Next.js | 1 |
| React Router | 1 |
| TanStack Start | 1 |
| Pracht | 2 |
| SvelteKit | 5 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Dependency count |
|---|---|
| SvelteKit | 0 |
| Astro | 1 |
| Next.js | 1 |
| Nuxt | 1 |
| Pracht | 2 |
| React Router | 3 |
| SolidStart | 4 |
| TanStack Start | 7 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Dependency count |
|---|---|
| SvelteKit | 1 |
| TanStack Start | 3 |
| Pracht | 4 |
| SolidStart | 4 |
| React Router | 5 |
| Next.js | 12 |
| Astro | 16 |
| Nuxt | 55 |
The chart includes a dotted median reference line calculated from the visible framework values.
Starter Project Dependencies
Section titled “Starter Project Dependencies”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 | 335 | 16 | 204.43MB | 172.24MB | View |
| Next.js | 6 / 3 | 424 | 12 | 463.61MB | 405.32MB | View |
| Nuxt | 3 / 3 | 611 | 55 | 222.79MB | 190.59MB | View |
| Pracht | 6 / 2 | 239 | 4 | 132.56MB | 109.29MB | View |
| React Router | 9 / 6 | 250 | 6 | 108.68MB | 102.51MB | View |
| SolidStart | 1 / 6 | 242 | 5 | 128.50MB | 104.51MB | View |
| SvelteKit | 8 / 0 | 108 | 1 | 88.32MB | 92.09MB | View |
| TanStack Start | 12 / 14 | 331 | 37 | 272.60MB | 228.67MB | View |
| Framework | Dependencies |
|---|---|
| SolidStart | 1 |
| Astro | 2 |
| Nuxt | 3 |
| Next.js | 6 |
| Pracht | 6 |
| SvelteKit | 8 |
| React Router | 9 |
| TanStack Start | 12 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Dependencies |
|---|---|
| SvelteKit | 0 |
| Astro | 1 |
| Pracht | 2 |
| Next.js | 3 |
| Nuxt | 3 |
| React Router | 6 |
| SolidStart | 6 |
| TanStack Start | 14 |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Duplicates |
|---|---|
| SvelteKit | 1 |
| Pracht | 4 |
| SolidStart | 5 |
| React Router | 6 |
| Next.js | 12 |
| Astro | 16 |
| TanStack Start | 37 |
| Nuxt | 55 |
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.
| Framework | MB |
|---|---|
| SvelteKit | 88.32 MB |
| React Router | 108.68 MB |
| SolidStart | 128.50 MB |
| Pracht | 132.56 MB |
| Astro | 204.43 MB |
| Nuxt | 222.79 MB |
| TanStack Start | 272.60 MB |
| Next.js | 463.61 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 | Median Install | Min Install | Max Install | Median Cold Build | Median Warm Build |
|---|---|---|---|---|---|
| Astro | 3.90s | 3.25s | 8.71s | 0.94s | 0.93s |
| Next.js | 6.14s | 2.73s | 38.62s | 5.78s | 2.24s |
| Nuxt | 5.60s | 2.97s | 27.85s | 4.09s | 3.79s |
| Pracht | 1.99s | 1.59s | 2.39s | 0.68s | 0.68s |
| React Router | 1.51s | 1.19s | 3.09s | 1.78s | 1.76s |
| SolidStart | 1.86s | 1.40s | 2.19s | 3.06s | 3.10s |
| SvelteKit | 1.54s | 1.32s | 1.99s | 1.84s | 1.67s |
| TanStack Start | 5.66s | 5.61s | 16.92s | 1.96s | 1.70s |
| Framework | Seconds |
|---|---|
| React Router | 1.51s |
| SvelteKit | 1.54s |
| SolidStart | 1.86s |
| Pracht | 1.99s |
| Astro | 3.90s |
| Nuxt | 5.60s |
| TanStack Start | 5.66s |
| Next.js | 6.14s |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Seconds |
|---|---|
| Pracht | 0.68s |
| Astro | 0.94s |
| React Router | 1.78s |
| SvelteKit | 1.84s |
| TanStack Start | 1.96s |
| SolidStart | 3.06s |
| Nuxt | 4.09s |
| Next.js | 5.78s |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Seconds |
|---|---|
| Pracht | 0.68s |
| Astro | 0.93s |
| SvelteKit | 1.67s |
| TanStack Start | 1.70s |
| React Router | 1.76s |
| Next.js | 2.24s |
| SolidStart | 3.10s |
| Nuxt | 3.79s |
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 | Median Start | Min Start | Max Start |
|---|---|---|---|
| Astro | 1.29s | 1.27s | 1.65s |
| Next.js | 2.46s | 2.42s | 2.51s |
| Nuxt | 2.58s | 2.58s | 2.74s |
| Pracht | 0.87s | 0.83s | 0.98s |
| React Router | 1.00s | 0.98s | 1.06s |
| SolidStart | 2.60s | 2.56s | 3.12s |
| SvelteKit | 1.29s | 1.21s | 1.32s |
| TanStack Start | 1.73s | 1.65s | 2.22s |
| Framework | Seconds |
|---|---|
| Pracht | 0.87s |
| React Router | 1.00s |
| SvelteKit | 1.29s |
| Astro | 1.29s |
| TanStack Start | 1.73s |
| Next.js | 2.46s |
| Nuxt | 2.58s |
| SolidStart | 2.60s |
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 | — | — |
| Pracht | 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 | 47 |
| Nuxt | High | — | 2023 | 42 |
| Pracht | High | — | 2020 | 37 |
| React Router | High | — | 2022 | 44 |
| SolidStart | High | — | 2020 | 33 |
| SvelteKit | Limited | temporal | — | 48 |
| TanStack Start | Limited | temporal | — | 49 |
Minimum Node Version
Section titled “Minimum Node Version”Methodology: Minimum Node Version.
| Framework | Min Node | Set by |
|---|---|---|
| Astro | v22.22.0 | @astrojs/prism, @astrojs/telemetry, astro |
| Next.js | v20.19.0 | eslint-visitor-keys |
| Nuxt | v22.22.3 | @nuxt/nitro-server, @nuxt/vite-builder, @nuxt/vite-server, cssnano, nuxt, postcss-calc |
| Pracht | v22.18.0 | @pracht/adapter-node, @pracht/capabilities, @pracht/cli, @pracht/core, @pracht/preact-ssr-precompile, @pracht/vite-plugin |
| React Router | v22.22.0 | @react-router/dev, @react-router/express, @react-router/node, @react-router/serve, react-router |
| SolidStart | v24.0.0 | @solidjs/start, starter-solid-start |
| SvelteKit | v22.17.0 | @sveltejs/kit |
| TanStack Start | v22.22.2 | @asamuzakjp/css-color, @asamuzakjp/dom-selector, jsdom, w3c-xmlserializer |
Run Time
Section titled “Run Time”Runtime apps implement comparable benchmark routes across frameworks. See Default Benchmark Setup for the shared environment and each framework’s build tool and adapter. Test-specific differences are documented in the linked methodology sections below.
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 | 90ms | 89.931ms | 2.179ms | 1.894ms | 0.292ms | 0ms |
| Next.js | 339ms | 339.216ms | 14.69ms | 1.406ms | 4.304ms | 7.916ms |
| Nuxt | 157ms | 157.129ms | 8.552ms | 0.839ms | 1.34ms | 6.471ms |
| Pracht | 85ms | 85.003ms | 18.787ms | 0.839ms | 2.945ms | 12.506ms |
| React Router | 175ms | 174.902ms | 18.466ms | 1.438ms | 2.391ms | 14.508ms |
| SolidStart | 97ms | 96.516ms | 17.882ms | 0.885ms | 2.086ms | 11.731ms |
| SvelteKit | 112ms | 111.554ms | 19.592ms | 0.864ms | 1.789ms | 16.577ms |
| TanStack Start | 115ms | 114.66ms | 21.99ms | 1.239ms | 2.771ms | 17.986ms |
| Framework | Milliseconds |
|---|---|
| Pracht | 85.00 ms |
| Astro | 90.00 ms |
| SolidStart | 97.00 ms |
| SvelteKit | 112.00 ms |
| TanStack Start | 115.00 ms |
| Nuxt | 157.00 ms |
| React Router | 175.00 ms |
| Next.js | 339.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 85.00 ms |
| Astro | 89.93 ms |
| SolidStart | 96.52 ms |
| SvelteKit | 111.55 ms |
| TanStack Start | 114.66 ms |
| Nuxt | 157.13 ms |
| React Router | 174.90 ms |
| Next.js | 339.22 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.18 ms | 1.89 ms | 0.29 ms | 0.00 ms |
| Nuxt | 8.55 ms | 0.84 ms | 1.34 ms | 6.47 ms |
| Next.js | 14.69 ms | 1.41 ms | 4.30 ms | 7.92 ms |
| SolidStart | 17.88 ms | 0.89 ms | 2.09 ms | 11.73 ms |
| React Router | 18.47 ms | 1.44 ms | 2.39 ms | 14.51 ms |
| Pracht | 18.79 ms | 0.84 ms | 2.94 ms | 12.51 ms |
| SvelteKit | 19.59 ms | 0.86 ms | 1.79 ms | 16.58 ms |
| TanStack Start | 21.99 ms | 1.24 ms | 2.77 ms | 17.99 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 | 59ms | 59.412ms | 0.924ms | 0.639ms | 0.248ms | 0ms |
| Next.js | 381ms | 380.958ms | 18.555ms | 1.428ms | 4.782ms | 12.53ms |
| Nuxt | 88ms | 87.937ms | 9.862ms | 0.789ms | 1.146ms | 7.951ms |
| Pracht | 84ms | 84.048ms | 16.654ms | 0.899ms | 2.216ms | 12.663ms |
| React Router | 108ms | 107.867ms | 15.9ms | 1.625ms | 3.86ms | 9.744ms |
| SolidStart | 86ms | 85.925ms | 14.344ms | 0.852ms | 2.206ms | 10.387ms |
| SvelteKit | 84ms | 83.539ms | 18.188ms | 0.825ms | 2.339ms | 15.024ms |
| TanStack Start | 89ms | 89.048ms | 19.303ms | 1.554ms | 3.981ms | 13.309ms |
| Framework | Milliseconds |
|---|---|
| Astro | 59.00 ms |
| Pracht | 84.00 ms |
| SvelteKit | 84.00 ms |
| SolidStart | 86.00 ms |
| Nuxt | 88.00 ms |
| TanStack Start | 89.00 ms |
| React Router | 108.00 ms |
| Next.js | 381.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Astro | 59.41 ms |
| SvelteKit | 83.54 ms |
| Pracht | 84.05 ms |
| SolidStart | 85.92 ms |
| Nuxt | 87.94 ms |
| TanStack Start | 89.05 ms |
| React Router | 107.87 ms |
| Next.js | 380.96 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.92 ms | 0.64 ms | 0.25 ms | 0.00 ms |
| Nuxt | 9.86 ms | 0.79 ms | 1.15 ms | 7.95 ms |
| SolidStart | 14.34 ms | 0.85 ms | 2.21 ms | 10.39 ms |
| React Router | 15.90 ms | 1.63 ms | 3.86 ms | 9.74 ms |
| Pracht | 16.65 ms | 0.90 ms | 2.22 ms | 12.66 ms |
| SvelteKit | 18.19 ms | 0.82 ms | 2.34 ms | 15.02 ms |
| Next.js | 18.55 ms | 1.43 ms | 4.78 ms | 12.53 ms |
| TanStack Start | 19.30 ms | 1.55 ms | 3.98 ms | 13.31 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 | 832 | 1.217ms | 96.83kb | 1x |
| Astro | 769 | 1.43ms | 96.89kb | 1x |
| Next.js | 135 | 7.65ms | 204.56kb | 2x |
| Nuxt | 401 | 2.575ms | 201.73kb | 2x |
| Pracht | 611 | 1.709ms | 187.02kb | 2x |
| React Router | 363 | 2.774ms | 216.98kb | 2x |
| SolidStart | 404 | 2.515ms | 224.26kb | 2x |
| SvelteKit | 460 | 2.2ms | 184.29kb | 2x |
| TanStack Start | 382 | 2.642ms | 192.53kb | 2x |
| Framework | Operations per second |
|---|---|
| Baseline HTML | 832 |
| Astro | 769 |
| Pracht | 611 |
| SvelteKit | 460 |
| SolidStart | 404 |
| Nuxt | 401 |
| TanStack Start | 382 |
| React Router | 363 |
| Next.js | 135 |
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.98 KB |
| SolidStart | 224.26 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.22 ms |
| Astro | 1.43 ms |
| Pracht | 1.71 ms |
| SvelteKit | 2.20 ms |
| SolidStart | 2.52 ms |
| Nuxt | 2.58 ms |
| TanStack Start | 2.64 ms |
| React Router | 2.77 ms |
| Next.js | 7.65 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.
Each runtime app renders 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 | 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,775.6 | 100 | 17ms | 39ms | 95ms | 155,644 |
| Astro | 1,608.2 | 50 | 23ms | 50ms | 91ms | 139,596 |
| Next.js | 55 | 5 | 1,185ms | 4,085ms | 4,676ms | 4,983 |
| Nuxt | 525 | 25 | 74ms | 373ms | 2,788ms | 50,350 |
| Pracht | 708 | 25 | 37ms | 111ms | 974ms | 65,067 |
| React Router | 332.8 | 50 | 103ms | 556ms | 3,441ms | 33,018 |
| SolidStart | 570.8 | 25 | 90ms | 301ms | 1,994ms | 55,494 |
| SvelteKit | 587.21 | 25 | 74ms | 238ms | 2,100ms | 56,026 |
| TanStack Start | 378.4 | 100 | 119ms | 642ms | 2,570ms | 37,870 |
P99 Latency
Section titled “P99 Latency”| Framework | Milliseconds |
|---|---|
| Baseline HTML | 17.00 ms |
| Astro | 23.00 ms |
| Pracht | 37.00 ms |
| Nuxt | 74.00 ms |
| SvelteKit | 74.00 ms |
| SolidStart | 90.00 ms |
| React Router | 103.00 ms |
| TanStack Start | 119.00 ms |
| Next.js | 1185.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 39.00 ms |
| Astro | 50.00 ms |
| Pracht | 111.00 ms |
| SvelteKit | 238.00 ms |
| SolidStart | 301.00 ms |
| Nuxt | 373.00 ms |
| React Router | 556.00 ms |
| TanStack Start | 642.00 ms |
| Next.js | 4085.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Astro | 91.00 ms |
| Baseline HTML | 95.00 ms |
| Pracht | 974.00 ms |
| SolidStart | 1994.00 ms |
| SvelteKit | 2100.00 ms |
| TanStack Start | 2570.00 ms |
| Nuxt | 2788.00 ms |
| React Router | 3441.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”| Framework | Milliseconds |
|---|---|
| Baseline HTML | 16.00 ms |
| Astro | 17.00 ms |
| Pracht | 36.00 ms |
| Nuxt | 48.00 ms |
| SvelteKit | 55.00 ms |
| SolidStart | 64.00 ms |
| React Router | 76.00 ms |
| TanStack Start | 83.00 ms |
| Next.js | 505.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 | 71.00 ms |
| Nuxt | 105.00 ms |
| SvelteKit | 121.00 ms |
| SolidStart | 138.00 ms |
| React Router | 153.00 ms |
| TanStack Start | 179.00 ms |
| Next.js | 1693.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Astro | 64.00 ms |
| Baseline HTML | 69.00 ms |
| SolidStart | 139.00 ms |
| Pracht | 150.00 ms |
| Nuxt | 184.00 ms |
| SvelteKit | 203.00 ms |
| TanStack Start | 234.00 ms |
| React Router | 291.00 ms |
| Next.js | 2172.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 | 16.00 ms |
| Pracht | 35.00 ms |
| SvelteKit | 42.00 ms |
| Nuxt | 47.00 ms |
| SolidStart | 54.00 ms |
| TanStack Start | 70.00 ms |
| React Router | 75.00 ms |
| Next.js | 484.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 | 70.00 ms |
| SolidStart | 87.00 ms |
| Nuxt | 95.00 ms |
| SvelteKit | 97.00 ms |
| TanStack Start | 142.00 ms |
| React Router | 148.00 ms |
| Next.js | 953.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 57.00 ms |
| Astro | 62.00 ms |
| SolidStart | 121.00 ms |
| SvelteKit | 137.00 ms |
| Pracht | 148.00 ms |
| Nuxt | 163.00 ms |
| TanStack Start | 187.00 ms |
| React Router | 261.00 ms |
| Next.js | 991.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 | Representative peak req/s | Representative peak connections | Median sweep P99 @ 25 | Median sweep P99 @ 50 | Median sweep P99 @ 100 | Total measured requests |
|---|---|---|---|---|---|---|
| Next.js | 50.6 | 5 | 1,292ms | 4,576ms | 4,769ms | 4,436 |
| Nuxt | 183.8 | 5 | 407ms | 2,642ms | 3,682ms | 18,008 |
| Pracht | 387 | 25 | 93ms | 418ms | 2,770ms | 35,352 |
| React Router | 165.6 | 50 | 273ms | 1,741ms | 3,875ms | 16,478 |
| TanStack Start | 257.2 | 5 | 191ms | 1,109ms | 3,036ms | 25,810 |
P99 Latency
Section titled “P99 Latency”| Framework | Milliseconds |
|---|---|
| Pracht | 93.00 ms |
| TanStack Start | 191.00 ms |
| React Router | 273.00 ms |
| Nuxt | 407.00 ms |
| Next.js | 1292.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 418.00 ms |
| TanStack Start | 1109.00 ms |
| React Router | 1741.00 ms |
| Nuxt | 2642.00 ms |
| Next.js | 4576.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 2770.00 ms |
| TanStack Start | 3036.00 ms |
| Nuxt | 3682.00 ms |
| React Router | 3875.00 ms |
| Next.js | 4769.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 | 65.00 ms |
| TanStack Start | 124.00 ms |
| Nuxt | 142.00 ms |
| React Router | 170.00 ms |
| Next.js | 545.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 140.00 ms |
| TanStack Start | 267.00 ms |
| Nuxt | 280.00 ms |
| React Router | 305.00 ms |
| Next.js | 2104.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 269.00 ms |
| TanStack Start | 282.00 ms |
| Nuxt | 316.00 ms |
| React Router | 403.00 ms |
| Next.js | 2522.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 | 64.00 ms |
| TanStack Start | 98.00 ms |
| Nuxt | 134.00 ms |
| React Router | 151.00 ms |
| Next.js | 529.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| Pracht | 131.00 ms |
| TanStack Start | 194.00 ms |
| Nuxt | 276.00 ms |
| React Router | 292.00 ms |
| Next.js | 1016.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
| Framework | Milliseconds |
|---|---|
| TanStack Start | 225.00 ms |
| Pracht | 247.00 ms |
| Nuxt | 288.00 ms |
| React Router | 369.00 ms |
| Next.js | 1078.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Core Web Vitals
Section titled “Core Web Vitals”Methodology: Core Web Vitals.
Desktop
Section titled “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 |
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.
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.
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.
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 |
| React Router | 68 |
| SvelteKit | 68 |
| Next.js | 66 |
| Nuxt | 59 |
| TanStack Start | 29 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
Mobile
Section titled “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 |
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.
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.
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.
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.
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.