Back to all posts
Guide
9 min read

Webpack Alternatives in 2026, Benchmarked

DevToolLab Team

DevToolLab Team

September 20, 2026

Webpack Alternatives in 2026, Benchmarked

Webpack Alternatives In 2026

Every frontend project eventually hits the same wall: the build got slow enough that people stopped running it locally, and CI minutes became a line item someone asks about. The config still works, nobody wants to touch it, and the incremental rebuild that used to take two seconds now takes twenty.

I generated the same module graph four times and timed a production build on each bundler. At 2,000 modules, webpack 5.111.1 took 16,494 ms and esbuild 0.28.2 took 181 ms on identical input. That is 91 times slower, and the gap widens with graph size. Every version, license and download count below was read off npm and each project's own site on September 20, 2026.

What Teams Actually Run

npm weekly downloads are the least flattering adoption number available, because nobody downloads a bundler by accident. For the week of September 13 to 19, 2026: esbuild 201,739,347, Vite 131,993,354, Rollup 92,165,022, Rolldown 68,970,134, webpack 41,249,519, Turborepo 17,794,042, Rspack 6,017,306, and Parcel 290,733.

Read esbuild's number with care. It is the highest on the list not because most teams run it directly, but because Vite and dozens of frameworks depend on it for transforms, so it rides along with other installs. The honest signal in that table is that Vite passed webpack by more than 3 to 1, and that Rolldown, which did not exist in production form two years ago, already sees 69 million weekly downloads because it now ships inside Vite.

Webpack is not dying. Forty-one million weekly downloads is an enormous installed base, and it is still the most flexible plugin system here. It is just no longer the default answer for a new project.

What the Same Build Costs on Each Bundler

I built a synthetic module graph rather than quoting anyone's marketing benchmark. Each module exports a small function, an entry file imports all of them, and every bundler gets the same input, production mode, minification on, no source maps. Here is the generator:

js
// gen.mjs - N leaf modules plus an entry that imports all of them
import { writeFileSync, mkdirSync, rmSync } from "node:fs"
const N = Number(process.argv[2] ?? 500)
rmSync("src", { recursive: true, force: true }); mkdirSync("src", { recursive: true })
for (let i = 0; i < N; i++) {
  writeFileSync(`src/mod${i}.js`, `
export const name${i} = "module-${i}";
export function compute${i}(input) {
  let acc = 0;
  for (let k = 0; k < 8; k++) acc += (input ?? 1) * ${i} + k;
  return { id: ${i}, name: name${i}, acc };
}
export default compute${i};
`)
}
writeFileSync("src/index.js",
  Array.from({length:N},(_,i)=>`import c${i} from "./mod${i}.js";`).join("\n") +
  `\nconst all = [${Array.from({length:N},(_,i)=>`c${i}`).join(",")}];\n` +
  `export const total = all.reduce((s, f, i) => s + f(i).acc, 0);\n`)
console.log(`generated ${N} modules + entry`)

Each bundler then ran three times with its output directory deleted between runs, on Node 25.5.0. Best of three:

text
500 modules, production build, minified, no sourcemaps, best of 3

Bundler         Best    Median     Output   vs fastest
---------- --------- --------- ----------  ----------
esbuild       106 ms    112 ms    58.8 KB   1.0x
Rspack        445 ms    461 ms    46.6 KB   4.2x
Vite          567 ms    570 ms    82.7 KB   5.4x
webpack      2874 ms   2958 ms    46.7 KB   27.2x

2000 modules, production build, minified, no sourcemaps, best of 3

Bundler         Best    Median     Output   vs fastest
---------- --------- --------- ----------  ----------
esbuild       181 ms    181 ms   243.8 KB   1.0x
Rspack        560 ms    561 ms   190.2 KB   3.1x
Vite          659 ms    695 ms   335.6 KB   3.6x
webpack     16494 ms  17097 ms   190.2 KB   91.3x

Two things matter more than the headline. First, webpack is the only one whose cost explodes with graph size: quadrupling the modules took it from 2.9 seconds to 16.5 seconds, while esbuild went from 106 ms to 181 ms. Second, esbuild's speed is not free. It produced the largest output of the three fast bundlers at 500 modules, 58.8 KB against Rspack's 46.6 KB, because its optimizer does less work than webpack's. Rspack matched webpack's output size to within 0.1 KB, which is what a webpack-compatible design is supposed to do.

This is a synthetic graph with no JSX, CSS or node_modules resolution, so treat it as a floor on the difference, not a prediction for your app.

webpack

webpack is still the most capable bundler here and the reason every other tool on this list describes itself in terms of webpack compatibility.

webpack homepage headlined "bundle your scripts" with a diagram showing .js, .hbs, .sass and .png modules with dependencies feeding through the webpack cube into static assets
webpack homepage headlined "bundle your scripts" with a diagram showing .js, .hbs, .sass and .png modules with dependencies feeding through the webpack cube into static assets

Nothing else matches its loader and plugin ecosystem, and for a large application with unusual asset pipelines and a decade of accumulated config, that ecosystem is the whole argument. Module Federation still originates here.

What it does not do is finish quickly. The 91x gap at 2,000 modules is not a tuning problem you can configure away, because it is the cost of a JavaScript-based pipeline doing work that Rust and Go do in parallel. Persistent caching helps warm builds and does nothing for a cold CI runner.

Pricing: free and open source, no paid tier.

License and version: MIT, 65,944 stars, v5.111.1 as of September 18, 2026.

esbuild

esbuild is the speed baseline every other bundler is measured against, and it is written in Go rather than Rust.

esbuild homepage with a bar chart showing esbuild at 0.39s against parcel 2 at 14.91s, rollup 4 plus terser at 34.10s and webpack 5 at 41.21s
esbuild homepage with a bar chart showing esbuild at 0.39s against parcel 2 at 14.91s, rollup 4 plus terser at 34.10s and webpack 5 at 41.21s

Its own site states the project's premise plainly: "Our current build tools for the web are 10-100x slower than they could be." The chart above is esbuild's published benchmark, bundling ten copies of three.js with minification and source maps, and it puts webpack 5 at 41.21 seconds against esbuild's 0.39. My independent run on a completely different workload measured 91x, inside the range esbuild claims, which is unusual for a vendor benchmark.

What it does not do is replace webpack for an application build. There is no first-class CSS pipeline beyond CSS modules, no HMR server, no code-splitting story as rich as webpack's, and the plugin API is deliberately small. Most teams consume esbuild through Vite or a framework rather than directly.

Pricing: free and open source.

License and version: MIT, 40,064 stars, v0.28.2 as of August 8, 2026.

Rspack

Rspack is the one option here that asks you to change almost nothing, because it reimplements webpack's API in Rust.

Rspack homepage headlined "Fast Rust-based bundler for the web" with the subtitle "Seamlessly replace webpack with modernized webpack API"
Rspack homepage headlined "Fast Rust-based bundler for the web" with the subtitle "Seamlessly replace webpack with modernized webpack API"

Its own homepage promises to "seamlessly replace webpack with modernized webpack API" and claims compatibility with community webpack plugins and loaders. My benchmark supports the compatibility claim in the way that counts: Rspack produced 190.2 KB at 2,000 modules against webpack's 190.2 KB, an identical bundle, while finishing in 560 ms instead of 16,494 ms. Rspack publishes its own numbers too, quoting 3.35s build against webpack's 28.10s.

What it does not do is guarantee your specific plugins work. Compatibility is broad but not total, and the further your config drifts from mainstream loaders, the more likely you hit a gap. Its 6 million weekly downloads against webpack's 41 million also means fewer people have hit your bug first.

Pricing: free and open source.

License and version: MIT, 12,912 stars, v2.2.6 as of September 17, 2026.

Vite and Rolldown

Vite is the default choice for new frontend projects, and as of version 8 it no longer bundles with Rollup.

Vite homepage headlined "The Build Tool for the Web" with the version selector showing v8.3.0 and an npm create vite@latest command
Vite homepage headlined "The Build Tool for the Web" with the version selector showing v8.3.0 and an npm create vite@latest command

This is the change most teams have not noticed yet. Vite 8.3.0 declares Rolldown as a dependency and Rollup is not installed at all in a fresh Vite 8 project. Rolldown is a Rust bundler with a Rollup-compatible plugin interface, which is how Vite swapped its production bundler without breaking the plugin ecosystem. That migration is why Rolldown already sees 69 million weekly downloads.

What it does not do is win on raw throughput. Vite finished at 659 ms to esbuild's 181 ms in my run and produced the largest bundle of the four at 335.6 KB, because library mode preserves more structure than a straight esbuild bundle. You pay that for a real dev server, HMR, CSS handling and a plugin ecosystem, which is usually the right trade.

Pricing: free and open source.

License and version: Vite MIT, 82,912 stars, v8.3.0; Rolldown MIT, 13,950 stars, v1.2.9 as of September 16, 2026.

Turbopack

Turbopack is the only bundler here you cannot adopt on its own, because it ships inside Next.js.

Next.js documentation page for Turbopack describing it as an incremental bundler written in Rust and built into Next.js, with Next.js version 16.3.5 in the sidebar
Next.js documentation page for Turbopack describing it as an incremental bundler written in Rust and built into Next.js, with Next.js version 16.3.5 in the sidebar

Next.js 16, announced October 21, 2025, made Turbopack the "default bundler for all apps with up to 5-10x faster Fast Refresh, and 2-5x faster builds." Its docs describe it as an incremental bundler written in Rust that caches results down to the function level and persists them to disk between runs, which is a different bet from esbuild's: win on rebuilds rather than on cold starts.

What it does not do is exist outside Next.js. There is no standalone Turbopack you can point at a Vue or Svelte project, and the Next.js docs still carry a "Using Webpack instead" escape hatch for configs that have not migrated. If you are not on Next.js, this row is informational.

Pricing: free and open source as part of Next.js.

License and version: MIT, shipped in Next.js v16.3.5 as of September 11, 2026.

Side by Side

BundlerLanguageDrop-in for webpackWeekly downloadsLicense
webpackJavaScriptn/a41,249,519MIT
esbuildGoNo201,739,347MIT
RspackRustYes, config-compatible6,017,306MIT
ViteJS plus Rust (Rolldown)No, different model131,993,354MIT
TurbopackRustNext.js onlyships in Next.jsMIT

How to Choose Without Rewriting Your Config

  1. Time your actual cold build first. Run your real production build on a clean checkout with no cache and write the number down. Every claim on this page, mine included, is a synthetic graph and not your app.
  2. If you are on Next.js, you are already done. Turbopack is the default in Next.js 16. The decision is whether to keep using the webpack escape hatch, not which bundler to adopt.
  3. If webpack config is the asset, try Rspack before anything else. It is the only option that reads your existing config, and my run showed it producing a byte-identical bundle to webpack's. A failed migration costs you an afternoon.
  4. If you are starting fresh, start with Vite. It is the default for a reason, and since version 8 you get a Rust bundler underneath without changing how you write plugins.
  5. Reach for esbuild directly only for libraries and scripts. It is the fastest thing here by a wide margin and the least complete. That trade works for a package build and fights you on an application.

Which One Should You Actually Use?

Large webpack app, slow CI, config you cannot rewrite: Rspack. It is the only tool on this list designed to be a config-compatible swap, and it produced identical output to webpack in my benchmark at roughly 29 times the speed.

New frontend project, any framework: Vite. The 132 million weekly downloads are not a fashion; you get a dev server, HMR, plugins and, since version 8, Rolldown underneath.

Already on Next.js: Turbopack, which you are using by default on Next.js 16 whether you chose it or not. Spend the effort removing the webpack fallback, not evaluating alternatives.

Publishing a library or bundling a CLI: esbuild. No dev server needed, no CSS pipeline needed, and 181 ms on a 2,000-module graph is hard to argue with.

Unusual asset pipeline, exotic loaders, Module Federation: stay on webpack and budget CI minutes accordingly. Flexibility is what it still wins on.

Conclusion

The interesting shift this year is not that Rust bundlers are faster, which everyone expected. It is that the ecosystem stopped asking you to choose. Rspack speaks webpack's config, Rolldown speaks Rollup's plugin API, and Turbopack hides inside Next.js. Nobody is asking you to rewrite anything, which is why these migrations are actually happening.

Before you plan a migration, ask one question: is your build slow because of the bundler, or because of what you are asking it to bundle? A 91x bundler gap disappears fast when the real cost is a 40 MB dependency you import for one function.

  • Bundle Stats Analyzer - load your build's stats output and see which modules actually account for the bundle before blaming the bundler.
  • npm Package Size Checker - check what a dependency weighs before it lands in the graph you just benchmarked.
  • JavaScript Minifier - compare minified output by hand when two bundlers disagree about how small a file should get.
  • Source Map Decoder - map a stack trace from a minified production bundle back to the original source after you switch bundlers.

Related Posts

Best API Gateways in 2026: Costs Compared

Kong, Traefik, Apache APISIX, KrakenD, Tyk and Amazon API Gateway compared on the prices their own pages publish, with a script that prices your own traffic.

By DevToolLab Team

Firebase Alternatives in 2026, Priced

Supabase, Appwrite, Convex and PocketBase priced against Firebase on one app, with licenses and versions as of September 2026. One of them is not open source.

By DevToolLab Team

System One Models vs LLM JSON in 2026

TypeSafe's Jev answers in 70 to 500 ms and Convai's Laya is Apache 2.0 on your own GPU. When a typed decision model beats constrained JSON from an LLM.

By DevToolLab Team