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
Astro86ms85.771ms2.404ms2.098ms0.306ms0ms
Next.js342ms342.21ms19.896ms1.627ms4.861ms13.408ms
Nuxt146ms145.667ms11.785ms0.614ms1.258ms9.913ms
Pracht86ms85.633ms21.054ms0.699ms2.788ms17.567ms
React Router165ms165.333ms17.461ms1.524ms2.458ms13.479ms
SolidStart94ms93.919ms20.954ms0.904ms2.205ms17.845ms
SvelteKit108ms108.067ms15.912ms1.35ms2.042ms12.52ms
TanStack Start141ms140.874ms17.14ms1.57ms3.295ms12.275ms
Client First Paint (Lighthouse)
Client First Paint (Lighthouse) data
FrameworkMilliseconds
Astro86.00 ms
Pracht86.00 ms
SolidStart94.00 ms
SvelteKit108.00 ms
TanStack Start141.00 ms
Nuxt146.00 ms
React Router165.00 ms
Next.js342.00 ms

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

Client FCP (Lighthouse)
Client FCP (Lighthouse) data
FrameworkMilliseconds
Pracht85.63 ms
Astro85.77 ms
SolidStart93.92 ms
SvelteKit108.07 ms
TanStack Start140.87 ms
Nuxt145.67 ms
React Router165.33 ms
Next.js342.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.
2.40 ms
11.79 ms
15.91 ms
17.14 ms
17.46 ms
19.90 ms
20.95 ms
21.05 ms
Interaction Breakdown (Lighthouse) data
Framework or versionInteraction latencyInput delayProcessing durationPresentation delay
Astro2.40 ms2.10 ms0.31 ms0.00 ms
Nuxt11.79 ms0.61 ms1.26 ms9.91 ms
SvelteKit15.91 ms1.35 ms2.04 ms12.52 ms
TanStack Start17.14 ms1.57 ms3.29 ms12.28 ms
React Router17.46 ms1.52 ms2.46 ms13.48 ms
Next.js19.90 ms1.63 ms4.86 ms13.41 ms
SolidStart20.95 ms0.90 ms2.21 ms17.84 ms
Pracht21.05 ms0.70 ms2.79 ms17.57 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
Astro54ms54.225ms0.855ms0.612ms0.243ms0ms
Next.js373ms372.876ms14.493ms1.362ms4.353ms8.778ms
Nuxt87ms87.216ms12.23ms0.887ms1.331ms10.012ms
Pracht90ms90.431ms16.673ms0.857ms7.665ms8.151ms
React Router128ms127.721ms20.388ms1.769ms3.486ms15.133ms
SolidStart84ms83.69ms15.849ms1.037ms3.217ms11.595ms
SvelteKit82ms82.309ms18.122ms0.855ms2.179ms15.088ms
TanStack Start79ms79.297ms22.087ms1.365ms4.091ms16.631ms
Server First Paint (Lighthouse)
Server First Paint (Lighthouse) data
FrameworkMilliseconds
Astro54.00 ms
TanStack Start79.00 ms
SvelteKit82.00 ms
SolidStart84.00 ms
Nuxt87.00 ms
Pracht90.00 ms
React Router128.00 ms
Next.js373.00 ms

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

Server FCP (Lighthouse)
Server FCP (Lighthouse) data
FrameworkMilliseconds
Astro54.23 ms
TanStack Start79.30 ms
SvelteKit82.31 ms
SolidStart83.69 ms
Nuxt87.22 ms
Pracht90.43 ms
React Router127.72 ms
Next.js372.88 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.85 ms
12.23 ms
14.49 ms
15.85 ms
16.67 ms
18.12 ms
20.39 ms
22.09 ms
Interaction Breakdown (Lighthouse) data
Framework or versionInteraction latencyInput delayProcessing durationPresentation delay
Astro0.85 ms0.61 ms0.24 ms0.00 ms
Nuxt12.23 ms0.89 ms1.33 ms10.01 ms
Next.js14.49 ms1.36 ms4.35 ms8.78 ms
SolidStart15.85 ms1.04 ms3.22 ms11.60 ms
Pracht16.67 ms0.86 ms7.67 ms8.15 ms
SvelteKit18.12 ms0.85 ms2.18 ms15.09 ms
React Router20.39 ms1.77 ms3.49 ms15.13 ms
TanStack Start22.09 ms1.36 ms4.09 ms16.63 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.35 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.35 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.35 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 HTML8281.226ms96.83kb1x
Astro7751.322ms96.89kb1x
Next.js1347.698ms204.56kb2x
Nuxt3782.767ms201.8kb2x
Pracht5961.768ms187.02kb2x
React Router3412.95ms216.84kb2x
SolidStart3942.579ms224.22kb2x
SvelteKit4462.273ms184.3kb2x
TanStack Start3622.793ms192.78kb2x
Ops/sec
Ops/sec data
FrameworkOperations per second
Baseline HTML828
Astro775
Pracht596
SvelteKit446
SolidStart394
Nuxt378
TanStack Start362
React Router341
Next.js134

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.30 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.23 ms
Astro1.32 ms
Pracht1.77 ms
SvelteKit2.27 ms
SolidStart2.58 ms
Nuxt2.77 ms
TanStack Start2.79 ms
React Router2.95 ms
Next.js7.70 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,76910017ms39ms91ms155,732
Astro1,531.820026ms50ms108ms136,112
Next.js54.251,219ms4,269ms4,656ms4,801
Nuxt530.85075ms355ms2,804ms51,566
Pracht687.62541ms127ms983ms65,186
React Router325.6150105ms595ms3,416ms32,560
SolidStart555.85098ms332ms2,053ms53,686
SvelteKit5512582ms175ms2,027ms53,087
TanStack Start375.45123ms831ms2,639ms36,633
Median Sweep P99 Latency at 25 Connections
Median Sweep P99 Latency at 25 Connections data
FrameworkMilliseconds
Baseline HTML17.00 ms
Astro26.00 ms
Pracht41.00 ms
Nuxt75.00 ms
SvelteKit82.00 ms
SolidStart98.00 ms
React Router105.00 ms
TanStack Start123.00 ms
Next.js1219.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 HTML39.00 ms
Astro50.00 ms
Pracht127.00 ms
SvelteKit175.00 ms
SolidStart332.00 ms
Nuxt355.00 ms
React Router595.00 ms
TanStack Start831.00 ms
Next.js4269.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
Astro108.00 ms
Pracht983.00 ms
SvelteKit2027.00 ms
SolidStart2053.00 ms
TanStack Start2639.00 ms
Nuxt2804.00 ms
React Router3416.00 ms
Next.js4656.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
Astro18.00 ms
Pracht37.00 ms
Nuxt48.00 ms
SvelteKit57.00 ms
SolidStart65.00 ms
React Router80.00 ms
TanStack Start89.00 ms
Next.js521.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
Astro34.00 ms
Pracht75.00 ms
Nuxt96.00 ms
SvelteKit129.00 ms
SolidStart140.00 ms
React Router161.00 ms
TanStack Start199.00 ms
Next.js1768.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 HTML70.00 ms
SolidStart149.00 ms
Pracht150.00 ms
Nuxt188.00 ms
SvelteKit202.00 ms
TanStack Start236.00 ms
React Router291.00 ms
Next.js2283.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 HTML15.00 ms
Astro17.00 ms
Pracht36.00 ms
SvelteKit46.00 ms
Nuxt47.00 ms
SolidStart56.00 ms
TanStack Start76.00 ms
React Router78.00 ms
Next.js503.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
Astro33.00 ms
Pracht74.00 ms
SolidStart88.00 ms
Nuxt92.00 ms
SvelteKit100.00 ms
TanStack Start149.00 ms
React Router152.00 ms
Next.js979.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
Astro65.00 ms
SolidStart124.00 ms
Pracht148.00 ms
SvelteKit148.00 ms
Nuxt167.00 ms
TanStack Start171.00 ms
React Router262.00 ms
Next.js1014.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.js48.251,400ms4,758ms4,742ms4,278
Nuxt168.610556ms2,881ms3,742ms16,588
Pracht344.22589ms447ms3,384ms33,165
React Router177.425245ms1,576ms3,808ms17,829
TanStack Start243.225250ms1,656ms2,910ms24,034
Median Sweep P99 Latency at 25 Connections
Median Sweep P99 Latency at 25 Connections data
FrameworkMilliseconds
Pracht89.00 ms
React Router245.00 ms
TanStack Start250.00 ms
Nuxt556.00 ms
Next.js1400.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
Pracht447.00 ms
React Router1576.00 ms
TanStack Start1656.00 ms
Nuxt2881.00 ms
Next.js4758.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 Start2910.00 ms
Pracht3384.00 ms
Nuxt3742.00 ms
React Router3808.00 ms
Next.js4742.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
Pracht80.00 ms
TanStack Start135.00 ms
React Router150.00 ms
Nuxt159.00 ms
Next.js569.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
Pracht158.00 ms
TanStack Start267.00 ms
React Router286.00 ms
Nuxt310.00 ms
Next.js2234.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
Pracht297.00 ms
Nuxt327.00 ms
TanStack Start333.00 ms
React Router403.00 ms
Next.js2445.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
Pracht75.00 ms
TanStack Start113.00 ms
React Router140.00 ms
Nuxt146.00 ms
Next.js549.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
Pracht152.00 ms
TanStack Start208.00 ms
React Router281.00 ms
Nuxt298.00 ms
Next.js1107.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 Start223.00 ms
Pracht273.00 ms
Nuxt304.00 ms
React Router362.00 ms
Next.js1065.00 ms

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