You change one line, save, and wait. On a mid-sized React codebase, Webpack takes 379 ms per hot reload (the mechanism that updates the browser after a saved change), and over five seconds to start its dev server, while Rspack starts in about one second and Vite applies hot updates in roughly 150 ms. Multiply that gap across a full workday and the waiting adds up.
If you run Strapi 5, this decision has already been made for one part of your stack: Vite is the default bundler for the Admin Panel.
In brief:
- Vite 8 replaced its old esbuild + Rollup pipeline with Rolldown, a Rust bundler that cuts production builds by 10-30x according to the Vite team.
- Rspack, a Rust-based near-drop-in Webpack replacement from ByteDance, grew from 100,000 to five million weekly downloads between its 1.0 and 2.0 releases.
- Webpack remains active in 2026; it still fits legacy codebases that depend on its loader and plugin ecosystem.
- Snowpack has been deprecated since April 2022; its maintainers recommend Vite, and any article still treating it as a live option is out of date.
Webpack alternatives at a glance
The numbers below come from the rstackjs benchmark (2026-07-18, react-1k workload, GitHub Actions, with minification and source maps turned on) unless noted otherwise. Minification removes unnecessary code characters, and source maps map generated code back to the original source. Benchmark results shift with workload and version, so treat these as directional estimates.
| Tool | Version tested | Dev startup | Hot module replacement (HMR) | Production build | Best fit |
|---|---|---|---|---|---|
| Webpack | 5.108.4 | 5,247 ms | 379 ms | 4,638 ms | Legacy enterprise codebases, exotic loader chains |
| Vite | 8.1.5 | 6,428 ms | 152 ms | 567 ms | Modern single-page applications (SPAs), framework projects, new builds |
| Rspack | 2.1.4 | 1,097 ms | 148 ms | 630 ms | Migrating Webpack-heavy codebases |
| Parcel | 2.16.4 | 4,273 ms | 298 ms | 4,288 ms | Prototypes, small apps, mixed-skill teams |
| esbuild | 0.28.1 | n/a | n/a | 783 ms* | Continuous integration (CI) pipelines, library transpilation |
| Rollup | 4.62.2 | n/a | n/a | 8,801 ms* | Library and package publishing |
*esbuild and Rollup figures are from the popular-libs production workload in the same benchmark suite.
Rspack has the fastest dev startup in this benchmark, and Vite's raw dev-server startup on this workload is slower than Webpack's. That second number needs context: Vite's lazy file serving uses native ECMAScript modules (ESM). Test each tool against your own codebase before committing.
Webpack remains active in 2026
Webpack sits at v5.109.2 per the Webpack release page (July 2026), with 55.7 million weekly npm downloads per npm data, and its 2026 roadmap describes active work toward Webpack 6. The v5.109 release added built-in TypeScript support (on Node.js 22.6 or later, no loader required). It also added import.meta.glob and automatically turned on Cascading Style Sheets (CSS) and Hypertext Markup Language (HTML) experiments.
Our bundler comparison guide covers the broader landscape, and the web development trends post tracks how the tooling ecosystem is shifting.
Webpack still makes sense for complex legacy codebases with custom loaders, and it remains the Module Federation reference, a system for loading independently built applications or modules at runtime. For many new projects, Vite and Rspack can reduce build times or configuration work, but the result depends on your workload and compatibility requirements.
Modern application bundlers: Vite and Rspack
Vite: a common choice for new projects
Vite's dev server skips upfront bundling entirely. It serves your source code over native ESM on demand and pre-bundles dependencies once, converting CommonJS packages and collapsing things like lodash-es's 600+ internal modules into a single request. Hot updates run through import.meta.hot, so only the changed module reloads (Vite docs).
Vite 8 also changed the underlying build pipeline. Vite historically ran esbuild for dev compilation and Rollup for production builds, which meant two plugin systems and inconsistent behavior between environments. Vite 8, stable since March 2026, replaced both with Rolldown, a single Rust bundler, with Oxc handling JavaScript compilation.
The team reports builds up to 10-30x faster, and real-world migrations back that up: Outline went from 47.27 s to 2.12 s, Excalidraw from 22.9 s to 1.4 s. If your mental model of Vite is still "esbuild plus Rollup," that model now needs updating; guides describing that architecture predate Vite 8.
Getting started, per the official guide:
npm create vite@latest my-vue-app -- --template vue
cd my-vue-app
npm install
npm run devVite 8 requires Node.js 20.19+ or 22.12+. If you're new to how its ESM-first model differs from bundle-everything tools, our explainer on Vite and HMR walks through the mechanics.
There are a few migration considerations to keep in mind:
- Config migration:
build.rollupOptionsis deprecated in favor ofbuild.rolldownOptions, and theesbuildoption gives way tooxc. A compatibility layer auto-converts existing config, but plugins written against Rollup internals may need attention (migration guide). - CommonJS in your own source: Vite doesn't support
require()in application code, and Webpack'srequire.contextbecomesimport.meta.glob(lazy by default; pass{ eager: true }for the old behavior). - Full Bundle Mode is experimental: Vite 8's option to bundle during development shows promising early numbers (3x faster startup, 10x fewer requests), but the development roadmap targets client-side rendering (CSR) support for September 2026 and lists server-side rendering (SSR) as to be determined. It is too early to plan production work around it.
These details matter if you're moving from Webpack config to Vite.
Strapi 5 uses Vite by default to build the Admin Panel; you can customize it through a function in /src/admin/vite.config.js per the bundler docs. Our Strapi 5 guide to Vite and TypeScript covers what that switch means in practice.
Rspack: a Webpack-compatible Rust bundler
Rspack takes the opposite bet from Vite: preserve compatibility with Webpack's API and plugins, and rewrite the engine in Rust.
ByteDance maintains it, and Rspack 2.0 shipped stable in April 2026. The project reports compatibility with almost all community loaders, with more than 85% of the 50 most-downloaded Webpack plugins working directly or through an alternative (Rspack docs).
Weekly downloads grew from 100,000 to five million between 1.0 and 2.0, and @rspack/core now pulls about 8.6 million weekly downloads. Production users at the 1.0 announcement included TikTok, Microsoft, Amazon, and Discord (Rspack 1.0 announcement).
Rspack is also part of a broader toolchain that includes Rsbuild for batteries-included setups and Rslib for libraries. Rsdoctor handles build analysis, and Rspack has first-class Module Federation support, which matters for micro-frontend teams that assumed Webpack was their only option.
Specialized Webpack alternatives: esbuild, Rollup, Rolldown, and Parcel
esbuild: raw speed for CI and transpilation
esbuild is a Go binary that bundles and transpiles JavaScript, TypeScript, and JavaScript XML (JSX) with almost no configuration. On the popular-libs benchmark it built in 783 ms while Webpack took 8,228 ms and Rollup 8,801 ms.
It also has 260 million weekly downloads.
A production build from the official getting-started guide:
esbuild app.jsx --bundle --minify --sourcemap --target=chrome58,firefox57,safari11,edge16esbuild remains on 0.x versioning (currently 0.28.1) with no 1.0 planned. It ships no dev server comparable to Vite's and restricts code splitting (producing smaller chunks loaded on demand) to ESM output, labeling it a work in progress. It tree-shakes only ES modules and does not remove unused CommonJS exports (esbuild API docs).
Rollup and Rolldown: library bundling, then and now
Rollup built its reputation on ESM-first analysis: treating all modules as one abstract syntax tree allows aggressive tree shaking and clean, readable output in ESM, CommonJS, and Universal Module Definition (UMD) formats from a single config (Rollup FAQ). That's why framework authors adopted it, and the claim mostly still holds: React's npm packages and Svelte packages both build with Rollup on their current stable branches, while Vue 3.5 uses Rollup and the 3.6 beta has moved to Rolldown (Vue core repo).
A minimal dual-format library config, noting that the default filename is now rollup.config.mjs (Rollup tutorial):
// rollup.config.mjs
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
export default {
input: 'src/index.js',
output: [
{ file: 'dist/index.cjs', format: 'cjs' },
{ file: 'dist/index.esm.js', format: 'esm' }
],
plugins: [resolve(), commonjs()]
};On a 19,014-module workload, Rollup 4.62.2 took 53.1 seconds where Rolldown 1.1.3 took 1.35 seconds, according to Rolldown benchmarks, roughly on par with esbuild.
Rolldown, maintained by VoidZero and stable since May 2026, exposes a Rollup-compatible plugin API, which is exactly why Vite 8 adopted it.
Rollup itself stays actively maintained, so existing configs aren't on a deprecation clock.
Parcel: zero config, with benchmark caveats
Point Parcel at an entry file and it handles JavaScript, TypeScript, CSS, images, and more without config, with tree shaking and code splitting on by default. The 2.15 release moved HTML and Scalable Vector Graphics (SVG) processing to Rust and cut node_modules size by 45% (Parcel blog).
The setup commands have changed from what older tutorials show. The current getting-started flow:
npm create parcel vanilla my-parcel-app
cd my-parcel-app
npm startThe dev server runs at http://localhost:1234, and your package.json declares the entry point through a source field.
Parcel requires little setup at small scale. On large workloads the benchmarks are unflattering: on the popular-libs workload it built in 23.8 seconds with 5,375 kB of output where Vite finished in 1.25 seconds at 1,816 kB, and its dev-server memory footprint (1,132 MB on react-1k) was the highest of any tool tested.
Deprecated and tool-specific alternatives
What happened to Snowpack?
Snowpack pioneered the unbundled, ESM-native dev server model that Vite later adopted and expanded, and it has been officially deprecated since April 2022. Its homepage states it is no longer actively maintained and is not recommended for new projects, and points to Vite as the maintained alternative. The last release was 3.8.8 in August 2021.
Turbopack and Bun: runtime-specific options
Two more tools come up in every 2026 bundler conversation, with an important caveat each.
Turbopack is stable and the default for new projects as of Next.js 16, with Vercel claiming 5-10x faster Fast Refresh and 2-5x faster production builds. Turbopack is built into Next.js and has no standalone distribution. It does not support Webpack plugins. If you're on Next.js 16, you're likely using it already; teams hitting issues can fall back with the --webpack flag. Our post on Strapi performance tips covers the bundle-size side of that equation.
Bun's bundler (bun build) topped the Rolldown benchmark suite at 742 ms on the 19,014-module workload, ahead of every dedicated bundler. Custom plugins work in the Bun.build() JavaScript API, while the command-line interface (CLI) does not support them. CommonJS (CJS) and immediately invoked function expression (IIFE) output are experimental. Bun's bundler makes the most sense when Bun is already your runtime (Bun bundler docs).
How to choose a Webpack alternative
Choose according to your project's requirements; benchmark rank alone should not determine the decision.
- Migrating from Create React App: React deprecated CRA in February 2025, according to its CRA deprecation notice. Its recommendations include Vite, Parcel, and Rsbuild. Vite is the common pick for its framework templates and available tools. Parcel fits prototypes, small-to-medium apps, and teams that want to avoid build configuration entirely.
- Large Webpack codebase, tight timeline: Rspack. Keeping your existing loaders and plugins while gaining Rust-engine speed offers a smaller migration than rewriting the build for Vite. Vite is a better fit when you're starting fresh and would rather have its tools and framework integrations.
- Micro-frontends with Module Federation: the old advice that Module Federation locks you into Webpack no longer holds. Module Federation 2.0 reached stable in February 2026, per the stable release announcement, with support for Webpack, Rspack, Rollup, and Rolldown, plus Vite through
@module-federation/vite. Webpack remains the reference implementation, and the Vite plugin has documented gaps (no remote hot updates, no manual chunk controls), so complex setups are worth validating before migration. One team migrating a nine-remote architecture reported performance regressions: significantly slower initial loads and larger bundles. - Publishing a library: choose between Rollup and Rolldown if you need the Rollup API. Rollup offers plugin maturity, while Rolldown provides esbuild-class speed. The esbuild-powered tsup build tool fits zero-config TypeScript packages.
- CI bottlenecks: esbuild fits monorepo package builds (where multiple projects or packages share one repository) and anywhere raw compile speed blocks delivery; for application development, you can get esbuild-class speed indirectly through Vite or Rsbuild instead.
- Small apps and prototypes: Parcel or Vite; either gets you from a CLI command to a running dev server quickly.
- Existing Snowpack projects: a migration to Vite is worth planning; starting a new Snowpack project is not a practical choice.
The framework layer may decide for you anyway: Next.js 16 defaults to Turbopack, and Angular 17+ uses esbuild.
Where bundlers fit in a Strapi stack
In a headless architecture, your bundler choice lives entirely in the frontend and admin layers. Strapi 5 (currently 5.50.0) builds its Admin Panel with Vite by default; Webpack remains available by opting in with strapi develop --bundler=webpack, though the terminal warns you when you do (v4-to-v5 breaking change). Teams upgrading from Strapi v4 with custom Webpack configuration need to convert it to Vite config or use that flag.
Your frontend application picks its own bundler independently, whether that's a Strapi-powered Next.js app on Turbopack or a Vite-built SPA. Bundle-size reduction, code splitting, and asset delivery belong to that frontend build and your CDN; Strapi's job is serving content through its APIs. For squeezing more out of whichever tool you land on, our frontend performance checklist covers tree shaking and dynamic imports. It also covers bundle analysis, and the guide to optimizing Strapi apps handles the API side.
Faster builds compound: shorter feedback loops mean more iterations per day and less time waiting on CI, which is why build tooling shows up in most conversations about developer productivity. The tool should match your codebase's reality. Benchmark the tool against your project, and revisit the choice when your framework's defaults shift.





