Skip to content

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.

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.

FrameworkFirst PaintFCPInteraction LatencyInput DelayProcessing DurationPresentation Delay
Astro102ms101.98ms2.406ms2.044ms0.362ms0ms
Next.js341ms340.894ms13.827ms1.331ms4.492ms8.004ms
Nuxt155ms155.147ms9.791ms0.814ms1.258ms7.719ms
Pracht91ms91.43ms18.33ms0.781ms1.977ms15.572ms
React Router153ms152.673ms17.307ms1.502ms2.515ms13.29ms
SolidStart90ms90.056ms15.438ms0.915ms2.529ms11.994ms
SvelteKit98ms98.117ms14.324ms0.746ms1.637ms11.941ms
TanStack Start113ms112.525ms18.708ms1.235ms2.578ms14.895ms
Client First Paint (Lighthouse)
Client First Paint (Lighthouse) data
FrameworkMilliseconds
SolidStart90.00 ms
Pracht91.00 ms
SvelteKit98.00 ms
Astro102.00 ms
TanStack Start113.00 ms
React Router153.00 ms
Nuxt155.00 ms
Next.js341.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Client FCP (Lighthouse)
Client FCP (Lighthouse) data
FrameworkMilliseconds
SolidStart90.06 ms
Pracht91.43 ms
SvelteKit98.12 ms
Astro101.98 ms
TanStack Start112.53 ms
React Router152.67 ms
Nuxt155.15 ms
Next.js340.89 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.
2.41 ms
9.79 ms
13.83 ms
14.32 ms
15.44 ms
17.31 ms
18.33 ms
18.71 ms
Interaction Breakdown (Lighthouse) data
Framework or versionInteraction latencyInput delayProcessing durationPresentation delay
Astro2.41 ms2.04 ms0.36 ms0.00 ms
Nuxt9.79 ms0.81 ms1.26 ms7.72 ms
Next.js13.83 ms1.33 ms4.49 ms8.00 ms
SvelteKit14.32 ms0.75 ms1.64 ms11.94 ms
SolidStart15.44 ms0.92 ms2.53 ms11.99 ms
React Router17.31 ms1.50 ms2.52 ms13.29 ms
Pracht18.33 ms0.78 ms1.98 ms15.57 ms
TanStack Start18.71 ms1.24 ms2.58 ms14.89 ms

These SSR browser performance tests use Lighthouse to measure paint timings and a controlled navigation interaction.

Methodology: Server Side Rendered Tests (Lighthouse).

FrameworkFirst PaintFCPInteraction LatencyInput DelayProcessing DurationPresentation Delay
Astro56ms55.58ms0.917ms0.675ms0.242ms0ms
Next.js368ms367.861ms22.148ms1.517ms15.612ms5.019ms
Nuxt90ms89.952ms9.082ms0.768ms1.053ms7.261ms
Pracht69ms69.489ms16.703ms0.733ms4.078ms11.892ms
React Router123ms123.017ms18.429ms1.597ms7.07ms9.762ms
SolidStart66ms65.595ms12.173ms0.843ms2.403ms8.927ms
SvelteKit79ms78.728ms18.382ms0.653ms1.908ms15.821ms
TanStack Start82ms81.637ms21.041ms1.477ms4.058ms15.506ms
Server First Paint (Lighthouse)
Server First Paint (Lighthouse) data
FrameworkMilliseconds
Astro56.00 ms
SolidStart66.00 ms
Pracht69.00 ms
SvelteKit79.00 ms
TanStack Start82.00 ms
Nuxt90.00 ms
React Router123.00 ms
Next.js368.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Server FCP (Lighthouse)
Server FCP (Lighthouse) data
FrameworkMilliseconds
Astro55.58 ms
SolidStart65.59 ms
Pracht69.49 ms
SvelteKit78.73 ms
TanStack Start81.64 ms
Nuxt89.95 ms
React Router123.02 ms
Next.js367.86 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.
0.92 ms
9.08 ms
12.17 ms
16.70 ms
18.38 ms
18.43 ms
21.04 ms
22.15 ms
Interaction Breakdown (Lighthouse) data
Framework or versionInteraction latencyInput delayProcessing durationPresentation delay
Astro0.92 ms0.68 ms0.24 ms0.00 ms
Nuxt9.08 ms0.77 ms1.05 ms7.26 ms
SolidStart12.17 ms0.84 ms2.40 ms8.93 ms
Pracht16.70 ms0.73 ms4.08 ms11.89 ms
SvelteKit18.38 ms0.65 ms1.91 ms15.82 ms
React Router18.43 ms1.60 ms7.07 ms9.76 ms
TanStack Start21.04 ms1.48 ms4.06 ms15.51 ms
Next.js22.15 ms1.52 ms15.61 ms5.02 ms

Compare the resources transferred on a first visit to the same small, styled landing page. Sizes include response headers; lower is better. Inline CSS and JavaScript count toward HTML. Other includes images, media, fonts, and remaining resources. See Methodology for collection details.

FrameworkRequestsHTMLCSSJavaScriptOtherTotal
Astro13.28 KB0.00 KB0.00 KB0.00 KB3.28 KB
Next.js85.34 KB1.05 KB134.98 KB0.00 KB141.38 KB
Nuxt134.67 KB1.98 KB188.21 KB12.68 KB207.53 KB
Pracht61.19 KB1.18 KB19.06 KB0.00 KB21.44 KB
React Router82.45 KB1.00 KB118.19 KB0.00 KB121.64 KB
SolidStart82.65 KB2.00 KB89.49 KB0.00 KB94.13 KB
SvelteKit123.11 KB0.86 KB34.35 KB0.00 KB38.32 KB
TanStack Start63.72 KB2.00 KB340.79 KB0.00 KB346.51 KB
Initial Load: All Resources
  • HTML
  • CSS
  • JavaScript
  • Other
Initial Load: All Resources data (KB)
FrameworkHTMLCSSJavaScriptOther
Astro3.28 KB0.00 KB0.00 KB0.00 KB
Next.js5.34 KB1.05 KB134.98 KB0.00 KB
Nuxt4.67 KB1.98 KB188.21 KB12.68 KB
Pracht1.19 KB1.18 KB19.06 KB0.00 KB
React Router2.45 KB1.00 KB118.19 KB0.00 KB
SolidStart2.65 KB2.00 KB89.49 KB0.00 KB
SvelteKit3.11 KB0.86 KB34.35 KB0.00 KB
TanStack Start3.72 KB2.00 KB340.79 KB0.00 KB
Initial Load: Excluding JavaScript
  • HTML
  • CSS
  • Other
Initial Load: Excluding JavaScript data (KB)
FrameworkHTMLCSSOther
Astro3.28 KB0.00 KB0.00 KB
Next.js5.34 KB1.05 KB0.00 KB
Nuxt4.67 KB1.98 KB12.68 KB
Pracht1.19 KB1.18 KB0.00 KB
React Router2.45 KB1.00 KB0.00 KB
SolidStart2.65 KB2.00 KB0.00 KB
SvelteKit3.11 KB0.86 KB0.00 KB
TanStack Start3.72 KB2.00 KB0.00 KB

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.

FrameworkOps/secMedian LatencyBody SizeDuplication
Baseline HTML8331.212ms96.83kb1x
Astro7641.456ms96.89kb1x
Next.js1258.228ms204.56kb2x
Nuxt3932.63ms201.8kb2x
Pracht6091.715ms187.02kb2x
React Router3572.821ms216.84kb2x
SolidStart4012.541ms224.22kb2x
SvelteKit4182.432ms184.29kb2x
TanStack Start3812.644ms192.78kb2x
Ops/sec
Ops/sec data
FrameworkOperations per second
Baseline HTML833
Astro764
Pracht609
SvelteKit418
SolidStart401
Nuxt393
TanStack Start381
React Router357
Next.js125

The chart includes a dotted median reference line calculated from the visible framework values.

Body Size
Body Size data
FrameworkKilobytes
Baseline HTML96.83 KB
Astro96.89 KB
SvelteKit184.29 KB
Pracht187.02 KB
TanStack Start192.78 KB
Nuxt201.80 KB
Next.js204.56 KB
React Router216.84 KB
SolidStart224.22 KB

The chart includes a dotted median reference line calculated from the visible framework values.

Median Latency

Median of measured run average latencies; not a pooled request-level median.

Median Latency data
FrameworkMilliseconds
Baseline HTML1.21 ms
Astro1.46 ms
Pracht1.72 ms
SvelteKit2.43 ms
SolidStart2.54 ms
Nuxt2.63 ms
TanStack Start2.64 ms
React Router2.82 ms
Next.js8.23 ms

The chart includes a dotted median reference line calculated from the visible framework values.

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.

FrameworkRepresentative peak req/sRepresentative peak connectionsMedian sweep P99 @ 25Median sweep P99 @ 50Median sweep P99 @ 100Total measured requests
Baseline HTML1,779.210016ms36ms92ms157,040
Astro1,573.65026ms48ms106ms138,405
Next.js52.8101,249ms4,166ms4,637ms4,852
Nuxt531.2110070ms353ms2,766ms51,532
Pracht688.42541ms101ms1,030ms65,452
React Router349.225102ms498ms3,215ms34,258
SolidStart568.410096ms329ms2,024ms54,746
SvelteKit588.82573ms149ms2,068ms56,878
TanStack Start395.650116ms728ms2,589ms39,116
Median Sweep P99 Latency at 25 Connections
Median Sweep P99 Latency at 25 Connections data
FrameworkMilliseconds
Baseline HTML16.00 ms
Astro26.00 ms
Pracht41.00 ms
Nuxt70.00 ms
SvelteKit73.00 ms
SolidStart96.00 ms
React Router102.00 ms
TanStack Start116.00 ms
Next.js1249.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P99 Latency at 50 Connections
Median Sweep P99 Latency at 50 Connections data
FrameworkMilliseconds
Baseline HTML36.00 ms
Astro48.00 ms
Pracht101.00 ms
SvelteKit149.00 ms
SolidStart329.00 ms
Nuxt353.00 ms
React Router498.00 ms
TanStack Start728.00 ms
Next.js4166.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P99 Latency at 100 Connections
Median Sweep P99 Latency at 100 Connections data
FrameworkMilliseconds
Baseline HTML92.00 ms
Astro106.00 ms
Pracht1030.00 ms
SolidStart2024.00 ms
SvelteKit2068.00 ms
TanStack Start2589.00 ms
Nuxt2766.00 ms
React Router3215.00 ms
Next.js4637.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P90 Latency at 25 Connections
Median Sweep P90 Latency at 25 Connections data
FrameworkMilliseconds
Baseline HTML16.00 ms
Astro17.00 ms
Pracht37.00 ms
Nuxt48.00 ms
SvelteKit53.00 ms
SolidStart64.00 ms
React Router72.00 ms
TanStack Start83.00 ms
Next.js512.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P90 Latency at 50 Connections
Median Sweep P90 Latency at 50 Connections data
FrameworkMilliseconds
Baseline HTML30.00 ms
Astro32.00 ms
Pracht75.00 ms
Nuxt104.00 ms
SvelteKit121.00 ms
SolidStart138.00 ms
React Router144.00 ms
TanStack Start174.00 ms
Next.js1760.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P90 Latency at 100 Connections
Median Sweep P90 Latency at 100 Connections data
FrameworkMilliseconds
Astro67.00 ms
Baseline HTML69.00 ms
Pracht150.00 ms
SolidStart157.00 ms
Nuxt188.00 ms
SvelteKit191.00 ms
TanStack Start241.00 ms
React Router286.00 ms
Next.js2224.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P75 Latency at 25 Connections
Median Sweep P75 Latency at 25 Connections data
FrameworkMilliseconds
Baseline HTML14.00 ms
Astro16.00 ms
Pracht37.00 ms
SvelteKit43.00 ms
Nuxt47.00 ms
SolidStart54.00 ms
TanStack Start67.00 ms
React Router71.00 ms
Next.js493.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P75 Latency at 50 Connections
Median Sweep P75 Latency at 50 Connections data
FrameworkMilliseconds
Baseline HTML29.00 ms
Astro31.00 ms
Pracht74.00 ms
SolidStart89.00 ms
Nuxt92.00 ms
SvelteKit95.00 ms
TanStack Start132.00 ms
React Router142.00 ms
Next.js944.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P75 Latency at 100 Connections
Median Sweep P75 Latency at 100 Connections data
FrameworkMilliseconds
Baseline HTML57.00 ms
Astro66.00 ms
SolidStart118.00 ms
SvelteKit142.00 ms
Pracht147.00 ms
Nuxt167.00 ms
TanStack Start171.00 ms
React Router263.00 ms
Next.js990.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

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.

FrameworkRepresentative peak req/sRepresentative peak connectionsMedian sweep P99 @ 25Median sweep P99 @ 50Median sweep P99 @ 100Total measured requests
Next.js43.851,538ms4,711ms4,736ms3,935
Nuxt169.65523ms3,179ms3,739ms15,889
Pracht396.65089ms209ms2,626ms36,379
React Router181.8100255ms1,487ms3,847ms18,058
TanStack Start259.85174ms1,227ms3,038ms26,102
Median Sweep P99 Latency at 25 Connections
Median Sweep P99 Latency at 25 Connections data
FrameworkMilliseconds
Pracht89.00 ms
TanStack Start174.00 ms
React Router255.00 ms
Nuxt523.00 ms
Next.js1538.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P99 Latency at 50 Connections
Median Sweep P99 Latency at 50 Connections data
FrameworkMilliseconds
Pracht209.00 ms
TanStack Start1227.00 ms
React Router1487.00 ms
Nuxt3179.00 ms
Next.js4711.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P99 Latency at 100 Connections
Median Sweep P99 Latency at 100 Connections data
FrameworkMilliseconds
Pracht2626.00 ms
TanStack Start3038.00 ms
Nuxt3739.00 ms
React Router3847.00 ms
Next.js4736.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P90 Latency at 25 Connections
Median Sweep P90 Latency at 25 Connections data
FrameworkMilliseconds
Pracht74.00 ms
TanStack Start121.00 ms
React Router140.00 ms
Nuxt152.00 ms
Next.js633.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P90 Latency at 50 Connections
Median Sweep P90 Latency at 50 Connections data
FrameworkMilliseconds
Pracht134.00 ms
TanStack Start255.00 ms
React Router282.00 ms
Nuxt338.00 ms
Next.js2268.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P90 Latency at 100 Connections
Median Sweep P90 Latency at 100 Connections data
FrameworkMilliseconds
Pracht252.00 ms
TanStack Start297.00 ms
Nuxt344.00 ms
React Router398.00 ms
Next.js2598.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P75 Latency at 25 Connections
Median Sweep P75 Latency at 25 Connections data
FrameworkMilliseconds
Pracht68.00 ms
TanStack Start98.00 ms
React Router138.00 ms
Nuxt149.00 ms
Next.js611.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P75 Latency at 50 Connections
Median Sweep P75 Latency at 50 Connections data
FrameworkMilliseconds
Pracht123.00 ms
TanStack Start212.00 ms
React Router274.00 ms
Nuxt319.00 ms
Next.js1080.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Median Sweep P75 Latency at 100 Connections
Median Sweep P75 Latency at 100 Connections data
FrameworkMilliseconds
TanStack Start216.00 ms
Pracht243.00 ms
Nuxt325.00 ms
React Router366.00 ms
Next.js1053.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.