DEV Community

Cover image for Vite+ 1.0 Is Out. You Don't Need ESLint or Prettier Anymore
Erik Hanchett
Erik Hanchett

Posted on AI-assisted

Vite+ 1.0 Is Out. You Don't Need ESLint or Prettier Anymore

Do you still need ESLint and Prettier? The team behind Vite+ says no. Vite+ 1.0 shipped on September 28, and it puts Vite, Vitest, linting, formatting, Git hooks, and Node.js version management behind one CLI called vp and one vite.config.ts.

I wrote about Vite+ back in March when it was still in alpha. It's grown up a lot since then. It's MIT licensed, it's stable, and it's close to 2 million weekly downloads. So I took a small Vue app that uses the usual pile of tools and migrated it to see how much of it Vite+ could swallow.

If you'd rather watch, here's the video:

(Full disclosure: I'm a Developer Advocate at AWS, and Kiro is an AWS product. I use it to finish the migration below, but Claude Code or Codex would do the same job.)

What Vite+ replaces

Vite+ comes from VoidZero, the team behind Vite, Vitest, Rolldown, and Oxc. It isn't a new framework and it doesn't replace Vite. It ties a set of tools together and tests them as one stack, so a single vite-plus dependency takes the place of packages like eslint, prettier, vitest, tsup, and turbo.

The commands map to those tools:

  • vp check formats, lints, and type checks in one pass with Oxfmt and Oxlint
  • vp test runs Vitest
  • vp dev and vp build run Vite 8 with Rolldown
  • vp env manages your Node.js version
  • vp migrate moves an existing project over

The Oxc tools are written in Rust. VoidZero says Oxlint runs 50x to 100x faster than ESLint and Oxfmt is up to 30x faster than Prettier. I didn't benchmark those claims, but I'll share the times I saw later.

Prerequisites

  • macOS, Linux, or Windows. I'm on Windows Subsystem for Linux (WSL) with Ubuntu 24.04.
  • An existing Vite project. Mine is a Vue 3 app, but React and other frameworks work too.
  • A clean Git working tree. vp migrate edits a lot of files, so commit first.
  • Optional, a coding agent to clean up whatever the migration misses.

The project before Vite+

My test app is a vibe-coded park planner where you save trips and the parks you want to visit. It started out with a pretty typical setup. ESLint for linting, Prettier for formatting, vue-tsc for type checks, Husky and lint-staged for the pre-commit hook, pnpm as the package manager, and separate vite.config.ts and vitest.config.ts files.

That's a lot of config to keep in sync. Here's the scripts block from package.json:

"scripts": {
  "dev": "vite",
  "build": "run-p type-check \"build-only {@}\" --",
  "preview": "vite preview",
  "test:unit": "vitest",
  "build-only": "vite build",
  "type-check": "vue-tsc --build",
  "lint": "eslint . --fix --cache",
  "lint:check": "eslint .",
  "format": "prettier --write src/",
  "format:check": "prettier --check src/",
  "prepare": "husky"
}
Enter fullscreen mode Exit fullscreen mode

Every one of those tools has its own release cadence and its own upgrade guide. I also use NVM to switch Node versions, since I jump between a lot of projects for videos.

1. Install Vite+

On macOS or Linux, run the install script from viteplus.dev:

curl -fsSL https://vite.plus | bash
Enter fullscreen mode Exit fullscreen mode

On Windows, use PowerShell instead:

irm https://vite.plus/ps1 | iex
Enter fullscreen mode Exit fullscreen mode

The installer asks if you want Vite+ to manage Node.js for you. I said no to this during the alpha because it fought with my other tools. This time I took the default and said yes. After that, open a new shell (or source your .zshrc) so vp is on your path.

2. Run vp migrate

From the project root:

vp migrate
Enter fullscreen mode Exit fullscreen mode

It walks you through a short list of questions before it changes anything. Do you want pre-commit hooks for formatting and linting? Which agent instructions file should it write? Which editor config? Then it asks whether to migrate ESLint rules to Oxlint (it uses @oxlint/migrate for this) and Prettier to Oxfmt.

The vp migrate prompts in the terminal, asking to migrate ESLint rules to Oxlint and Prettier to Oxfmt
vp migrate asks before it converts your ESLint and Prettier configs.

I said yes to the hooks, picked AGENTS.md (Kiro reads it), chose VS Code since the Kiro IDE is built on it, and let it migrate Prettier, ESLint, and the TypeScript shims.

When it finished, I ran the check:

vp check
vp check --fix
Enter fullscreen mode Exit fullscreen mode

vp check found some formatting issues, and --fix cleaned up most of them. A few things were left over. My ESLint rules were now in vite.config.ts under a lint block, and eslint.config.ts was gone. But vitest.config.ts was still around, and there was one lint error it couldn't fix on its own.

VoidZero says up front that larger projects might need a follow-up after vp migrate, so I wasn't surprised.

3. Let your agent finish the migration

Instead of fixing those by hand, I asked Kiro, running Claude Opus 5.5:

I just used Vite+ to migrate this project. Can you complete the migration for Vitest and this error?
Enter fullscreen mode Exit fullscreen mode

If you have Kiro, Claude Code, or Codex open already, I don't see a reason to do this part manually. The AGENTS.md file that vp migrate writes explains the vp commands, so the agent doesn't have to guess. VoidZero also publishes a migration prompt for coding agents, linked from the 1.0 announcement.

It finished in under a minute. It moved the test block from vitest.config.ts into vite.config.ts and deleted the old file. It removed vitest.config.* from the include list in tsconfig.node.json. The lint error was the typescript/no-empty-object-type rule in env.d.ts. It fixed it by changing DefineComponent<{}, {}, unknown> to DefineComponent<object, object, unknown>.

Then I ran the check again:

vp check output reporting all 39 files correctly formatted in 731ms and no warnings, lint errors, or type errors in 27 files
Formatting, linting, and type checks in one command.

All 39 files were formatted correctly in 731ms, and it found no warnings, lint errors, or type errors in 27 files in 782ms. All 16 tests passed with vp test, and the dev server still ran after a restart.

4. Replace Husky with Vite+ hooks

package.json still had "prepare": "husky", so I asked Kiro to move that over too. Vite+ has its own hooks now. vp hooks sets up Git hooks, and vp staged runs your checks on staged files only.

Kiro removed the .husky/ folder, added a staged block to vite.config.ts, and ran vp hooks enable. The hook script lives in .vite-hooks/pre-commit now, and you commit it with the rest of the project.

It also flagged something I would have missed. Husky sets core.hooksPath to .husky/ in your local Git config. Anyone with an existing clone still has that setting, so the new hooks won't install for them until they run this once:

git config --unset core.hooksPath && vp hooks enable
Enter fullscreen mode Exit fullscreen mode

Put that in your PR description if you're migrating a team project.

What's left

After all that, one vite.config.ts holds the linting, formatting, testing, and staged-file config:

Before and after diagram. Before lists eslint.config.ts, .prettierrc.json, vitest.config.ts, .husky plus lint-staged, vue-tsc, and nvm. After shows one vite.config.ts with lint, fmt, test, and staged blocks, plus the vp check, vp test, and vp env commands

Run vp toolchain to see exactly what you're getting. Mine showed Vite 8.3.5, Rolldown 1.2.15, Vitest 5.0.5, Oxlint 1.89.0, Oxfmt 0.74.0, and tsdown 0.23.1, all pinned by the one vite-plus package. That's the upgrade story I like. You bump one version, and VoidZero has already tested those tools together.

For Node, vp env current shows the Node.js and pnpm versions the project resolves to. If something looks off, vp env doctor explains why it picked them.

Rolling it back

This is why you commit before running vp migrate. If it doesn't work out, go back to that commit, delete the new files like AGENTS.md and .vite-hooks/, and reinstall your dependencies. If you let Vite+ manage Node.js, you can switch back to NVM in your shell config.

Wrap up

The migration was pretty painless. vp migrate did most of the work, and the agent cleaned up the Vitest config, one lint error, and the Husky hooks in a couple of minutes. I'm going to start using Vite+ on most of my projects, and I'm happy to drop NVM.

It isn't feature complete. Remote caching, vp release, and vp docs are still on the roadmap. If you're migrating something in production, read the migration guide on viteplus.dev first.

Are you switching? Let me know in the comments, especially if you've tried it on a big monorepo.

Links

Top comments (2)

Collapse
 
erikch profile image
Erik Hanchett •

Have you tried out Vite+?

Collapse
 
marina_eremina profile image
Marina Eremina •

Actually the announcement post says Vite+ is not a replacement for Vite. Wondering when would you choose Vite+ and when the old Vite, from your experience?