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
Astro93ms92.7ms2.539ms2.232ms0.307ms0ms
Next.js341ms340.981ms16.161ms1.586ms4.464ms10.111ms
Nuxt164ms163.983ms10.499ms0.854ms1.242ms8.403ms
Pracht105ms104.909ms17.961ms1.007ms4.769ms12.185ms
React Router162ms162.185ms17.499ms1.517ms2.168ms13.814ms
SolidStart108ms108.479ms19.453ms1.05ms2.946ms15.457ms
SvelteKit109ms109.227ms15.763ms0.727ms1.447ms13.589ms
TanStack Start137ms136.717ms26.29ms1.386ms2.726ms22.178ms
Client First Paint (Lighthouse)
Client First Paint (Lighthouse) data
FrameworkMilliseconds
Astro93.00 ms
Pracht105.00 ms
SolidStart108.00 ms
SvelteKit109.00 ms
TanStack Start137.00 ms
React Router162.00 ms
Nuxt164.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
Astro92.70 ms
Pracht104.91 ms
SolidStart108.48 ms
SvelteKit109.23 ms
TanStack Start136.72 ms
React Router162.19 ms
Nuxt163.98 ms
Next.js340.98 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.54 ms
10.50 ms
15.76 ms
16.16 ms
17.50 ms
17.96 ms
19.45 ms
26.29 ms
Interaction Breakdown (Lighthouse) data
Framework or versionInteraction latencyInput delayProcessing durationPresentation delay
Astro2.54 ms2.23 ms0.31 ms0.00 ms
Nuxt10.50 ms0.85 ms1.24 ms8.40 ms
SvelteKit15.76 ms0.73 ms1.45 ms13.59 ms
Next.js16.16 ms1.59 ms4.46 ms10.11 ms
React Router17.50 ms1.52 ms2.17 ms13.81 ms
Pracht17.96 ms1.01 ms4.77 ms12.19 ms
SolidStart19.45 ms1.05 ms2.95 ms15.46 ms
TanStack Start26.29 ms1.39 ms2.73 ms22.18 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
Astro52ms51.982ms0.867ms0.629ms0.238ms0ms
Next.js376ms376.211ms19.652ms1.571ms4.898ms13.183ms
Nuxt94ms94.22ms11.76ms1.285ms1.365ms9.11ms
Pracht84ms84.455ms16.253ms0.874ms2.128ms13.251ms
React Router108ms107.637ms16.258ms1.65ms3.505ms11.103ms
SolidStart83ms83.451ms16.157ms0.84ms3.009ms12.308ms
SvelteKit76ms75.722ms14.079ms0.765ms1.82ms11.494ms
TanStack Start94ms93.684ms22.78ms1.304ms3.816ms17.66ms
Server First Paint (Lighthouse)
Server First Paint (Lighthouse) data
FrameworkMilliseconds
Astro52.00 ms
SvelteKit76.00 ms
SolidStart83.00 ms
Pracht84.00 ms
Nuxt94.00 ms
TanStack Start94.00 ms
React Router108.00 ms
Next.js376.00 ms

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

Server FCP (Lighthouse)
Server FCP (Lighthouse) data
FrameworkMilliseconds
Astro51.98 ms
SvelteKit75.72 ms
SolidStart83.45 ms
Pracht84.45 ms
TanStack Start93.68 ms
Nuxt94.22 ms
React Router107.64 ms
Next.js376.21 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.87 ms
11.76 ms
14.08 ms
16.16 ms
16.25 ms
16.26 ms
19.65 ms
22.78 ms
Interaction Breakdown (Lighthouse) data
Framework or versionInteraction latencyInput delayProcessing durationPresentation delay
Astro0.87 ms0.63 ms0.24 ms0.00 ms
Nuxt11.76 ms1.28 ms1.36 ms9.11 ms
SvelteKit14.08 ms0.77 ms1.82 ms11.49 ms
SolidStart16.16 ms0.84 ms3.01 ms12.31 ms
Pracht16.25 ms0.87 ms2.13 ms13.25 ms
React Router16.26 ms1.65 ms3.50 ms11.10 ms
Next.js19.65 ms1.57 ms4.90 ms13.18 ms
TanStack Start22.78 ms1.30 ms3.82 ms17.66 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 KB0.88 KB66.20 KB5.48 KB77.24 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 KB0.88 KB30.26 KB0.00 KB33.79 KB
SvelteKit123.11 KB0.86 KB34.35 KB0.00 KB38.32 KB
TanStack Start63.72 KB0.88 KB97.28 KB0.00 KB101.88 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 KB0.88 KB66.20 KB5.48 KB
Pracht1.19 KB1.18 KB19.06 KB0.00 KB
React Router2.45 KB1.00 KB118.19 KB0.00 KB
SolidStart2.65 KB0.88 KB30.26 KB0.00 KB
SvelteKit3.11 KB0.86 KB34.35 KB0.00 KB
TanStack Start3.72 KB0.88 KB97.28 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 KB0.88 KB5.48 KB
Pracht1.19 KB1.18 KB0.00 KB
React Router2.45 KB1.00 KB0.00 KB
SolidStart2.65 KB0.88 KB0.00 KB
SvelteKit3.11 KB0.86 KB0.00 KB
TanStack Start3.72 KB0.88 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 HTML8291.22ms96.83kb1x
Astro7671.426ms96.89kb1x
Next.js1307.97ms204.56kb2x
Nuxt3902.707ms201.8kb2x
Pracht6071.713ms187.02kb2x
React Router3602.803ms216.84kb2x
SolidStart4052.525ms224.22kb2x
SvelteKit4472.272ms184.29kb2x
TanStack Start2963.484ms192.78kb2x
Ops/sec
Ops/sec data
FrameworkOperations per second
Baseline HTML829
Astro767
Pracht607
SvelteKit447
SolidStart405
Nuxt390
React Router360
TanStack Start296
Next.js130

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.22 ms
Astro1.43 ms
Pracht1.71 ms
SvelteKit2.27 ms
SolidStart2.52 ms
Nuxt2.71 ms
React Router2.80 ms
TanStack Start3.48 ms
Next.js7.97 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,804.810017ms35ms91ms158,577
Astro1,623.25023ms46ms94ms144,676
Next.js49.851,328ms4,435ms4,666ms4,499
Nuxt524.85071ms315ms2,704ms51,170
Pracht695.22541ms112ms994ms63,942
React Router338.625103ms599ms3,372ms32,971
SolidStart528.65097ms433ms2,101ms51,319
SvelteKit596.82574ms218ms2,027ms57,310
TanStack Start413100116ms603ms2,500ms40,305
Median Sweep P99 Latency at 25 Connections
Median Sweep P99 Latency at 25 Connections data
FrameworkMilliseconds
Baseline HTML17.00 ms
Astro23.00 ms
Pracht41.00 ms
Nuxt71.00 ms
SvelteKit74.00 ms
SolidStart97.00 ms
React Router103.00 ms
TanStack Start116.00 ms
Next.js1328.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 HTML35.00 ms
Astro46.00 ms
Pracht112.00 ms
SvelteKit218.00 ms
Nuxt315.00 ms
SolidStart433.00 ms
React Router599.00 ms
TanStack Start603.00 ms
Next.js4435.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 HTML91.00 ms
Astro94.00 ms
Pracht994.00 ms
SvelteKit2027.00 ms
SolidStart2101.00 ms
TanStack Start2500.00 ms
Nuxt2704.00 ms
React Router3372.00 ms
Next.js4666.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
Nuxt50.00 ms
SvelteKit53.00 ms
SolidStart68.00 ms
React Router76.00 ms
TanStack Start79.00 ms
Next.js529.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
Astro31.00 ms
Pracht73.00 ms
Nuxt105.00 ms
SvelteKit120.00 ms
SolidStart150.00 ms
React Router155.00 ms
TanStack Start171.00 ms
Next.js2025.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
Astro62.00 ms
Baseline HTML73.00 ms
Pracht154.00 ms
SolidStart160.00 ms
Nuxt185.00 ms
SvelteKit192.00 ms
TanStack Start218.00 ms
React Router296.00 ms
Next.js2396.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
Astro15.00 ms
Pracht36.00 ms
SvelteKit43.00 ms
Nuxt49.00 ms
SolidStart57.00 ms
TanStack Start64.00 ms
React Router74.00 ms
Next.js511.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
Astro30.00 ms
Pracht71.00 ms
Nuxt93.00 ms
SolidStart93.00 ms
SvelteKit93.00 ms
TanStack Start135.00 ms
React Router149.00 ms
Next.js1022.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 HTML56.00 ms
Astro61.00 ms
SolidStart123.00 ms
SvelteKit137.00 ms
Pracht148.00 ms
Nuxt169.00 ms
TanStack Start169.00 ms
React Router264.00 ms
Next.js993.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.js46.251,385ms4,628ms4,706ms4,178
Nuxt178.65476ms2,712ms3,671ms17,481
Pracht362.225100ms479ms3,281ms33,897
React Router177.825269ms1,664ms3,821ms17,665
TanStack Start262.6150172ms495ms2,955ms26,231
Median Sweep P99 Latency at 25 Connections
Median Sweep P99 Latency at 25 Connections data
FrameworkMilliseconds
Pracht100.00 ms
TanStack Start172.00 ms
React Router269.00 ms
Nuxt476.00 ms
Next.js1385.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
Pracht479.00 ms
TanStack Start495.00 ms
React Router1664.00 ms
Nuxt2712.00 ms
Next.js4628.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
TanStack Start2955.00 ms
Pracht3281.00 ms
Nuxt3671.00 ms
React Router3821.00 ms
Next.js4706.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
Pracht71.00 ms
TanStack Start119.00 ms
React Router150.00 ms
Nuxt153.00 ms
Next.js582.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
Pracht147.00 ms
TanStack Start238.00 ms
React Router288.00 ms
Nuxt297.00 ms
Next.js2225.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
Pracht273.00 ms
TanStack Start300.00 ms
Nuxt321.00 ms
React Router403.00 ms
Next.js2485.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
Pracht69.00 ms
TanStack Start98.00 ms
Nuxt139.00 ms
React Router140.00 ms
Next.js562.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
Pracht140.00 ms
TanStack Start190.00 ms
React Router282.00 ms
Nuxt288.00 ms
Next.js1073.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
Pracht254.00 ms
Nuxt302.00 ms
React Router375.00 ms
Next.js1046.00 ms

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