Vite+ 1.5 adds an official Homebrew tap, runs TypeScript through Node.js with node --import vite-plus/register, and lets vp migrate move oxnode and transpile-only ts-node scripts to vpx.
Features
- Install
vpfrom the official Homebrew tap on macOS and glibc Linux (docs) (#2740), by @fengmk2:brew tap voidzero-dev/vite-plus https://github.com/voidzero-dev/vite-plus brew install voidzero-dev/vite-plus/vp
node --import vite-plus/registerruns TypeScript with the same loader asvpx, so tools that start Node.js themselves, such as the Node.js test runner, AVA, or aNODE_OPTIONSsetting, can run TypeScript files (docs) (#3208), by @fengmk2.vp migratemovesoxnodecommands and transpile-onlyts-nodecommands tovpx, and moves their Node.js preloads and literalNODE_OPTIONSvalues tovite-plus/register.ts-nodecommands that type-check stay unchanged with a warning, and thets-nodedependency is removed only when nothing still uses it. A project already on Vite+ gets this migration withvp migrate --full(docs) (#3209, #3210), by @fengmk2.vp migratewarns when it finds Rollup, Rolldown, or Jest dependencies with matching configuration, and explains how to move them to Vite, tsdown, or Vitest. The warnings show during the first migration, or withvp migrate --fullin a project already on Vite+ (#3275), by @KTrain5169 and @fengmk2.vite-plusexportsresolveConfigFromFile(configFile, options?), which resolves a config relative to the config file's directory instead ofprocess.cwd(), so editor plugins with several workspace folders load the files of the right project (#3249), by @leaysgur and @fengmk2.- Security: the CLI ships
minimatch@11.0.4, which fixes a denial of service through glob pattern amplification (GHSA-g3hv-75wg-m249, medium), andzstd@0.13.4, which fixes RUSTSEC-2026-0391, RUSTSEC-2026-0398, and RUSTSEC-2026-0403 (#3328, #3331), by @renovate[bot] and @wan9chi. - Upgrade the bundled tools (#3205, #3236, #3261, #3206, #3330, #3338), by @voidzero-guard[bot] and @fengmk2:
rolldown@1.2.15torolldown@1.2.16, withexperimentalInlineCommonChunksin dev mode and no crash when the working directory was deleted.tsdown@0.23.1totsdown@0.23.4:vp pack --env-filecan be repeated to load several env files, the config has a JSON schema, and?inlineCSS imported from dependencies is inlined.vitest@5.0.5tovitest@5.1.0, with--last-failedand--since-last-run, fake timers fornode:timers, and interactive review of failed snapshots. Browser mode now uses port 23315 by default.oxlint@1.89.0tooxlint@1.91.0andoxlint-tsgolint@7.0.2004tooxlint-tsgolint@7.0.2005, with the new type-aware ruletypescript/no-unsafe-enum-assignment, wider checks in rules such asarray-callback-return,no-useless-concat, andno-control-regex, and two rules moved into thesuspiciouscategory.oxfmt@0.74.0tooxfmt@0.76.0, with a new HTML formatter and JavaScript and TypeScript fixes for parentheses, array layout, and line width with wide characters.- The new oxlint and oxfmt versions can flag code that passed before. If your CI runs
vp check, runvp fmtafter upgrading. - Known issue:
oxlint@1.91.0can reportreact/immutabilityfor aletdeclared inside an effect and reassigned by a closure in that effect (oxc#28401). vpxandvite-plus/registerrun onoxc-node@1.0.1, which resolves a.jsxspecifier to its.tsxor.tssource.
Fixes & Enhancements
vp createinto a target path that is a symbolic link removes only the link after confirmation, instead of deleting the contents of the linked directory, and the overwrite prompt names symbolic links and files (#2418), by @leslieeilsel and @fengmk2.vp imploderemoves only directories and shims that it can verify as Vite+ installations, and refuses the home directory, its parents, and filesystem roots even with--yes, so aVP_HOMEthat points at another directory cannot delete unrelated files (#3228), by @jong-kyung.vp runstarts faster in workspaces whose tasks share cacheinputandoutputpatterns, because each pattern is parsed once. In a 138-package workspace this saves about 2 seconds of CPU on every run (vite-task#887, vite-task#890), by @jasonkuhrt and @wan9chi.vp runand package-manager commands in npm projects start about 110 ms sooner, becausevpreads the npm version from npm'spackage.jsoninstead of runningnpm --version(#3259), by @magurotuna.vp migratechecks Vitest prerequisites faster in workspaces, because it parses each lockfile once (#3212), by @jong-kyung.- The installer and
vp upgradeinstall the global CLI's dependencies with the Node.js version that the release pins (24.22.2 for this release), instead of the latest LTS (docs) (#3269), by @fengmk2. - The Node.js
latestalias invp env use,vp env default,vp env pin,vp env install, and.nvmrcresolves to the newest stable release instead of a27.0.0-alphabuild, andvp env list-remotemarks that stable release as latest (#3335), by @voidzero-bot[bot] and @fengmk2. VP_NODE_VERSION=22and other partial versions work for project commands such asvp build,vp run, andvp list, instead of failing with a 404 download error (#3341), by @jong-kyung.- Two
vp install -gcommands that run at the same time no longer delete each other's active package, and a command that starts while a package manager is being installed no longer runs its shim before the shim is executable (#3185, #3248), by @jong-kyung. vp configwaits and retries when another linked git worktree holds the shared git config lock, so apreparescript no longer fails when two worktrees install at the same time (#3199), by @naokihaba.vp env doctorreports Node.js resolution failures, unreadable config, a failing systemnode, and missing shims as errors and exits with code 1. When it finds only warnings, the summary saysSome warnings foundinstead ofAll checks passed(#3215, #3222), by @liangmiQwQ.- Nushell completions for
vpandvpruse the named completer input, so Nushell 0.116 shows no deprecation warning, and they fall back to file completion when fish is not installed. Runvp env setup --refreshto regenerateenv.nu(#3267, #3276), by @naokihaba. vp migrateremoves thetsxdependency even when a comment still contains atsxcommand or code fence, and keeps it for JSDoc type imports that need it (#3299), by @voidzero-bot[bot] and @fengmk2.- The
prefer-vite-plus-importslint rule and its autofix leave theviteandvitestimports thatvp migratekeeps, such asvitestimports in a package that listsvitestinpeerDependencies, sovp lint --fixno longer breaks the package for its plain Vitest users (#3192), by @Dunqing. - Generated Zed settings no longer force
typeAwareandunusedDisableDirectives, so editor diagnostics follow thelint.optionsinvite.config.ts. Existing editor settings stay unchanged (#2357), by @pweyck. vp dlxwith npm runs the right executable for scoped packages such as@angular/cli(#3229), by @jong-kyung.vp outdated -rin npm projects checks the workspaces instead of transitive dependencies, and requires npm 7.14.0 or later (#3240), by @jong-kyung.- Dependency filters such as
--prodand--devwork with npm 6, and filters that npm 6 cannot apply are rejected instead of passed through (#3251), by @jong-kyung. - Package-manager commands that the selected version does not have, such as
vp pm stagebefore npm 11.15.0, are skipped with a warning. Unsupportedpnpm dlxandpnpm packoptions, and project-only flags on managed global commands such asvp install -g, are rejected instead of silently ignored (#3286, #3285), by @jong-kyung. vp toolchain -gis short forvp toolchain --global(#3189), by @jong-kyung.- On Linux and macOS, programs in tasks with automatic file-access tracking no longer abort when they call
execwith an empty path orexeclwith 32 or more arguments (vite-task#896, vite-task#865), by @wan9chi and @tlq5l.
Refactor
- Remove the test-only package download wrapper (#3224), by @jong-kyung.
Docs
- Explain that
vp checkstops at formatting failures, and thatvp checkflags go before file paths (#3262), by @SaKaNa-Y. - Show how to align an existing
vitedependency with its override during a manual npm installation, to avoidEOVERRIDE(#3157), by @SaKaNa-Y. - Explain how environment variable prefixes such as
FOO=bar commandwork in task commands on every platform (#3161), by @tartelettie. - Restore the
/vp-setupredirect and the redirects for moved guide pages (#3271), by @fengmk2. - Align the labels of "See [...]" section links with their target titles (#3231), by @yamaurakazuto.
Chore
- Bump vite-task to
40cb9ca; its user-facing changes are listed above (#3246, #3280), by @wan9chi. - Keep CI working on the Node.js 26 LTS and Ubuntu 24.04, cap job runtimes, reduce Node.js downloads, avoid upgrade build and snapshot download timeouts, pin Nushell, and restore Namespace Linux runners (#3198, #3258, #3266, #3268, #3303, #3309, #3320, #3332), by @fengmk2 and @wan9chi.
- Add automated issue triage (#3253, #3260), by @Boshen and @fengmk2.
- Run the upstream dependency upgrade with Kimi K3.1 Pro and report its timeouts (#3314, #3304), by @Brooooooklyn and @wan9chi.
- Stabilize and trim tests: rerun ESLint and Prettier migration fixtures with
--full, stabilize pnpm setup and Bun snapshots, update the tiptap ecosystem pin, use a recorded package in the install shortcut case, and remove duplicatedevEnginesparse tests (#3193, #3196, #3242, #3305, #3301), by @liangmiQwQ, @fengmk2, @wan9chi, and @Brooooooklyn. - Update Rust crates, synchronize workspace dependency requirements, and stop installing
dprintandtaploinjust init(#3234, #3310, #3250), by @renovate[bot], @leaysgur, and @fengmk2. - Refine contributor guidance: the release-manager skill, isolated CLI bootstrap checks in
AGENTS.md, and the Rolldown exports in the CLI bundling notes (#3207, #3238, #3316), by @fengmk2 and @liangmiQwQ.
Bundled Versions
| Tool | Version | Source | Changelog |
|---|---|---|---|
| vite | 8.3.5
| 981f07f
| unchanged |
| rolldown | 1.2.16
| de6facf
| 1.2.16 |
| oxc-node | 1.0.1
| 7ff14c3
| 1.0.1 |
| tsdown | 0.23.4
| npm | 0.23.2, 0.23.3, 0.23.4 |
| vitest | 5.1.0
| npm | 5.1.0 |
| oxlint | 1.91.0
| npm | 1.90.0, 1.91.0 |
| oxlint-tsgolint | 7.0.2005
| npm | 7.0.2005 |
| oxfmt | 0.76.0
| npm | 0.75.0, 0.76.0 |
Upgrade
vp upgradeNew Contributors
@yamaurakazuto, @tartelettie, @pweyck, @jasonkuhrt
Full Changelog: v1.4.0...v1.5.0
Published Packages
@voidzero-dev/vite-plus-core@1.5.0vite-plus@1.5.0create-vite-plus@1.5.0
Installation
macOS/Linux:
curl -fsSL https://vite.plus | bashHomebrew (macOS/Linux):
brew tap voidzero-dev/vite-plus https://github.com/voidzero-dev/vite-plus
brew install voidzero-dev/vite-plus/vpSee the Homebrew guide to switch from the script installer or the Homebrew Core vite-plus formula.
Windows:
irm https://vite.plus/ps1 | iexOr download and run vp-setup.exe from the assets below.
Docker:
docker run --rm -it -v "$PWD:/app" -w /app ghcr.io/voidzero-dev/vite-plus:1.5.0 vp buildRun any vp command without installing it; see the Docker guide for more.
Create a New App
Start a project without installing the global vp: create-vite-plus runs vp create through your package manager.
pnpm create vite-plus vite:application --directory my-app
cd my-app && pnpm exec vp devRun the command without arguments to pick a template interactively, and see the create guide for other package managers, templates, and options.