Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

Field data PhoneDesktopAll Scope All sites Q1 2026 edition · Phone 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
121ms
Best INP (p75)
jQuery
The State of Web Vitals · Q1 2026 · 94,910 sites · phone field datacorewebvitals.io/state-of-cwv
2

The ranking sorted by INP at p75, fastest first

# Framework INP p75 Passing Sites
1 jQuery 121ms 94.5%
67,958
2 React 121ms 92.9%
4,396
3 htmx 125ms 98.7%
141
4 Alpine.js 133ms 94.5%
1,306
5 Vue 145ms 92.4%
5,677
6 Svelte 158ms 89.8%
219
7 Nuxt 169ms 86.2%
628
8 Angular 188ms 79.6%
1,658
9 Gatsby 214ms 66.7%
105
10 Next.js 253ms 61.7%
854
The State of Web Vitals · Q1 2026 · 94,910 sites · phone field datacorewebvitals.io/state-of-cwv
3

Passing INP per framework which group passes the INP most often

FrameworkSitesPassing INPp75
htmx 0.1% 141 99% 125ms
jQuery 71.6% 67,958 95% 121ms
Alpine.js 1.4% 1,306 95% 133ms
React 4.6% 4,396 93% 121ms
Vue 6% 5,677 92% 145ms
Svelte 0.2% 219 90% 158ms
Remix 0% 26 87% 147ms
Nuxt 0.7% 628 86% 169ms
Angular 1.7% 1,658 80% 188ms
Gatsby 0.1% 105 67% 214ms
Next.js 0.9% 854 62% 253ms
Good Needs Improvement Poor Sorted best-passing first · median colored by its own rating · pass = good INP (200ms at p75) · one value per site

99% of htmx sites pass INP. Next.js trails 37 points behind, leaving 38% of its sites failing. computed

The State of Web Vitals · Q1 2026 · 94,910 sites · phone 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%
812.3s
95121ms
900.02
731.9s
521.3s
Vue 6%
772.4s
92145ms
840.04
711.9s
531.3s
React 4.6%
852.0s
93121ms
920.01
821.6s
681.0s
Angular 1.7%
642.9s
80188ms
580.26
682.0s
78731ms
Alpine.js 1.4%
882.0s
95133ms
920.01
791.7s
551.1s
Next.js 0.9%
832.2s
62253ms
670.17
831.6s
66900ms
Nuxt 0.7%
702.7s
86169ms
720.12
691.9s
581.0s
Svelte 0.2%
822.2s
90158ms
870.04
801.6s
70945ms
htmx 0.1%
892.0s
99125ms
890.03
871.6s
481.1s
Gatsby 0.1%
642.6s
67214ms
660.19
891.5s
74801ms
Remix 0%
772.3s
87147ms
770.07
592.1s
441.4s
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: 99% of its sites pass. Next.js trails at 62%. computed

The State of Web Vitals · Q1 2026 · 94,910 sites · phone 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, jQuery reaches a good INP on 94.5% of sites; Next.js on 61.7%.

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