Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

Field data PhoneDesktopAll Scope All sites October 2026 edition · Desktop 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.

99.3%
Best: jQuery
good INP
98.9%
Typical framework
good INP
85.7%
Worst: Gatsby
good INP

jQuery passes INP most often of any framework. 99.3% of its sites pass. Gatsby passes least at 85.7%. The gap is 14 percentage points.

The State of Web Vitals · October 2026 · 210,902 crawled sites · desktop field datacorewebvitals.io/state-of-cwv
2

The ranking sorted by INP at p75, fastest first

# Framework INP p75 Passing Sites
1 jQuery 62ms 99.3%
143,509
2 htmx 65ms 100.0%
301
3 React 66ms 98.9%
9,570
4 Alpine.js 66ms 99.4%
2,671
5 Vue 77ms 98.9%
12,115
6 Svelte 86ms 98.2%
467
7 Nuxt 98ms 97.4%
1,309
8 Remix 100ms 100.0%
53
9 Angular 106ms 96.4%
3,377
10 Next.js 110ms 94.7%
1,832
11 Gatsby 130ms 85.7%
218
The State of Web Vitals · October 2026 · 210,902 crawled sites · desktop field datacorewebvitals.io/state-of-cwv
3

Passing INP per framework which group passes the INP most often

FrameworkSitesPassing INPp75
htmx 0.1% 301 100% 65ms
Remix 0% 53 100% 100ms
Alpine.js 1.3% 2,671 99% 66ms
jQuery 69.6% 143,509 99% 62ms
Vue 5.9% 12,115 99% 77ms
React 4.6% 9,570 99% 66ms
Svelte 0.2% 467 98% 86ms
Nuxt 0.6% 1,309 97% 98ms
Angular 1.6% 3,377 96% 106ms
Next.js 0.9% 1,832 95% 110ms
Gatsby 0.1% 218 86% 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 14 points behind. computed

The State of Web Vitals · October 2026 · 210,902 crawled 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 69.6%
852.0s
9962ms
780.09
801.6s
571.2s
Vue 5.9%
832.2s
9977ms
720.12
801.6s
611.1s
React 4.6%
792.3s
9966ms
800.08
771.7s
531.5s
Angular 1.6%
752.5s
96106ms
490.27
801.6s
82643ms
Alpine.js 1.3%
921.7s
9966ms
800.08
871.4s
611.1s
Next.js 0.9%
862.0s
95110ms
660.15
851.4s
71871ms
Nuxt 0.6%
782.4s
9798ms
640.16
781.7s
641.0s
Svelte 0.2%
881.9s
9886ms
780.08
871.3s
74815ms
htmx 0.1%
961.7s
10065ms
790.07
911.4s
631.1s
Gatsby 0.1%
832.3s
86130ms
690.13
931.0s
88562ms
Remix 0%
872.0s
100100ms
730.11
871.4s
611.0s
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 86%. computed

The State of Web Vitals · October 2026 · 210,902 crawled 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, jQuery reaches a good INP on 99.3% of sites; Gatsby on 85.7%.

Related signals CDN (7) → CMS (12) → 210,902 crawled sites with Chrome field data, representing millions of real page loads · How we measured