Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · Phone field outcomes
Metric LCP INP CLS FCP TTFB
1

At a glance the headline numbers for Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

97.5%
Best: htmx
good INP
94.5%
Most used: jQuery
good INP
60.3%
Worst: Next.js
good INP

htmx passes INP most often of any framework. 97.5% of its sites pass. Next.js passes least at 60.3%. jQuery (the most-used framework) sits at 94.5%. The gap is 37 percentage points.

The State of Web Vitals · Q2 2026 · 189,915 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%
129,438
2 React 121ms 92.2%
8,475
3 htmx 128ms 97.5%
268
4 Alpine.js 135ms 93.8%
2,409
5 Vue 144ms 92.2%
10,724
6 Svelte 152ms 89.8%
416
7 Nuxt 172ms 84.7%
1,162
8 Angular 190ms 79.2%
3,035
9 Gatsby 214ms 68.9%
197
10 Next.js 271ms 60.3%
1,622
The State of Web Vitals · Q2 2026 · 189,915 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% 268 98% 128ms
jQuery 69.9% 129,438 95% 121ms
Alpine.js 1.3% 2,409 94% 135ms
Vue 5.8% 10,724 92% 144ms
React 4.6% 8,475 92% 121ms
Svelte 0.2% 416 90% 152ms
Nuxt 0.6% 1,162 85% 172ms
Remix 0% 49 80% 191ms
Angular 1.6% 3,035 79% 190ms
Gatsby 0.1% 197 69% 214ms
Next.js 0.9% 1,622 60% 271ms
Good Needs Improvement Poor Sorted best-passing first · median colored by its own rating · pass = good INP (200ms at p75) · one value per site

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

The State of Web Vitals · Q2 2026 · 189,915 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 69.9%
802.3s
95121ms
900.02
721.9s
521.3s
Vue 5.8%
762.5s
92144ms
840.04
692.0s
531.3s
React 4.6%
842.1s
92121ms
920.01
811.6s
681.0s
Angular 1.6%
652.9s
79190ms
580.26
692.0s
77758ms
Alpine.js 1.3%
892.0s
94135ms
920.01
801.7s
551.2s
Next.js 0.9%
832.2s
60271ms
650.18
831.6s
67915ms
Nuxt 0.6%
702.7s
85172ms
720.12
682.0s
601.0s
Svelte 0.2%
832.1s
90152ms
850.05
811.6s
68945ms
htmx 0.1%
911.9s
98128ms
920.01
851.6s
571.1s
Gatsby 0.1%
622.8s
69214ms
660.20
911.5s
77765ms
Remix 0%
762.3s
80191ms
730.12
731.8s
481.2s
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: 98% of its sites pass. Next.js trails at 60%. computed

The State of Web Vitals · Q2 2026 · 189,915 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 60.3%.

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