Webpack vs Vite: What a Bundler Does and Which One to Use
Bundlers turn your source files into the optimised JavaScript and CSS a browser loads. How Webpack and Vite differ — bundling everything up front vs serving native modules in development — speed, configuration, migration, and where Turbopack and Rspack fit.
You write your app as dozens or hundreds of files — components, styles, images, TypeScript. Browsers work best with a small number of optimised files. A bundler is the tool that turns one into the other.
Webpack was the standard for most of the 2010s. Vite has largely replaced it for new projects. Here's what changed.
What a bundler does
- Follows your
importstatements to find every file the app uses - Converts TypeScript, JSX and modern syntax into JavaScript browsers understand
- Combines files into bundles and splits them into chunks loaded on demand
- Minifies code, removes unused code ("tree-shaking"), adds hashed file names for caching
- Handles CSS, images and fonts
Webpack: bundle everything first
Webpack builds a complete bundle of your app before it can show you anything — in development too. On a big project, starting the dev server can take a long time, and each change triggers a rebuild.
It's extremely flexible: a huge ecosystem of loaders and plugins can handle almost any setup. The price is configuration — a webpack.config.js can grow very large.
Vite: serve source files, bundle only for production
Vite takes a different approach in development: it doesn't bundle your app at all. Modern browsers understand import natively, so Vite serves your files almost as-is and transforms each one on request. The dev server starts in well under a second, and hot reload stays fast no matter how big the project gets.
For production, Vite does bundle — as of Vite 8 with Rolldown, a fast bundler written in Rust. (What is Vite?)
Configuration is minimal; for a React app it's a few lines.
Side by side
| Webpack | Vite | |
|---|---|---|
| Dev server start | Slow on big projects | Near-instant |
| Hot reload | Slows as project grows | Stays fast |
| Config | Powerful but verbose | Minimal, sensible defaults |
| Ecosystem | Huge, mature | Large and growing fast |
| Used by | Older Create React App projects, many enterprise apps | New React/Vue/Svelte apps, most AI app builders |
Where the others fit
- Turbopack — Vercel's Rust-based successor to Webpack, now the default bundler in Next.js. If you use Next.js, you don't choose; it's built in. (What is Next.js?)
- Rspack — a Rust rewrite largely compatible with Webpack's config and plugins. A faster drop-in for existing Webpack projects.
- esbuild — an extremely fast bundler, often used underneath other tools.
- Parcel — zero-config bundler, less common now.
Which should you use?
- New project without a framework that picks for you: Vite.
- Next.js: whatever Next.js uses (Turbopack); nothing to choose.
- Existing Webpack project that works: no urgency. If dev speed hurts, look at Rspack (easiest) or migrating to Vite.
- Old Create React App project: CRA is no longer maintained; migrating to Vite is the usual path.
Migrating from Webpack to Vite (the short version)
- Install
viteand the plugin for your framework (@vitejs/plugin-react). - Move
index.htmlto the project root and add<script type="module" src="/src/main.tsx">. - Rename environment variables from
REACT_APP_toVITE_and read them withimport.meta.env. (Environment variable undefined?) - Replace Webpack-specific features (
require.context, custom loaders) with Vite equivalents. - Update
package.jsonscripts tovite,vite build,vite preview.
An AI coding agent is genuinely good at this kind of mechanical migration — with tests or a working build as its check.
EasySpawn builds your Vite, Webpack or Next.js app on a server sized for fast builds, then serves the result with HTTPS. See how it works or join the waitlist.
Related: What Is Vite? · npm run dev vs build vs start · ESM vs CommonJS · What Is a Framework?
Keep reading
zsh vs bash: What's the Difference and Which Should You Use?
bash and zsh are both shells — the programs that read your terminal commands. Why macOS switched to zsh, the differences you'll actually notice (config files, completion, globbing, arrays), Oh My Zsh, and why scripts should usually still be written for bash.
What Is Gemini CLI? And What Happened When It Became Antigravity CLI
Gemini CLI was Google's open-source AI coding agent for the terminal, with a famously generous free tier. In June 2026 Google replaced it for individual users with Antigravity CLI. What Gemini CLI does, who can still use it, and what to use now.