Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

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

The ranking sorted by LCP at p75, fastest first

# Framework LCP p75 Passing Sites
1 htmx 1.7s 97.3%
141
2 Alpine.js 1.7s 92.8%
1,306
3 Svelte 1.9s 88.3%
219
4 Next.js 2.0s 86.1%
854
5 jQuery 2.0s 85.5%
67,958
6 Vue 2.1s 83.0%
5,677
7 Gatsby 2.2s 83.0%
105
8 React 2.3s 80.5%
4,396
9 Nuxt 2.5s 75.8%
628
10 Angular 2.5s 74.1%
1,658
The State of Web Vitals · Q1 2026 · 94,910 sites · desktop field datacorewebvitals.io/state-of-cwv
3

Passing LCP per framework which group passes the LCP most often

FrameworkSitesPassing LCPp75
htmx 0.1% 141 97% 1.7s
Alpine.js 1.4% 1,306 93% 1.7s
Svelte 0.2% 219 88% 1.9s
Next.js 0.9% 854 86% 2.0s
Remix 0% 26 86% 2.0s
jQuery 71.6% 67,958 86% 2.0s
Vue 6% 5,677 83% 2.1s
Gatsby 0.1% 105 83% 2.2s
React 4.6% 4,396 81% 2.3s
Nuxt 0.7% 628 76% 2.5s
Angular 1.7% 1,658 74% 2.5s
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

97% of htmx sites pass LCP. Angular trails 23 points behind, leaving 26% of its sites failing. computed

The State of Web Vitals · Q1 2026 · 94,910 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 71.6%
862.0s
9962ms
780.09
801.6s
571.2s
Vue 6%
832.1s
9976ms
720.12
811.6s
611.1s
React 4.6%
812.3s
9965ms
790.08
791.6s
531.4s
Angular 1.7%
742.5s
97104ms
470.29
791.7s
82609ms
Alpine.js 1.4%
931.7s
10066ms
800.08
891.4s
621.1s
Next.js 0.9%
862.0s
94112ms
660.14
851.4s
71856ms
Nuxt 0.7%
762.5s
98101ms
650.16
781.7s
631.0s
Svelte 0.2%
881.9s
9986ms
790.08
871.4s
73867ms
htmx 0.1%
971.7s
10060ms
780.08
951.3s
621.1s
Gatsby 0.1%
832.2s
83130ms
650.13
941.0s
86624ms
Remix 0%
862.0s
10088ms
710.11
791.6s
461.1s
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: 97% of its sites pass. Angular trails at 74%. computed

The State of Web Vitals · Q1 2026 · 94,910 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, htmx reaches a good LCP on 97.3% of sites; Angular on 74.1%.

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