June 13, 2025
Ever wondered how much JavaScript the typical Next.js application really ships to users? We at Catch Metrics were curious too. So, we embarked on a massive crawl of 300,000 production domains built with Next.js. Our goal? To get a clear, data-backed picture of JavaScript bundle sizes in the wild — from sleek landing pages to intricate SaaS dashboards. The results? Too insightful to keep locked away in a spreadsheet.
Get ready to explore the fascinating, and sometimes startling, world of Next.js bundle sizes.
We sliced our data into deciles, where each decile represents 10% of the 270,000 "lighter" sites. Here's what we found:
The visual trend is clear: as bundle sizes grow, volatility increases. Notice how the boxes in the chart grow taller moving rightward, signaling wider variation (inter-quartile ranges) in bundle sizes. Between deciles 6 and 9, this middle 50% nearly doubles in size, underscoring that controlling bundle size becomes increasingly challenging as your site grows.
Now, let's zoom in on that worst 10%: the applications with the largest JavaScript footprints. Prepare for some eye-opening numbers.
The 99th percentile, which still covers a significant 3,000 sites, is already pushing a median of approximately 17 MB. To put that in perspective, that's nearly 12 times heavier than the median site in the very first decile. In the most extreme case we encountered, a single-page application was attempting to load a jaw-dropping 56 MB of JavaScript. To put that into perspective that means that the bundle contains 2 to 4 million lines of code, depending on line length. Frankly, these figures left us stunned.
Two key observations stand out in this heavyweight category:
Bundle size in megabytes is one thing, but what does this mean for the actual user experience?
We calculated the end-to-end cost, the download and parse time on a typical mid-tier Android phone using a steady 4G network (75 Mbps).
Here’s a quick breakdown of our assumptions:
When we plot this time cost, a familiar pattern emerges: a steady, concerning climb.
Two patterns are particularly striking:
Shockingly, half the sites in the ninth decile already make users wait more than 3 seconds just for their JavaScript to download and parse, even before Next.js can begin to hydrate the page and make it interactive.
Zooming into the heaviest cohort, the scale of these delays becomes almost unreal.
For the heaviest bundles, the scale is astonishing:
Download our service guide to understand how we can help you optimise your site speed
These aren't just minor slowdowns; they indicate serious underlying issues.
This picture truly is worth a thousand words and begs the question: Why is this happening?
A JavaScript "bundle" is a compressed package of files your build tool creates for web browsers. Its size directly influences:
If either of these stages takes too long, users are left waiting for the page to become interactive, even if the basic HTML structure has already appeared. On devices with limited resources, there's even a third bottleneck: memory pressure while the JavaScript is running.
Large bundles directly impact users in several critical ways:
The consequences of bloated bundles extend into tangible business metrics:
JavaScript bundle size isn't just a technical detail; it's a critical factor that has a direct correlation with:
Is your Next.js application performing optimally, or could bundle bloat be holding it back?
If you're concerned about your site's bundle sizes and want to ensure the best possible performance, reach out to us at Catch Metrics! We can help.
Download our service guide to understand how
we can help you optimise your site speed