Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

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

88.5%
Best: Alpine.js
good LCP
80.1%
Most used: jQuery
good LCP
65.1%
Worst: Angular
good LCP

Alpine.js passes LCP most often of any framework. 88.5% of its sites pass. Angular passes least at 65.1%. jQuery (the most-used framework) sits at 80.1%. The gap is 23 percentage points.

The State of Web Vitals · October 2026 · 193,102 sites · phone field datacorewebvitals.io/state-of-cwv
2

The ranking sorted by LCP at p75, fastest first

# Framework LCP p75 Passing Sites
1 htmx 2.0s 90.3%
272
2 Alpine.js 2.0s 88.5%
2,451
3 React 2.1s 84.1%
8,639
4 Svelte 2.2s 82.9%
424
5 Next.js 2.2s 83.2%
1,656
6 jQuery 2.3s 80.1%
131,583
7 Vue 2.5s 75.5%
10,931
8 Nuxt 2.7s 69.8%
1,183
9 Gatsby 2.8s 61.7%
199
10 Angular 2.9s 65.1%
3,089
The State of Web Vitals · October 2026 · 193,102 sites · phone field datacorewebvitals.io/state-of-cwv
3

Passing LCP per framework which group passes the LCP most often

FrameworkSitesPassing LCPp75
htmx 0.1% 272 90% 2.0s
Alpine.js 1.3% 2,451 89% 2.0s
React 4.6% 8,639 84% 2.1s
Next.js 0.9% 1,656 83% 2.2s
Svelte 0.2% 424 83% 2.2s
jQuery 69.8% 131,583 80% 2.3s
Remix 0% 49 76% 2.3s
Vue 5.8% 10,931 76% 2.5s
Nuxt 0.6% 1,183 70% 2.7s
Angular 1.6% 3,089 65% 2.9s
Gatsby 0.1% 199 62% 2.8s
Good Needs Improvement Poor Sorted best-passing first · median colored by its own rating · pass = good LCP (2.5s at p75) · one value per site

90% of htmx sites pass LCP. Gatsby trails 28 points behind, leaving 38% of its sites failing. computed

The State of Web Vitals · October 2026 · 193,102 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.8%
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
590.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
67913ms
Nuxt 0.6%
702.7s
85171ms
720.12
682.0s
601.0s
Svelte 0.2%
832.2s
89152ms
850.05
811.6s
68944ms
htmx 0.1%
902.0s
98128ms
920.01
841.6s
571.1s
Gatsby 0.1%
622.8s
69213ms
660.20
911.5s
77762ms
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 LCP: 90% of its sites pass. Gatsby trails at 62%. computed

The State of Web Vitals · October 2026 · 193,102 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, htmx reaches a good LCP on 90.3% of sites; Angular on 65.1%.

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