Sitemap

Vite+ 1.0 Replaces 7 JavaScript Tools With One Command. I Tried It.

One CLI and one config file for dev, lint, format, test and build. Here’s what worked, what broke, and whether it’s worth switching.

--

I created a fresh TypeScript project, typed vp check, and it formatted, linted and type-checked everything in 1.45 seconds. No ESLint config. No Prettier config. Nothing to wire up.

That’s Vite+, which hit version 1.0 on September 28. It comes from VoidZero, the team behind Vite and Vitest, and it’s free and MIT-licensed.

I set it up on a fresh project and ran every command below. Here’s the short version of what I learned.

The problem it solves

Count the tools in a normal JavaScript project: Vite, Vitest, a linter, a formatter, a Git hook tool, a task runner, a Node version manager. Seven tools, seven configs, seven version numbers to keep in sync.

Vite+ puts all of them behind one command, vp, and one file, vite.config.ts.

Press enter or click to view image in full size

Under the hood it uses Oxlint and Oxfmt, both written in Rust. VoidZero says they’re 50–100x faster than ESLint and up to 30x faster than Prettier. Those are their numbers, but on my small project every check finished in under a second.

Setup in two commands

Install it globally (macOS or Linux):

curl -fsSL https://vite.plus | bash

On Windows, run irm https://viteplus.dev/install.ps1 | iex in PowerShell. Then create a project:

vp create

It asks for a template and a package manager, installs everything, and gives you a project with one config file that drives every tool (trimmed):

import { defineConfig } from "vite-plus";

export default defineConfig({
staged: { "*": "vp check --fix" }, // runs before every commit
fmt: {}, // formatter options
lint: {
options: { typeAware: true, typeCheck: true },
},
});

That’s it. Git hooks, formatting, linting and type checking are already set up.

The commands you’ll actually use

vp dev         # dev server with hot reload
vp check # format + lint + type check, all at once
vp check --fix # fix everything that can be fixed safely
vp test # run tests (Vitest built in)
vp build # production build
vp run build # run a package.json script, with optional caching

If you only remember one, remember vp check. It replaces three tools and three config files.

The moment it clicked

I wrote a deliberately messy helper: single quotes, no semicolons, and a variable I never used.

export function formatPrice(cents:number,currency='INR'){
var unused = 42
const value = cents / 100
return new Intl.NumberFormat('en-IN', { style: 'currency', currency }).format(value)
}

Then I ran vp check --fix. The formatter cleaned up the style on its own, and the linter and the type checker both caught the unused variable in the same run (trimmed):

! eslint(no-unused-vars): Variable 'unused' is declared but never used.
x typescript(TS6133): 'unused' is declared but its value is never read.
pass: Formatting completed for checked files (1.2s)

One command, three tools, one clear message. I deleted the line and everything passed.

The feature I didn’t expect: caching

Run a script with --cache twice and the second run is instant:

$ tsc ◉ cache hit, replaying
$ vp build ◉ cache hit, replaying
vp run: 2/2 cache hit (100%), 1.30s saved.
Press enter or click to view image in full size

Change one file and it tells you exactly why it re-ran: cache miss: 'src/counter.ts' modified. On a small app that saves a second. In a monorepo, it can skip every package you didn't touch.

3 things that tripped me up

  • vp build is not your build script. It runs Vite's build directly and skips the tsc type check in your package.json script. Use vp run build (or the shortcut vpr build) when you want the script.
  • Import tests from vite-plus/test, not vitest. New projects ship with a lint rule that flags the old import, so your tests always use the same Vitest copy as vp test.
  • Installing it per project with npm is a partial install. vp env (Node version management) only works with the global installer. On npm 10, I also had to add --legacy-peer-deps to get npm install -D vite-plus through.

Should you switch?

New project: yes. vp create plus vp check gives you a clean, typed, linted setup in two minutes.

Get Yash Rastogi’s stories in your inbox

Join Medium for free to get updates from this writer.

Existing project: try vp migrate on a branch. It shows its plan before changing anything. The real question is your ESLint plugins: Vite+ uses Oxlint, so check the rules you depend on are covered first.

The trade-off: versions move together. You get Vite, Vitest and the rest as one bundle, which is easier to maintain, but you upgrade when Vite+ upgrades.

How many config files sit in the root of your current JavaScript project? Would you trade them for one? Tell me in the comments.

I test new developer tools the week they launch and write up what worked and what broke, in plain language. Follow me so you get the next one.

Sources

--

--

Yash Rastogi
Yash Rastogi

Written by Yash Rastogi

Pursuing a B.Tech in Computer Science with a specialization in AI. I built my first token on Solana in 2022 and excel in full-stack development.