Vite is the dev server and build tool that npm create vue@latest sets up for a new Vue project. Version 7.0.0 reached npm on 24 June. Its announcement counts 31 million downloads a week, 14 million more than when Vite 6 shipped seven months earlier, and expects a smooth update from Vite 6.
For most Vue apps the upgrade is one install command, once Node is on 20.19 or 22.12. Most apps also get a new default build target, aimed at newer browsers. Rolldown, the Rust bundler planned to replace Rollup and esbuild inside Vite, can be tried now through a separate package.
Vite 7 needs Node 20.19 or 22.12 and ships ESM only
The Node requirement is the change most likely to stop an upgrade. Vite 7 requires Node.js 20.19 or a later 20.x, or 22.12 and newer; the package's engines field reads ^20.19.0 || >=22.12.0. Node 18 is no longer supported, because it reached end of life at the end of April.
Run node -v before anything else. If it prints 18, a 20 older than 20.19 or a 22 older than 22.12, update Node first. A .nvmrc file containing 22 in the project root saves the next person the same surprise.
The two minimums are the first releases on each line in which require(esm) works without a flag, meaning CommonJS code can load an ES module. That let the Vite team distribute Vite 7 as ESM only, with no CommonJS build, while a plugin or script written in CommonJS can still require('vite'). For a Vue project nothing changes here: vite.config.ts is already a module, and Vite loads it itself.
The default build target is Baseline Widely Available
The second change decides which browsers your production bundle runs in. The default build.target used to be a Vite-specific preset called 'modules'. In Vite 7 that name is gone and the default is 'baseline-widely-available'.
Baseline is the web platform's shared definition of browser support. A feature is Widely Available once it has worked in all major browsers for at least 30 months. In practice the minimum versions move up:
- Chrome 87 becomes 107
- Edge 88 becomes 107
- Firefox 78 becomes 104
- Safari 14.0 becomes 16.0
The new minimums were all released before November 2022, and the team will move the set forward with each Vite major.
With the newer target, Vite transpiles less: it rewrites less modern syntax into older code, because these browsers run more of it natively. Private class methods and ??= are no longer rewritten. Top-level await in a module such as main.ts, which failed under the old default with "Top-level await is not available in the configured target environment", now builds.
If your analytics show users on older browsers, say an organisation on Safari 15, set the target yourself and the new default does not apply. This list is the value Vite 6's docs give for 'modules', so the build transpiles exactly as it did in Vite 6:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
build: {
target: ['es2020', 'edge88', 'firefox78', 'chrome87', 'safari14'],
},
})
For anything older, including browsers without native ES modules, @vitejs/plugin-legacy is still the tool. It has a new major too: use 7.0, published with Vite 7, because the 6.x releases only accept Vite 6.
Removed features and changes for plugin authors
The announcement says the removed features were already deprecated and should not affect most projects; the migration guide lists them. Two can appear in an app's config:
- The Sass legacy API. Vite now talks to Sass only through the modern API. If your config sets
css.preprocessorOptions.scss.api(orsass.api), delete that line. Projects that already use Dart Sass with noapioption keep working. splitVendorChunkPlugin. It dates from the Vite 2.9 migration and has been marked deprecated since 5.2.7. If you imported it to get a separate vendor chunk, usebuild.rollupOptions.output.manualChunksinstead, which lets you decide which modules go into which chunk.
The rest affects plugins and frameworks, not app code:
transformIndexHtmlloses the hook-levelenforceandtransformproperties, deprecated since Vite 4. Useorderandhandlerinstead, which match Rollup's object hook format.- The Environment API introduced in Vite 6 stays experimental and gains a
buildApphook that lets a plugin coordinate the build of several environments. Frameworks use it; an app does not call it. - The migration guide also lists removed internal types and a change that treats every
optimizeDeps.entriesvalue as a glob. Read it once if you maintain a plugin or setoptimizeDeps.entries.
Upgrade a create-vue project
New projects already start on Vite 7: create-vue 3.17.0, published on 25 June, scaffolds Vite 7, drops Node 18 and offers an experimental option to start on rolldown-vite instead of vite.
An existing project usually needs nothing beyond the install. A project scaffolded with create-vue has vite, @vitejs/plugin-vue and optionally vite-plugin-vue-devtools, @vitejs/plugin-vue-jsx and vitest in its dev dependencies. The plugins are ready:
@vitejs/plugin-vue6.0.0 and@vitejs/plugin-vue-jsx5.0.0 came out on 24 June, the same day as Vite 7. They add Vite 7 to their peer dependency range; the previous majors stopped at Vite 6.vite-plugin-vue-devtoolsaccepts Vite 7 from 7.7.7, published on 15 June.
So the upgrade is one command:
npm install -D vite@7 @vitejs/plugin-vue@6 vitest@3
Add @vitejs/plugin-vue-jsx@5 if you use JSX, and vite-plugin-vue-devtools@7 if you use the devtools plugin, so that a release older than 7.7.7 does not stay in the lockfile. Then run the three scripts the scaffold gives you (test:unit exists if you chose Vitest):
npm run dev
npm run build
npm run test:unit
The dev server should start and the build should finish as before. If npm install complains about a peer dependency, the message names the package that still wants Vite 6. For a community plugin, check whether it has a release for 7 before forcing anything. vue-tsc and the TypeScript setup are untouched by this release.
Try rolldown-vite
Rolldown is a JavaScript bundler written in Rust, built by VoidZero as a drop-in replacement for Rollup that aims for much faster builds. Vite 7 still uses esbuild to pre-bundle dependencies in development and Rollup for production builds. The announcement says Rolldown will become Vite's default bundler. The Rolldown guide in the Vite docs adds that it is meant to replace both esbuild and Rollup, and that the work will be merged back into the main Vite repository. Until then it ships as a separate package, rolldown-vite, that tracks Vite's major and minor versions and is marked experimental.
You try it with a package alias, so that every import of vite in your project resolves to rolldown-vite instead. In package.json:
{
"devDependencies": {
"vite": "npm:rolldown-vite@7.0.0"
}
}
The guide's examples use @latest, but it also warns that the experimental package may contain breaking changes even in a patch release, so pin an exact version as above.
If Vite comes into your project through a framework you use, rather than as a direct dependency, use an override instead. With npm, the same "vite" entry goes in a top-level overrides field. With pnpm, it goes under pnpm.overrides:
{
"pnpm": {
"overrides": {
"vite": "npm:rolldown-vite@7.0.0"
}
}
}
Reinstall, then run npm run build and compare the time with your Vite 7 build. The announcement expects the biggest gains on larger projects, so a small create-vue app may show little difference.
One option does change. Rolldown does not support Rollup's manualChunks, so a config that uses it, such as a replacement for splitVendorChunkPlugin, needs the advancedChunks option instead; the guide shows the translation.
Report anything odd to the vitejs/rolldown-vite repository rather than the main Vite one, with a reproduction and your Node version.
Announced for later: Vite DevTools and ViteConf
Vite DevTools is a new project by VoidZero and NuxtLabs, meant to give deeper debugging and analysis for any Vite-based project and framework; the announcement links to a blog post about it but gives nothing to install yet. ViteConf 2025 will be held in person for the first time, in Amsterdam on 9 and 10 October, organised by JSWorld with Bolt, VoidZero and the Vite core team.
Upgrade now or wait
Upgrade now if your Node version already meets the requirement and your plugins are the standard Vue ones. The change list is short, the new browser target only causes trouble if you have users on browsers older than Chrome 107 or Safari 16, and the install is one line.
Wait if you are stuck on Node 18 in CI or on a host that has not caught up, and sort that out first: npm only warns about the engines field, but Vite 7 no longer supports Node 18. Wait, too, if a plugin you depend on has not released a Vite 7 compatible version. Treat rolldown-vite as something to try on a branch and measure, not something to ship this week.