Vite became the default build tool for most new front-end projects by being fast in development. Production builds were another story: they used Rollup, a JavaScript bundler, while development used esbuild. Two tools meant two sets of behaviour, and large apps waited a long time for builds.

Vite 8 changes that. It uses Rolldown, a bundler written in Rust, for both development and production, with Oxc handling parsing and transforms. This guide explains what that means and how to upgrade with minimum risk.

What actually changed

  • One bundler. Rolldown replaces both esbuild and Rollup inside Vite. Development and production now share the same bundling behaviour, which removes a class of "works in dev, breaks in build" bugs.
  • Rust-based tooling. Rolldown and Oxc are both led by VoidZero, the company behind Vite. Oxc provides the parser, transformer and minifier.
  • Rollup-compatible plugin API. Rolldown keeps Rollup's plugin interface, so most Vite and Rollup plugins work unchanged.
  • React plugin without Babel by default. @vitejs/plugin-react v6 uses Oxc for React Refresh, so Babel is no longer on the default path.

Build speed improvements depend heavily on project size. Small apps may only see a few seconds saved; large monorepos are where the Rust bundler helps most. Measure your own build rather than trusting headline numbers.

Before you upgrade

Check three things first:

  • Node.js version. Use a current LTS release and check the Vite 8 migration guide for the exact minimum.
  • Plugins. List every plugin in vite.config.ts and check its changelog for Vite 8 or Rolldown notes.
  • Framework support. If you use a framework built on Vite (Astro, SvelteKit, Nuxt, React Router, TanStack Start), upgrade through the framework's own release rather than bumping Vite directly.

Step 1: try Rolldown on Vite 7

The Vite team recommends a two-step path. First, keep Vite 7 but swap in the rolldown-vite package. That isolates any Rolldown-specific problems from other Vite 8 changes.

In package.json, alias vite to rolldown-vite:

json
{
  "devDependencies": {
    "vite": "npm:rolldown-vite@latest"
  }
}

Reinstall, then run your usual checks:

bash
pnpm install
pnpm build
pnpm test
pnpm preview

If the build and tests pass and the preview looks right, Rolldown is compatible with your project.

Step 2: upgrade to Vite 8

Remove the alias and install Vite 8 and the matching official plugins:

bash
pnpm add -D vite@^8 @vitejs/plugin-react@^6

Run the same checks again. If anything breaks now but did not in step 1, the cause is a non-Rolldown change, and the migration guide is the place to look.

Config options that map differently

Vite 8 includes a compatibility layer that translates common options, so most configs work unchanged. Still, review these areas:

  • `build.rollupOptions` is supported through the compatibility layer, with Rolldown equivalents available under the newer option names. Check the migration guide for options that are not supported.
  • `esbuild` options for JSX or decorators move to Oxc-based transform options.
  • Manual chunks. If you hand-tuned manualChunks, compare output sizes before and after; Rolldown's chunking can differ.
  • CommonJS dependencies. Interop is handled differently from the old Rollup plugin. Test any older CJS-only packages carefully.

What to verify after the upgrade

Builds succeeding is not the finish line. Check:

  1. Bundle output. Compare file sizes and chunk counts with the previous build. A tool like rollup-plugin-visualizer still works.
  2. Source maps. Make sure error tracking still maps stack traces to the right lines.
  3. CSS order. Look at pages that depend on stylesheet order, which is a common source of subtle visual changes.
  4. Environment variables. Confirm import.meta.env values are replaced as before.
  5. Dev server. Test hot module replacement on a large component tree.

If you hit a plugin problem

  • Update the plugin first; many maintainers shipped Rolldown fixes during the beta.
  • Check whether the plugin does something Vite now does natively, and remove it if so.
  • As a last resort, pin the project to Vite 7 and open an issue with a minimal reproduction. Vite 7 continues to receive fixes for a period after Vite 8, so you are not stuck.

Key takeaways

  • Vite 8 uses Rolldown for dev and production builds, with Oxc for parsing and transforms.
  • Most configs and plugins work thanks to Rollup-compatible APIs and a compatibility layer.
  • Upgrade in two steps: rolldown-vite on Vite 7, then Vite 8.
  • Frameworks built on Vite should be upgraded through their own releases.
  • Verify bundle output, source maps and CSS order, not just that the build passes.

Sources: Vite 8 beta announcement, Vite migration guide, Rolldown documentation.