Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

Field data PhoneDesktopAll Scope All sites Q1 2026 edition · Desktop field outcomes
Metric LCP INP CLS
1

At a glance the headline numbers for Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

10
Frameworks ranked
After min-sites filter
82,942
Sites in sample
Combined across all items
60ms
Best INP (p75)
htmx
The State of Web Vitals · Q1 2026 · 94,910 sites · desktop field datacorewebvitals.io/state-of-cwv
2

The ranking sorted by INP at p75, fastest first

# Framework INP p75 Passing Sites
1 htmx 60ms 100.0%
141
2 jQuery 62ms 99.4%
67,958
3 React 65ms 98.7%
4,396
4 Alpine.js 66ms 99.7%
1,306
5 Vue 76ms 99.0%
5,677
6 Svelte 86ms 99.1%
219
7 Nuxt 101ms 98.3%
628
8 Angular 104ms 97.4%
1,658
9 Next.js 112ms 93.5%
854
10 Gatsby 130ms 82.6%
105
The State of Web Vitals · Q1 2026 · 94,910 sites · desktop field datacorewebvitals.io/state-of-cwv
3

Passing INP per framework which group passes the INP most often

FrameworkSitesPassing INPp75
Remix 0% 26 100% 88ms
htmx 0.1% 141 100% 60ms
Alpine.js 1.4% 1,306 100% 66ms
jQuery 71.6% 67,958 99% 62ms
Svelte 0.2% 219 99% 86ms
Vue 6% 5,677 99% 76ms
React 4.6% 4,396 99% 65ms
Nuxt 0.7% 628 98% 101ms
Angular 1.7% 1,658 97% 104ms
Next.js 0.9% 854 94% 112ms
Gatsby 0.1% 105 83% 130ms
Good Needs Improvement Poor Sorted best-passing first · median colored by its own rating · pass = good INP (200ms at p75) · one value per site

100% of htmx sites pass INP. Gatsby trails 17 points behind. computed

The State of Web Vitals · Q1 2026 · 94,910 sites · desktop field datacorewebvitals.io/state-of-cwv
4

All five vitals at once the whole category without toggling - cell is the pass rate, small number the p75

LCP
INP
CLS
FCP
TTFB
jQuery 71.6%
862.0s
9962ms
780.09
801.6s
571.2s
Vue 6%
832.1s
9976ms
720.12
811.6s
611.1s
React 4.6%
812.3s
9965ms
790.08
791.6s
531.4s
Angular 1.7%
742.5s
97104ms
470.29
791.7s
82609ms
Alpine.js 1.4%
931.7s
10066ms
800.08
891.4s
621.1s
Next.js 0.9%
862.0s
94112ms
660.14
851.4s
71856ms
Nuxt 0.7%
762.5s
98101ms
650.16
781.7s
631.0s
Svelte 0.2%
881.9s
9986ms
790.08
871.4s
73867ms
htmx 0.1%
971.7s
10060ms
780.08
951.3s
621.1s
Gatsby 0.1%
832.2s
83130ms
650.13
941.0s
86624ms
Remix 0%
862.0s
10088ms
710.11
791.6s
461.1s
60%95%+ passing Cell: pass rate, small number = p75 · faded rows: under 100 sites

One row per framework, one column per vital - the cell is the share of sites passing, the small number the p75. No toggling needed to see where the category actually differs.

htmx leads on INP: 100% of its sites pass. Gatsby trails at 83%. computed

The State of Web Vitals · Q1 2026 · 94,910 sites · desktop field datacorewebvitals.io/state-of-cwv
5

Why this matters for the Core Web Vitals, and where to start fixing it

A JavaScript framework shapes how much code runs in the browser to put your page on the screen. Some render on the server and ship light; others send a large bundle and rebuild the page on the client, which lands on the main thread and shows up in INP. The framework is not destiny, but its defaults and how you use them decide how much JavaScript the visitor has to pay for.

Start by looking at what ships to the browser and when it runs. Render on the server where you can, split the bundle so each page only loads what it needs, and defer the work that is not required for the first interaction. Framework JavaScript runs on the main thread, so the less of it the browser has to execute, the better INP gets.

How does your framework affect Core Web Vitals?

Among the JavaScript frameworks, htmx reaches a good INP on 100.0% of sites; Gatsby on 82.6%.

Related signals CDN (7) → CMS (10) → Chrome field data from 94,910 sites, representing millions of real page loads · How we measured