Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

Field data PhoneDesktopAll Scope All sites Q1 2026 edition · All devices 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
1.9s
Best LCP (p75)
Alpine.js
The State of Web Vitals · Q1 2026 · 94,910 sites · all devices field datacorewebvitals.io/state-of-cwv
2

The ranking sorted by LCP at p75, fastest first

# Framework LCP p75 Passing Sites
1 Alpine.js 1.9s 88.7%
1,306
2 htmx 1.9s 89.7%
141
3 React 2.0s 85.9%
4,396
4 Svelte 2.1s 82.6%
219
5 Next.js 2.2s 84.6%
854
6 jQuery 2.2s 81.1%
67,958
7 Vue 2.4s 77.4%
5,677
8 Gatsby 2.5s 74.5%
105
9 Nuxt 2.6s 71.3%
628
10 Angular 2.9s 65.7%
1,658
The State of Web Vitals · Q1 2026 · 94,910 sites · all devices field datacorewebvitals.io/state-of-cwv
3

Passing LCP per framework which group passes the LCP most often

FrameworkSitesPassing LCPp75
htmx 0.1% 141 90% 1.9s
Alpine.js 1.4% 1,306 89% 1.9s
React 4.6% 4,396 86% 2.0s
Next.js 0.9% 854 85% 2.2s
Svelte 0.2% 219 83% 2.1s
jQuery 71.6% 67,958 81% 2.2s
Remix 0% 26 81% 2.3s
Vue 6% 5,677 77% 2.4s
Gatsby 0.1% 105 75% 2.5s
Nuxt 0.7% 628 71% 2.6s
Angular 1.7% 1,658 66% 2.9s
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. Angular trails 24 points behind, leaving 34% of its sites failing. computed

The State of Web Vitals · Q1 2026 · 94,910 sites · all devices 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.2s
97104ms
880.03
741.8s
521.4s
Vue 6%
772.4s
95128ms
830.06
711.9s
521.3s
React 4.6%
862.0s
95103ms
920.01
821.5s
661.1s
Angular 1.7%
662.9s
89158ms
560.24
712.0s
77749ms
Alpine.js 1.4%
891.9s
97115ms
910.03
831.6s
571.1s
Next.js 0.9%
852.2s
70219ms
680.16
831.6s
68877ms
Nuxt 0.7%
712.6s
90155ms
690.14
721.9s
601.0s
Svelte 0.2%
832.1s
93146ms
870.04
811.6s
69942ms
htmx 0.1%
901.9s
9999ms
850.04
831.5s
501.1s
Gatsby 0.1%
752.5s
82179ms
640.19
921.4s
77782ms
Remix 0%
812.3s
96124ms
690.13
691.9s
461.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 LCP: 90% of its sites pass. Angular trails at 66%. computed

The State of Web Vitals · Q1 2026 · 94,910 sites · all devices 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, Alpine.js reaches a good LCP on 88.7% of sites; Angular on 65.7%.

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