Skip to content

Run Time Stats

Run Time benchmarks use purpose-built apps; see the Run Time methodology for setup details.

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.

Client First Paint (Lighthouse)
Client First Paint (Lighthouse) data
FrameworkMilliseconds
SolidStart81.00 ms
Astro97.00 ms
Pracht97.00 ms
SvelteKit104.00 ms
Solid 2.0108.00 ms
TanStack Start146.00 ms
Nuxt148.00 ms
React Router182.00 ms
Next.js335.00 ms

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

Client FCP (Lighthouse)
Client FCP (Lighthouse) data
FrameworkMilliseconds
SolidStart81.08 ms
Pracht96.51 ms
Astro96.87 ms
SvelteKit103.60 ms
Solid 2.0108.03 ms
TanStack Start146.03 ms
Nuxt147.53 ms
React Router181.97 ms
Next.js335.46 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.
Interaction Breakdown (Lighthouse) data
FrameworkInput delayProcessing durationPresentation delay
Astro2.69 ms0.30 ms0.00 ms
Nuxt0.87 ms1.31 ms7.23 ms
SvelteKit0.78 ms1.81 ms13.12 ms
SolidStart0.98 ms2.11 ms14.54 ms
Solid 2.00.45 ms3.72 ms14.59 ms
Next.js1.25 ms4.67 ms12.92 ms
React Router1.66 ms3.26 ms15.68 ms
Pracht0.98 ms2.47 ms18.59 ms
TanStack Start1.56 ms3.21 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).

Server First Paint (Lighthouse)
Server First Paint (Lighthouse) data
FrameworkMilliseconds
Astro65.00 ms
Solid 2.071.00 ms
SolidStart80.00 ms
SvelteKit83.00 ms
Nuxt88.00 ms
TanStack Start92.00 ms
Next.js93.00 ms
Pracht97.00 ms
React Router109.00 ms

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

Server FCP (Lighthouse)
Server FCP (Lighthouse) data
FrameworkMilliseconds
Astro64.69 ms
Solid 2.070.98 ms
SolidStart79.93 ms
SvelteKit83.09 ms
Nuxt88.03 ms
TanStack Start92.49 ms
Next.js92.66 ms
Pracht96.55 ms
React Router108.97 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.
Interaction Breakdown (Lighthouse) data
FrameworkInput delayProcessing durationPresentation delay
Astro0.67 ms0.26 ms0.00 ms
Nuxt0.69 ms1.38 ms6.53 ms
SolidStart1.02 ms3.06 ms10.26 ms
SvelteKit0.74 ms1.90 ms12.06 ms
Solid 2.00.68 ms6.62 ms8.84 ms
Pracht0.98 ms1.92 ms13.79 ms
TanStack Start1.48 ms4.57 ms10.71 ms
Next.js1.53 ms4.72 ms12.73 ms
React Router1.51 ms3.50 ms14.50 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.

Initial Load: All Resources
  • HTML
  • CSS
  • JavaScript
  • Other
Initial Load: All Resources data
FrameworkHTMLCSSJavaScriptOther
Astro3.28 KB0.00 KB0.00 KB0.00 KB
Next.js4.74 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
Solid 2.02.75 KB0.80 KB39.33 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
FrameworkHTMLCSSOther
Astro3.28 KB0.00 KB0.00 KB
Next.js4.74 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
Solid 2.02.75 KB0.80 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.

Ops/sec
Ops/sec data
FrameworkOperations per second
Baseline HTML827
Astro773
Pracht589
Solid 2.0489
SvelteKit455
Nuxt391
SolidStart377
TanStack Start376
React Router344
Next.js149

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.js203.36 KB
React Router216.84 KB
Solid 2.0218.32 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.77 ms
SvelteKit2.23 ms
Solid 2.02.47 ms
Nuxt2.65 ms
TanStack Start2.68 ms
SolidStart2.74 ms
React Router2.92 ms
Next.js7.14 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.

P99 Latency
P99 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Astro3.00 ms (v7.4.2)6.00 ms (v7.4.2)11.00 ms (v7.4.2)23.00 ms (v7.4.2)47.00 ms (v7.4.2)97.00 ms (v7.4.2)1500.00 ms (v7.4.2)
Baseline HTML2.00 ms (v24.22.1)6.00 ms (v24.22.1)8.00 ms (v24.22.1)16.00 ms (v24.22.1)37.00 ms (v24.22.1)97.00 ms (v24.22.1)565.00 ms (v24.22.1)
Next.js11.00 ms (v16.4.3)37.00 ms (v16.4.3)82.00 ms (v16.4.3)214.00 ms (v16.4.3)713.00 ms (v16.4.3)3434.00 ms (v16.4.3)4281.00 ms (v16.4.3)
Nuxt5.00 ms (v4.6.3)13.00 ms (v4.6.3)33.00 ms (v4.6.3)76.00 ms (v4.6.3)330.00 ms (v4.6.3)2689.00 ms (v4.6.3)2813.00 ms (v4.6.3)
Pracht3.00 ms (v0.18.0)11.00 ms (v0.18.0)16.00 ms (v0.18.0)38.00 ms (v0.18.0)105.00 ms (v0.18.0)894.00 ms (v0.18.0)2900.00 ms (v0.18.0)
React Router5.00 ms (v8.5.1)21.00 ms (v8.5.1)44.00 ms (v8.5.1)98.00 ms (v8.5.1)468.00 ms (v8.5.1)3331.00 ms (v8.5.1)3525.00 ms (v8.5.1)
Solid 2.08.00 ms (v2.0.0-rc.21)19.00 ms (v2.0.0-rc.21)33.00 ms (v2.0.0-rc.21)76.00 ms (v2.0.0-rc.21)456.00 ms (v2.0.0-rc.21)2953.00 ms (v2.0.0-rc.21)2968.00 ms (v2.0.0-rc.21)
SolidStart5.00 ms (v2.1.0)18.00 ms (v2.1.0)35.00 ms (v2.1.0)89.00 ms (v2.1.0)298.00 ms (v2.1.0)2019.00 ms (v2.1.0)2127.00 ms (v2.1.0)
SvelteKit4.00 ms (v3.1.0)13.00 ms (v3.1.0)27.00 ms (v3.1.0)76.00 ms (v3.1.0)162.00 ms (v3.1.0)2028.00 ms (v3.1.0)2154.00 ms (v3.1.0)
TanStack Start5.00 ms (v1.169.4)20.00 ms (v1.169.4)41.00 ms (v1.169.4)108.00 ms (v1.169.4)646.00 ms (v1.169.4)2458.00 ms (v1.169.4)2548.00 ms (v1.169.4)
P90 Latency
P90 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Astro1.00 ms (v7.4.2)4.00 ms (v7.4.2)8.00 ms (v7.4.2)16.00 ms (v7.4.2)32.00 ms (v7.4.2)62.00 ms (v7.4.2)106.00 ms (v7.4.2)
Baseline HTML1.00 ms (v24.22.1)3.00 ms (v24.22.1)6.00 ms (v24.22.1)16.00 ms (v24.22.1)30.00 ms (v24.22.1)67.00 ms (v24.22.1)152.00 ms (v24.22.1)
Next.js8.00 ms (v16.4.3)29.00 ms (v16.4.3)56.00 ms (v16.4.3)139.00 ms (v16.4.3)268.00 ms (v16.4.3)492.00 ms (v16.4.3)572.00 ms (v16.4.3)
Nuxt3.00 ms (v4.6.3)11.00 ms (v4.6.3)20.00 ms (v4.6.3)47.00 ms (v4.6.3)101.00 ms (v4.6.3)183.00 ms (v4.6.3)187.00 ms (v4.6.3)
Pracht2.00 ms (v0.18.0)8.00 ms (v0.18.0)15.00 ms (v0.18.0)36.00 ms (v0.18.0)71.00 ms (v0.18.0)143.00 ms (v0.18.0)197.00 ms (v0.18.0)
React Router4.00 ms (v8.5.1)16.00 ms (v8.5.1)29.00 ms (v8.5.1)73.00 ms (v8.5.1)154.00 ms (v8.5.1)278.00 ms (v8.5.1)279.00 ms (v8.5.1)
Solid 2.03.00 ms (v2.0.0-rc.21)15.00 ms (v2.0.0-rc.21)25.00 ms (v2.0.0-rc.21)61.00 ms (v2.0.0-rc.21)122.00 ms (v2.0.0-rc.21)205.00 ms (v2.0.0-rc.21)200.00 ms (v2.0.0-rc.21)
SolidStart2.00 ms (v2.1.0)11.00 ms (v2.1.0)23.00 ms (v2.1.0)63.00 ms (v2.1.0)136.00 ms (v2.1.0)158.00 ms (v2.1.0)172.00 ms (v2.1.0)
SvelteKit2.00 ms (v3.1.0)9.00 ms (v3.1.0)18.00 ms (v3.1.0)52.00 ms (v3.1.0)119.00 ms (v3.1.0)197.00 ms (v3.1.0)180.00 ms (v3.1.0)
TanStack Start3.00 ms (v1.169.4)14.00 ms (v1.169.4)27.00 ms (v1.169.4)78.00 ms (v1.169.4)164.00 ms (v1.169.4)230.00 ms (v1.169.4)237.00 ms (v1.169.4)
P75 Latency
P75 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Astro1.00 ms (v7.4.2)4.00 ms (v7.4.2)7.00 ms (v7.4.2)16.00 ms (v7.4.2)31.00 ms (v7.4.2)61.00 ms (v7.4.2)98.00 ms (v7.4.2)
Baseline HTML1.00 ms (v24.22.1)3.00 ms (v24.22.1)6.00 ms (v24.22.1)14.00 ms (v24.22.1)29.00 ms (v24.22.1)56.00 ms (v24.22.1)119.00 ms (v24.22.1)
Next.js8.00 ms (v16.4.3)24.00 ms (v16.4.3)47.00 ms (v16.4.3)125.00 ms (v16.4.3)244.00 ms (v16.4.3)467.00 ms (v16.4.3)505.00 ms (v16.4.3)
Nuxt2.00 ms (v4.6.3)9.00 ms (v4.6.3)20.00 ms (v4.6.3)47.00 ms (v4.6.3)94.00 ms (v4.6.3)164.00 ms (v4.6.3)166.00 ms (v4.6.3)
Pracht2.00 ms (v0.18.0)8.00 ms (v0.18.0)15.00 ms (v0.18.0)35.00 ms (v0.18.0)70.00 ms (v0.18.0)139.00 ms (v0.18.0)183.00 ms (v0.18.0)
React Router3.00 ms (v8.5.1)16.00 ms (v8.5.1)29.00 ms (v8.5.1)71.00 ms (v8.5.1)146.00 ms (v8.5.1)261.00 ms (v8.5.1)262.00 ms (v8.5.1)
Solid 2.03.00 ms (v2.0.0-rc.21)14.00 ms (v2.0.0-rc.21)24.00 ms (v2.0.0-rc.21)58.00 ms (v2.0.0-rc.21)114.00 ms (v2.0.0-rc.21)187.00 ms (v2.0.0-rc.21)183.00 ms (v2.0.0-rc.21)
SolidStart2.00 ms (v2.1.0)9.00 ms (v2.1.0)18.00 ms (v2.1.0)53.00 ms (v2.1.0)87.00 ms (v2.1.0)121.00 ms (v2.1.0)118.00 ms (v2.1.0)
SvelteKit2.00 ms (v3.1.0)8.00 ms (v3.1.0)17.00 ms (v3.1.0)42.00 ms (v3.1.0)94.00 ms (v3.1.0)144.00 ms (v3.1.0)139.00 ms (v3.1.0)
TanStack Start3.00 ms (v1.169.4)12.00 ms (v1.169.4)24.00 ms (v1.169.4)60.00 ms (v1.169.4)131.00 ms (v1.169.4)175.00 ms (v1.169.4)178.00 ms (v1.169.4)

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.

P99 Latency
P99 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js11.00 ms (v16.4.3)43.00 ms (v16.4.3)89.00 ms (v16.4.3)215.00 ms (v16.4.3)985.00 ms (v16.4.3)3936.00 ms (v16.4.3)4352.00 ms (v16.4.3)
Nuxt9.00 ms (v4.6.3)42.00 ms (v4.6.3)89.00 ms (v4.6.3)505.00 ms (v4.6.3)2804.00 ms (v4.6.3)3638.00 ms (v4.6.3)3812.00 ms (v4.6.3)
Pracht8.00 ms (v0.18.0)24.00 ms (v0.18.0)44.00 ms (v0.18.0)97.00 ms (v0.18.0)585.00 ms (v0.18.0)3481.00 ms (v0.18.0)3536.00 ms (v0.18.0)
React Router9.00 ms (v8.5.1)43.00 ms (v8.5.1)79.00 ms (v8.5.1)274.00 ms (v8.5.1)1653.00 ms (v8.5.1)3893.00 ms (v8.5.1)3956.00 ms (v8.5.1)
TanStack Start6.00 ms (v1.169.4)32.00 ms (v1.169.4)71.00 ms (v1.169.4)240.00 ms (v1.169.4)1584.00 ms (v1.169.4)3031.00 ms (v1.169.4)3042.00 ms (v1.169.4)
P90 Latency
P90 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js9.00 ms (v16.4.3)34.00 ms (v16.4.3)69.00 ms (v16.4.3)138.00 ms (v16.4.3)308.00 ms (v16.4.3)589.00 ms (v16.4.3)687.00 ms (v16.4.3)
Nuxt7.00 ms (v4.6.3)30.00 ms (v4.6.3)60.00 ms (v4.6.3)164.00 ms (v4.6.3)314.00 ms (v4.6.3)336.00 ms (v4.6.3)318.00 ms (v4.6.3)
Pracht5.00 ms (v0.18.0)20.00 ms (v0.18.0)37.00 ms (v0.18.0)87.00 ms (v0.18.0)170.00 ms (v0.18.0)292.00 ms (v0.18.0)295.00 ms (v0.18.0)
React Router7.00 ms (v8.5.1)29.00 ms (v8.5.1)58.00 ms (v8.5.1)143.00 ms (v8.5.1)283.00 ms (v8.5.1)397.00 ms (v8.5.1)391.00 ms (v8.5.1)
TanStack Start5.00 ms (v1.169.4)22.00 ms (v1.169.4)47.00 ms (v1.169.4)122.00 ms (v1.169.4)261.00 ms (v1.169.4)282.00 ms (v1.169.4)305.00 ms (v1.169.4)
P75 Latency
P75 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js9.00 ms (v16.4.3)28.00 ms (v16.4.3)52.00 ms (v16.4.3)134.00 ms (v16.4.3)279.00 ms (v16.4.3)560.00 ms (v16.4.3)548.00 ms (v16.4.3)
Nuxt7.00 ms (v4.6.3)29.00 ms (v4.6.3)58.00 ms (v4.6.3)153.00 ms (v4.6.3)306.00 ms (v4.6.3)299.00 ms (v4.6.3)291.00 ms (v4.6.3)
Pracht4.00 ms (v0.18.0)18.00 ms (v0.18.0)34.00 ms (v0.18.0)81.00 ms (v0.18.0)163.00 ms (v0.18.0)270.00 ms (v0.18.0)272.00 ms (v0.18.0)
React Router6.00 ms (v8.5.1)28.00 ms (v8.5.1)55.00 ms (v8.5.1)137.00 ms (v8.5.1)272.00 ms (v8.5.1)367.00 ms (v8.5.1)357.00 ms (v8.5.1)
TanStack Start5.00 ms (v1.169.4)20.00 ms (v1.169.4)40.00 ms (v1.169.4)100.00 ms (v1.169.4)212.00 ms (v1.169.4)218.00 ms (v1.169.4)241.00 ms (v1.169.4)