Vite+ is now in Beta: stable and ready for production adoption, fully open source under MIT. Read the announcement to see what Vite+ is about and where it is headed: Announcing Vite+ Beta.
On top of the Beta milestone, this release brings cross-version upgrades via vp migrate, an official Docker toolchain image on GHCR, zero-config runner-aware vp build caching, and PGP-verified managed Node.js downloads.
Highlights
vp migrateupgrades existing Vite+ projects across versions: previous release notes told users not to runvp migratefor upgrades. It now runs from the global CLI when the local one is older, re-pinsvite-plusand thevite->@voidzero-dev/vite-plus-corealias across dependencies, overrides/resolutions, and catalogs in every workspace package, alignsvitest/@vitest/*by actual usage, and defaults to a version-only upgrade (pass--fullto also run the first-time setup bucket: hooks, editor, agent files, lint migration) (#1891), by @fengmk2- Official Vite+ Docker toolchain image:
ghcr.io/voidzero-dev/vite-plusbundlesvpplus a native build toolchain ondebian:bookworm-slim(amd64/arm64, non-root). Sincevpprovisions the exact Node.js from.node-version, one image builds any project, and a documented multi-stage build copies the resolved Node.js into a small vp-free runtime stage (#1944), by @fengmk2 - Zero-config
vp buildcaching via runner-aware Vite: Vite reports its inputs, outputs, and tracked env reads to thevprunner over the new@voidzero-dev/vite-task-clientIPC (vite#22453), sovp buildcaches correctly with no hand-written cache config: outputs are tracked and restored automatically, and a changedVITE_*env var invalidates the cache and is named in the cache-miss message (#1774), by @wan9chi - PGP-verified Node.js downloads: installing a managed Node.js now verifies the release's clearsigned
SHASUMS256.txt.ascagainst the vendored Node.js release keyring (pure Rust, nogpgrequired) before trusting any checksum, so a tampered archive is rejected before install; unsigned sources (musl builds, custom mirrors) fall back to checksum-only verification (#1848), by @fengmk2
Features
vp check: acheckblock invite.config.ts(check.fmt/check.lint) can make plainvp checkskip formatting or linting by default, mirroring--no-fmt/--no-lint; standalonevp fmt/vp lintand git hooks are unaffected, and anote:line keeps the config-based skip discoverable (#1981), by @fengmk2vp env list-remote: highlight installed versions (color, or a*prefix when piped) and label the project-resolvedcurrentand globaldefaultversions;--jsongainsinstalled/current/defaultfields (#1907), by @semimikohvprships as avite-pluspackage bin, so thevp runshorthand works on clean installs without global PATH shims (Vercel build image, generic CI runners) (#1988), by @kvnwolf- Vite Task:
dependsOncan select tasks from dependency packages, e.g.dependsOn: [{ "task": "build", "from": "dependencies" }](vite-task#479), by @wan9chi - Vite Task: a task's
env/untrackedEnvglob patterns support!negation (e.g.["VITE_*", "!VITE_SECRET"]) (vite-task#425), and an env-caused cache miss now names the variable inline, e.g.cache miss: env 'NODE_ENV' changed(vite-task#438), by @wan9chi - Upgrade upstream dependencies: vite
8.0.16 -> 8.1.2, rolldown1.1.1 -> 1.1.4, oxlint1.70.0 -> 1.72.0, oxfmt0.55.0 -> 0.57.0, oxlint-tsgolint0.23.0 -> 0.24.0, and the oxc toolchain0.136.0 -> 0.138.0(#1924, #1989, #2000, #2009), by @voidzero-guard[bot]
Fixes & Enhancements
- Windows:
vp runno longer hangs CI when anode_modules/.bin.cmdshim is routed through PowerShell; the npm/pnpm/yarn.ps1wrappers read stdin and block forever on a non-TTY pipe, so the PowerShell rewrite is now skipped when stdin is not an interactive terminal (vite-task#491, via #1973), by @fengmk2 - Vite Task: the task cache is stored in a per-schema-version directory (e.g.
node_modules/.vite/task-cache/v13/), so switching between branches that pin different Vite+ versions no longer fails withUnrecognized database version(vite-task#433), by @fengmk2 - Vite Task: env values in cache fingerprints are stored only as SHA-256 digests and env cache-miss details report names without values (vite-task#455); prefix env assignments like
PATH=... commandnow affect executable lookup during planning (vite-task#440);package.json/pnpm-workspace.yamlfiles with a UTF-8 BOM parse correctly (vite-task#424), by @wan9chi vp upgrade: run the pinned pnpm with a managed Node.js LTS directly instead of re-enteringvp install, so an incompatible session/project/system runtime can no longer make pnpm skip optional native binaries and leave the upgraded CLI broken (#1900), by @liangmiQwQ- Global package installs: each install writes to an immutable
packages/<name>#<uuid>prefix that is activated via metadata after npm succeeds, so an interrupted reinstall can no longer leave the active package unavailable (#1906), and stale interrupted-install directories are swept with file-lock protection for concurrent installs (#1945), by @liangmiQwQ lazyPlugins(): skip plugin factories only while config metadata is being resolved instead of keying offVP_COMMAND, so builds spawned undervp run/vp execkeep the user's plugins andvp formatno longer loads them (#1939), by @fengmk2vp migrate(pnpm): add a directvitedevDep aliased to the core override wherevervite-plusis depended on, so vitest'svitepeer binds to@voidzero-dev/vite-plus-coreinstead of pulling in a second upstream vite that broke thevp testcache (#1933), by @fengmk2vp pack: bundle@tsdown/exeand@tsdown/cssinto core so--exeand CSS bundling work without a resolvable top-leveltsdown; the nativelightningcssbecomes an optional peer loaded lazily with an actionable error (#1919), by @fengmk2vp env: invalidate stale shim resolve cache entries when the project's Node.js version source changes (#1951), by @jong-kyung- Node shim: when the project declares npm via
packageManager/devEngines.packageManager, child processes spawned fromnoderesolve the managed npm instead of the Node-bundled one (#1938);vp env whichreports bins linked by an interceptednpm install -g(e.g.tsc) instead of "not found" (#1968); bins with uppercase names (e.g.vitePlus) dispatch correctly (#1963), by @liangmiQwQ vp-setup: pass the configured npm registry to the inner pnpm install so setup works behind custom registries (#1795), by @daflyinbed- Native binding: declare the platform packages' true ABI floor
engines.node >=20.0.0so engine-strict package managers (pnpm) no longer skip the optional native dependency and fail withCannot find native bindingwhen a consumer's Node floor lands in a product-policy gap (#1993), by @fengmk2 vp create: rungit initwithout creating an initial commit, so commitlint-configured templates no longer reject the hardcoded message and template placeholders are not baked into history (#2008), by @forehalovp staged --debug: inline the bundled lint-staged version so debug logging no longer crashes reading apackage.jsonthat does not exist in the bundle (#1925), by @rokuosan- Installer: retry downloads truncated mid-body in
HttpClient::get_bytes(the platform-tarball path forvp upgradeand the standalone installer) (#1940), and clean up the temp dir when a package-manager install fails instead of leaking.tmpXXXXdirectories (#1949), by @shulaoda - Windows/msys: normalize backslashes in the
env.fishfallback path (#1954), by @Aalivexy install.ps1: detect the missing VC++ runtime (0xC0000135) and print VC++ Redistributable guidance instead of a generic failure; interactiveirm | iexinstalls keep the shell open (#1962), by @cheezonevp migrate: preserve comments, key order, and trailing commas in existing.vscode/.zedJSONC configs by patching the original text instead of re-serializing it (#1956), by @fengmk2- Migration: link the git hook warning to the migration guide (#1902), by @naokihaba
vp info/vp view: use package-manager-native commands (pnpm view,bun info,yarn npm info) instead of routing every lookup throughnpm view(#1895), by @jong-kyung- Correct overused
ErrorConfigerror types across the codebase (#1934), by @liangmiQwQ
Refactor
vite_install: centralize Yarn v1/berry branching withis_yarn_berry(#1897), by @jong-kyung
Docs
- Document Vite Task automatic tracking (fs tracking and cache-reporting tools), reusing the task cache with GitHub Actions cache, and
dependsOn: [{ task, from: "dependencies" }](#1992), by @wan9chi - Rewrite the "Upgrading Vite+" guide: preview builds install through the registry bridge as ordinary
0.0.0-commit.<sha>npm versions, andvp migrateis the recommended way to upgrade a project or move it onto a preview build (#1965), by @fengmk2 - Describe how to switch back to the release version from nightly (#1887), by @situ2001
- Clarify Git hook tool migration (#1901), by @naokihaba
- Add a global installation explanation (#1915), update the
vp envhelp output (#1969), and add liangmiQwQ as a team member (#1911), by @liangmiQwQ - Fix package manager command examples (#1937) and the
dependsOnguide link (#1883), by @jong-kyung - Remove Fathom analytics from the uninstall docs (#1946), by @mdong1909
- Center the README logo and fix its size (#1878), by @hyf0
Chore
- Prevent Vite beta upgrades in the upstream-deps script (#1879), stabilize flaky network-dependent tests (#1923), and bump the ecosystem-ci bun-vite-template to the oxlint jsx-a11y fix (#1898), by @fengmk2
- Pin snap-test install fixtures to a published
vite-plusversion so release-branch CI can pass before the new version is published (#2017), by @fengmk2 - Update the deprecated
VITE_PLUS_env var prefixes toVP_in the RFCs (#1984), by @liangmiQwQ - CI: skip full CI for docs-only PRs (#1991) and for the docs deploy config (#2015), by @wan9chi
- Update GitHub Actions (#1904, #1977), claude-code-action to v1.0.158 (#1979), and pnpm to v10.34.4 (#1996), by @renovate[bot]
- Update oxc-project/security-action to v1.0.8 (#1918), by @fengmk2
- Refresh trusted stack stats on the docs homepage (#1913, #1982), by @voidzero-guard[bot]
Bundled Versions
| Tool | Version | Source |
|---|---|---|
| vite | 8.1.2
| ba31193
|
| rolldown | 1.1.4
| 6cbd233
|
| tsdown | 0.22.3
| npm |
| vitest | 4.1.9
| npm |
| oxlint | 1.72.0
| npm |
| oxlint-tsgolint | 0.24.0
| npm |
| oxfmt | 0.57.0
| npm |
Upgrade
vp upgradeNew to Vite+? Start with the Beta announcement, then create a project with vp create or bring an existing one over with vp migrate.
New Contributors
Welcome to our new contributors @rokuosan, @Aalivexy, @cheezone, @daflyinbed, @forehalo, @kvnwolf! 🎉
Full Changelog: v0.2.1...v0.2.2
Published Packages
@voidzero-dev/vite-plus-core@0.2.2vite-plus@0.2.2
Installation
macOS/Linux:
curl -fsSL https://vite.plus | bashWindows:
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:0.2.2 vp buildRun any vp command without installing it; see the Docker guide for more.