What is Vite?

Vite is a modern build tool for frontend development. It was created by Evan You - the same person behind Vue.js - and has quickly become one of the most popular tools in the JavaScript ecosystem. Whether you are building a small side project or a large-scale production application, Vite changes how development feels.

The name means fast in French, and that is the whole point. Vite focuses on two things in tension on most projects: fast local development and optimized production output. It is widely used across frontend frameworks and shares its plugin model with Rollup and Rolldown, with Vite-specific options layered on top - so the plugin ecosystem you build on is large from day one.

The build tool for the web.- vite.dev

The problem with traditional bundlers

For years, tools like Webpack, Parcel, and Browserify defined how developers built for the web. They work by crawling your entire dependency graph, bundling every module together, and serving the result to the browser. In the early days of JavaScript, this made sense. Browsers could not handle raw modules natively, so bundling was a necessity.

But as applications grew, the cost became hard to ignore. Large codebases started taking ten, twenty, even thirty seconds to boot a dev server. Every time you changed a file, the bundler had to re-process significant chunks of the project before the browser could reflect the update. The feedback loop - the thing that makes development feel alive - got slow and sluggish.

Developers learned to live with it. But they did not have to.

Lineage and inspiration

Vite did not appear from nowhere. It builds on several earlier attempts to escape the bundle-everything-up-front model.

  • Snowpack pioneered unbundled development using native ES modules, and showed that pre-bundling third-party dependencies was the right trade-off. It is the direct inspiration for Vite's dependency pre-bundling.
  • WMR, by the Preact team, demonstrated a universal plugin API that worked in both the dev server and the production bundler - the model Vite extended.
  • @web/dev-server (formerly es-dev-server) shaped the architecture of Vite's first dev server.

Each project nudged the ecosystem closer to where Vite landed. Vite absorbed those ideas, paired them with native-speed tooling, and added the production build pipeline that earlier experiments did not have.

The Vite approach

Vite splits development into two distinct phases - serving and building - and during dev it splits your project into two kinds of code, treated differently. Dependencies (everything under node_modules) are pre-bundled once before the dev server starts and cached on disk; the browser fetches each one in a single request. Source code (your application code) is served on demand over native ES modules, with each file transformed only when the browser actually asks for it. The dev server is ready in milliseconds, no matter how large the project is.

For production, Vite uses Rolldown - a new Rust-powered bundler from the same team - to produce a tree-shaken, chunk-split, content-hashed build. Rolldown is compatible with the Rollup plugin API the ecosystem already built on, so plugins keep working through the transition. Underneath sits Oxc, the unified Rust parser, transformer, and minifier the same team is building in parallel.

Going deeper? If you want the technical details - dependency pre-bundling internals, the HMR module graph, why bundling still matters for production, and how Rolldown and Oxc unify the toolchain - read How Vite works, the Level 401 companion to this article.

Vite's opinions

Vite is not a neutral tool. It provides opinionated features designed to push you toward writing modern code, and those opinions are part of the deal you make when you adopt it.

  • Source code is ESM only. Your application code is written in ECMAScript modules. Non-ESM dependencies are pre-bundled as ESM behind the scenes so they still work, but the source you write is modern from day one.
  • Web workers use the modern syntax. Vite expects new Worker(new URL('./worker.js', import.meta.url), { type: 'module' }) - the same pattern modern browsers and edge runtimes settled on.
  • Node.js built-ins do not run in the browser. Modules like fs, path, or os can only be used in server-side code, not in code that ships to the browser. Vite refuses to paper over this with shims.

The trade-off is straightforward. These choices keep Vite aligned with where the web is going, which is what makes it future-proof - but they can be incompatible with older packages or toolchains that have not made the move to ESM yet. If you hit a library that has not, the usual fix is to find a maintained ESM-first replacement.

What it supports out of the box

One of Vite's strengths is how much it handles without configuration. The defaults are opinionated and sensible - the bar you would expect from a tool you start using in five minutes.

Vite works across frameworks. It has official templates for Vue, React, Svelte, Solid, Lit, and vanilla JavaScript. Switching stacks does not mean switching tools.

  • TypeScript and JSX compile out of the box - no plugin required.
  • CSS modules, PostCSS, Sass, Less available with minimal setup.
  • Static assets (images, fonts, SVG, JSON, WebAssembly) imported like any other module.
  • Web Workers and SSR supported natively for frameworks that build on top.
  • Optimized builds with tree shaking, minification, and chunking controls.

Requirements are deliberately current: Node.js 20.19+ or 22.12+, and any modern browser that supports native ES modules.

The plugin ecosystem

Vite's plugin API is shared with Rollup and Rolldown, which means the ecosystem is large and well-established from day one. There are plugins for everything: legacy browser support, PWA generation, i18n, testing integrations, framework adapters, and more. Writing your own plugin is straightforward if you need custom behavior.

Where Vite isn't the build tool

Vite is not always the production bundler in a project, even when it is everywhere in the ecosystem. Some frameworks have framework-specific compilation requirements - templates, component metadata, dependency injection, hard-wired build configurations - and ship their own build pipeline as the source of truth.

In those projects you might still use Vite as a fast development server or a static file server in front of compiled output, but the production build itself is owned by the framework. The signal to look for is simple: if your framework's CLI is the documented way to build for production, that is the source of truth - and Vite, where it appears, sits alongside it rather than replacing it.

Why developers choose it

Speed is the obvious draw, but it is not the only one. Vite's configuration is minimal and readable. The documentation is clear. The defaults are sensible. It is a tool that gets out of your way and lets you focus on building.

The adoption story is in who built on top of it. SvelteKit uses Vite as its build engine. Nuxt is built on top of it. Astro ships with Vite under the hood. React Router, Analog, and SolidStart chose Vite as their foundation. Vitest, the project's sibling test runner, is built on Vite. Storybook integrates with it. On the backend side, Laravel and Ruby on Rails ship Vite integrations as the recommended way to handle their frontend assets.

The project is stewarded by VoidZero, the company Evan You co-founded to keep Vite, Vitest, Rolldown, and Oxc moving forward as a coherent toolchain.

If you have felt the friction of slow startup times and sluggish updates, Vite is the answer most teams reach for now. It does not just make development faster - it makes it feel the way it always should have.