Releases: voidzero-dev/vite-plus
vite-plus v0.2.1
Restores support for older Node.js (back to 20.19.0) and makes vp exec --fail-if-no-match fail correctly on unmatched filters.
Fixes & Enhancements
- Stop blocking older Node.js versions: v0.2.0 blocked commands when the resolved Node.js version fell outside the declared range. This reverts that enforcement and widens
engines.nodeto^20.19.0 || ^22.18.0 || >=24.11.0, matching Vite's own^20.19.0floor, so older Node that works in practice (e.g. Node 20 in rolldown CI) is no longer rejected (#1865), by @fengmk2 vp exec --fail-if-no-match: exit non-zero when one or more--filterexpressions match no workspace packages. Strict mode previously only warned and returned success, so typoed filters looked successful in CI even though no package command ran (#1859), by @jong-kyung
Bundled Versions
| Tool | Version | Source |
|---|---|---|
| vite | 8.0.16 |
f94df87 |
| rolldown | 1.1.1 |
d7f919c |
| tsdown | 0.22.3 |
npm |
| vitest | 4.1.9 |
npm |
| oxlint | 1.70.0 |
npm |
| oxlint-tsgolint | 0.23.0 |
npm |
| oxfmt | 0.55.0 |
npm |
Upgrade
vp upgradeUpgrading from 0.1.x to 0.2.1 Prompt
You are upgrading a project that uses Vite+ (the `vp` CLI) from v0.1.x to v0.2.1.
v0.2.1 has one breaking change vs v0.1.x: it consumes upstream Vitest directly. The `@voidzero-dev/vite-plus-test` wrapper package is removed. `vitest` and the base browser runtime (`@vitest/browser`, `@vitest/browser-preview`) now come in transitively through `vite-plus`. The opt-in browser providers (`@vitest/browser-playwright`, `@vitest/browser-webdriverio`) are NOT shipped by `vite-plus`: any project that runs browser-mode tests must install the provider it uses itself.
Do not run `vp migrate` for this upgrade; it is not reliable enough yet. Make the changes yourself by editing the project's files, then verify by running the tools.
How to run vp: if a global `vp` is available, use it. Otherwise this project only ships the local CLI from the `vite-plus` package, so run vp as the project-local binary (for example via the package manager's exec: pnpm exec, npx, yarn, or bunx). After any install, re-resolve vp so you always run the version currently in the project.
Do the following:
1. Set the `vite-plus` dependency to the exact version `0.2.1` and reinstall, so the new toolchain is installed and the lockfile moves off 0.1.x. In a monorepo, do this for every workspace package that depends on `vite-plus` (a shared `catalog:` entry covers them all at once). Changing the spec to `0.2.1` is what moves the lockfile off the old resolution; a reinstall that leaves the spec unchanged would keep the old version.
2. Remove the `@voidzero-dev/vite-plus-test` wrapper from the project. Search everywhere it could appear: package.json, the lockfile, any workspace or catalog config (such as pnpm-workspace.yaml or .yarnrc.yml), and the source files. Then classify the project and apply the matching case. Note these are not exclusive: a browser-mode project is also handled by case C in addition to removing the wrapper config.
First, determine the project's Vitest usage:
- BROWSER MODE: the project runs Vitest in the browser. It does if a config or test file imports a real browser provider (`vite-plus/test/browser-playwright` or `vite-plus/test/browser-webdriverio`, or the pre-upgrade raw forms `@vitest/browser-playwright` / `@vitest/browser-webdriverio`), or sets `test.browser.enabled`. This needs extra deps regardless of anything below; see case C.
- DIRECT vitest usage: a source or test file imports directly from `vitest` or `@vitest/...`, or a `@vitest/*` package is listed in its dependencies (for example a coverage provider). Plain imports from `vite-plus/test` and `vite-plus/test/*` do NOT count as direct usage; a `vite-plus/test/browser-*` provider import is a browser-mode signal (case C), not direct usage.
Case A - node-mode only (no direct vitest usage, no browser mode; the common case): remove the vitest configuration entirely. In package.json, delete the `vitest` entry from `dependencies` / `devDependencies` in whatever form it takes (a `@voidzero-dev/vite-plus-test` alias, a `catalog:` reference, or a plain version). Also remove the `vitest` entry from every dependency-resolution mechanism in the project: both `overrides` and `resolutions`, pnpm `overrides`/`catalog` (in package.json or pnpm-workspace.yaml), and any catalog entry. If `vitest` appears in more than one of these, remove all of them. Do not add a pinned `vitest`; it arrives transitively through `vite-plus` and the node-mode test command works without it.
Case B - direct vitest usage: pin upstream vitest to the version bundled with vite-plus (4.1.9 for v0.2.1), and upgrade every vitest ecosystem package the project depends on so the whole tree resolves to a single vitest. Set each `@vitest/*` package the project lists (for example `@vitest/coverage-v8`, `@vitest/ui`, `@vitest/browser`) to that same version (4.1.9), since those are pinned to an exact vitest version. Also update any other vitest integration package (such as `vitest-browser-*`) to a release compatible with that vitest version. Leaving an ecosystem package on an older version pulls in a second copy of vitest, which Vitest rejects at runtime.
Case C - browser mode (in addition to removing the wrapper config): you MUST add two deps to the workspace package that runs the browser tests (not the repo root, unless that is where the tests live), both pinned to the bundled vitest version so the tree still resolves to a single vitest:
- The browser provider the project actually uses: `@vitest/browser-playwright@4.1.9` and/or `@vitest/browser-webdriverio@4.1.9`. Without it, config load fails with `Cannot find package '@vitest/browser-playwright'` from `vite-plus/test/browser-playwright`. Make sure its framework peer is present too (`playwright` for Playwright, `webdriverio` for WebdriverIO); the project usually already has it.
- A direct `vitest@4.1.9`. This is the one case where you DO add a pinned vitest, and it contradicts the "never add vitest" rule that holds for node mode. Reason: under pnpm's isolated node_modules, `vitest` is only a transitive dep of `vite-plus`, so the browser-tester Vite server (rooted at the consumer project) cannot resolve `vitest/internal/browser` or the `vitest > ...` optimizeDeps entries. The symptom is `Failed to resolve import "vitest/internal/browser"` followed by `Failed to connect to the browser session ... within the timeout` and a `no tests` run. vite-plus 0.2.1 ships a `vite-plus:vitest-resolver` plugin meant to rescue this, but it does not reach the separate `@vitest/browser` orchestrator server, so a direct `vitest@4.1.9` (matching the bundled version, single copy preserved) is required. (If a future vite-plus fixes the resolver to cover the browser-tester server, this direct `vitest` may become unnecessary; re-check.)
In all cases, also delete any dependency-resolution config that existed only to accommodate the wrapper or the old vitest, for example pnpm `peerDependencyRules` entries (`allowedVersions` / `ignoreMissing`) referencing `vitest`, `@vitest/*`, or `@voidzero-dev/vite-plus-test`, and the equivalent peer-tweak config in other package managers (such as yarn `packageExtensions`). Leave rules that are unrelated to vitest or the wrapper untouched.
3. Keep the `vite` -> Vite+ core override (it is still required) and set it to the matching exact version: map `vite` to `npm:@voidzero-dev/vite-plus-core@0.2.1` in whatever override, resolution, or catalog form the project already uses. `@voidzero-dev/vite-plus-core` is released in lockstep with `vite-plus`.
4. Leave imports from `vite-plus/test` (and `vite-plus/test/*`, including `vite-plus/test/browser-playwright`) unchanged; that is the stable public API. Only if a file imports directly from `@voidzero-dev/vite-plus-test`, repoint it to `vite-plus/test`. Leave `declare module 'vitest'` / `declare module '@vitest/browser*'` type augmentations pointing at the upstream module (they must target the upstream identity to merge).
5. Reinstall so the lockfile reflects your edits, then verify:
- No reference to `@voidzero-dev/vite-plus-test` remains anywhere outside node_modules (source, configs, lockfile).
- The dependency tree resolves to a single `vitest` version (4.1.9) with no duplicate copies. Note that one `vitest@4.1.9:` entry in the lockfile `packages:` section plus one `vitest@4.1.9(...)` key in `snapshots:` is still a single version, not a duplicate.
- The project's tests pass with Vitest's native banner; for browser mode, confirm the suite actually runs in the browser (you get passing test files, not `no tests` or a session timeout). Browser tests also need the browser binary installed (e.g. `npx playwright install chromium`).
- The Vite+ check workflow passes (exit 0). A pre-existing lint/format warning in a file you did not touch is not a failure; report it but do not fix it.
Troubleshooting: if you hit `vitest/internal/browser` resolution errors, or see duplicate `@vitest/browser` / `vite-plus` peer-variant directories under `node_modules/.pnpm` after several sequential installs across this dependency-graph change, do a clean reinstall (remove `node_modules` in the root and all workspaces, remove the Vite optimize caches `node_modules/.vite`...vite-plus v0.2.0
Vite+ now consumes upstream Vitest directly (no wrapper), raises the minimum supported Node.js version to 22.18.0, and ships corepack and devEngines support.
Highlights
vp testnow runs upstream Vitest directly (breaking): Vite+ used to ship@voidzero-dev/vite-plus-test, a rebundled copy of Vitest that lagged upstream releases. That package is removed;vp testnow runs the real upstreamvitest, which is installed automatically as a dependency ofvite-plus(you no longer addvitestor@vitest/*yourself, andvitestill resolves to@voidzero-dev/vite-plus-corevia package-manager overrides). Yourimport ... from 'vite-plus/test'code keeps working unchanged andvp migrateupdates existing projects (#1588), by @Brooooooklyn- Minimum supported Node.js version raised to
^22.18.0 || >=24.11.0(breaking): Node 20 reached end-of-life and the bundled tsdown already required^22.18.0, so the published engines range now matches whatvp packcan actually deliver;vp exec/vp run/vp dlxreject projects resolving an older Node with the existing incompatibility error (#1813), by @fengmk2 - Corepack now works under Vite+:
corepacknow set up by default, socorepack enableand the pnpm/yarn launchers just work, even on Node 25+ which no longer ships it. (#1808), by @fengmk2 - devEngines support for runtime and package-manager selection: Vite+ reads
devEngines.runtime(ranked aboveengines.node) anddevEngines.packageManager; auto-pin andvp migratewritedevEngines.packageManager,vp env pin/unpintargetdevEngines.runtime, andvp env doctorreports conflicts instead of silently resolving them (#1760), by @fengmk2
Features
vp pm approve-builds: forward to npm's newapprove-scripts/deny-scripts(npm >= 11.16.0) instead of the previous no-op, matchingpnpm approve-builds/bun pm trust; mixed approve+deny is rejected with actionable guidance and npm's advisory-only caveat is surfaced (#1733), by @fengmk2vp create: support local monorepo templates declared increate.templatesinvite.config.ts;vp create vite:generatorscaffolds a Bingo generator and auto-registers it in the picker, replacing the old package.json-keyword inference (#1777), by @fengmk2vp create: detect direct dependencies whose build scripts the package manager gated (e.g. native builds likebetter-sqlite3) and act on them; prompt to approve each (default off) interactively, point atvp pm approve-buildsnon-interactively, or build them with--approve-builds(#1828), by @fengmk2vp config: add--no-hooksand--no-agentopt-outs to skip git-hook installation and coding-agent instruction updates (#1842), by @leno23vp list -g: sort the global package list output so entries appear in a stable order (#1748), by @liangmiQwQ- Upgrade upstream dependencies: rolldown
1.0.3 -> 1.1.1, tsdown0.22.1 -> 0.22.3, oxlint1.67.0 -> 1.70.0, oxfmt0.52.0 -> 0.55.0, vitest4.1.8 -> 4.1.9, and the oxc toolchain0.133.0 -> 0.136.0(#1749, #1767, #1812, #1834, #1855), by @voidzero-guard[bot]
Fixes & Enhancements
- Security: resolve open Rust Dependabot advisories by bumping transitive
openssl0.10.76 -> 0.10.80(openssl-sys0.9.112 -> 0.9.116), fixing five high-severity rust-openssl issues (buffer overflows in key derivation, AES key wrap, and digest finalization; an unchecked PSK/cookie trampoline length leaking adjacent memory; and OCSP-responder undefined behavior: GHSA-pqf5-4pqq-29f5, GHSA-8c75-8mhr-p7r9, GHSA-ghm9-cr32-g9qj, GHSA-hppc-g8h3-xhp3, GHSA-xp3w-r5p5-63rr), and drop the unmaintained, unsoundlibyml(GHSA-gfxp-f68g-8x78, high) by removing deadserde_ymlcode (#1742), by @fengmk2 - Security (docs site): update
mermaid11.13.0 -> 11.15.0to fix improperclassDefsanitization in state diagrams that allowed HTML injection (CVE-2026-41149 / GHSA-ghcm-xqfw-q4vr, medium severity;<script>tags are stripped so it does not reach XSS) (#1745), by @renovate[bot] vp check --fix/vp staged: create/migrate now wrap inline Viteplugins: [...]arrays withlazyPlugins(...)so plugin factories aren't eagerly executed (and don't hang on open handles) during lint/format/check config loading (#1752), by @jong-kyungvp migrate: complete pending migration work for projects that already havevite-plusinstalled (scripts, imports, tsconfig types, ESLint/Prettier, legacy hooks, package-manager settings) instead of treatingvite-plusas migration-complete; fully migrated projects stay idempotent (#1821), by @jong-kyungvp create/vp migrate: detect shorthandfmt,/lint,config keys so a duplicate inline block is no longer injected (#1843), by @fengmk2- IDE oxlint/oxfmt wrappers: set
VP_COMMANDsolazyPlugins()skips framework plugins during LSP config reads, preventing a stray.svelte-kit(and similar) directory at the monorepo root (#1764), by @jong-kyung vp lint/vp run -r linton Windows: keep the absolutetsgolintpath for workspace lint runs instead of downgrading it to a wrong cwd-relative path (#1758), by @semimikoh- oxlint wrapper: set the
tsgolintpath so type-aware lint resolves it (#1811), by @jong-kyung vp install -g: use a unique backup directory and treat stale-backup cleanup as best-effort so a locked Windows binary no longer fails an otherwise successful reinstall (#1753), by @fengmk2vp install -g: remove stale managed binary shims when a reinstalled package drops a bin from itspackage.json#bin(#1765), by @liangmiQwQvp create --git: surface git's actual stdout/stderr when the initial commit fails instead of always blaminguser.name/user.email(#1819), by @fengmk2vp create vite:generator: reject--git/--no-git, since adding a generator to an existing monorepo does not initialize git (#1788), by @jong-kyung- Global CLI: harden
find_system_toolagainst a self-exec loop (skip the running executable's own bin directory) and fix twovite_global_clitests that could hang (#1820), by @fengmk2 - CLI help: unify alias display (#1832), show supported
runoptions (#1797), show--fail-if-no-matchinexechelp (#1798), add theimplodedocumentation link (#1796), and handle nested-command typo help (#1803), by @jong-kyung
Docs
- Document
vp createopt-out options (#1790), by @jong-kyung - Document
vp upgradeoptions (#1847), by @jong-kyung - Align the config overview with the sidebar (#1846), by @jong-kyung
- Sync the documented command lists with the help output (#1850), by @jong-kyung
- Clarify lazy plugin side effects (#1841), by @leno23
- Add JongKyung's X profile (#1844) and update Christoph's X profile (#1845) on the team page, by @jong-kyung
Refactor
- Remove the CLI tips system; the shortcuts it printed on
vp installare already covered by the help system and added unnecessary complexity (#1799), by @cpojer
Chore
vite-plus v0.1.24
A new vp pm stage publishing workflow, hardened installs and upgrades, a Node-version mismatch reinstall prompt, and the bundled vite/vitest/tsdown stack moves forward.
Features
vp pm stage: a newvp pmsubcommand exposing npm's staged-publishing workflow (upload a build to a staging area without 2FA, then approve or reject it from a trusted device); it maps topnpm stage/npm stage/yarn npm ... --stagedper package manager, with an npm fallback for yarn Classic and bun (#1715), by @fengmk2vp: prompt to reinstall when up-to-date global packages were built against a different Node.js than the active one (defaults to no); adds--reinstall-node-mismatchand--ignore-node-mismatch, and skips the prompt in CI (#1666), by @liangmiQwQvp format: addformatas a visible alias ofvp fmt, so the common slipvp formatresolves correctly andvp format --init/--migrateapply the samevite.config.tswiring asvp fmt(#1727), by @semimikoh
Fixes & Enhancements
vp install/ Node runtime download: HTTP retries now wrap the whole body stream, hash verification, and archive extraction (not just the request headers), so truncated or corrupt downloads of package managers and Node are re-fetched instead of failing on the first attempt (#1719), by @fengmk2vp upgrade --forceon Windows: install into a fresh directory before repointingcurrent, so the forced reinstall no longer fails trying to overwrite the runningvp.exe(#1714), by @fengmk2vp install -g: install global packages directly into their final prefix instead of a temp dir that gets moved, so packages whose postinstall scripts bake in absolute or relative temp paths still resolve their bins; a failed package in a multi-package install no longer removes the shims of the ones that already succeeded (#1698), by @liangmiQwQvp why: remove the-g/--globalflag, which delegated to the package manager's global mode and ignored Vite+-managed global packages;vp whystays project-scoped whilevp outdated -gkeeps using the managed global flow (#1720), by @liangmiQwQ- Windows installer: remove the existing
currentlink via PowerShell (detecting junctions, symlinks, and stale directories) instead ofcmd /c rmdir, which could fail with "The directory is not empty" (#1726), by @TheAlexLichter vp create: skip editor-config detection and package-local editor settings by default when creating a project inside an existing monorepo;--editor <name>stays an explicit opt-in and--no-editoran opt-out (#1729), by @jong-kyungvp create vite:monorepo(pnpm): keep the aliasedvite/vitestin the website app'spackage.jsonso the workspaceoverrides.vite: catalog:has a direct consumer andvp why viteresolves to@voidzero-dev/vite-plus-core; npm/yarn/bun still drop the dead-weight keys (#1728), by @fengmk2vp pack: rewrite directcreateRequire(...)("picomatch")calls in bundled tsdown output to the local bundled CJS entry, so packing no longer depends on an undeclared runtimepicomatchunder pnpmhoist: false(#1732), by @fengmk2vp migrate: resolve acatalog:husky pin from the workspace catalog (pnpm-workspace.yaml,.yarnrc.yml, orpackage.jsoncatalogs) during the git-hooks preflight, so a compatible catalog-pinned husky no longer triggers a false "could not determine husky version" warning and skips hook setup (#1710), by @fengmk2
Docs
- Add a Copy Prompt button to the docs site that copies an AI-friendly getting-started prompt (intro,
llms-full.txtpointer, install commands, and corevpcommands) for handing straight to a coding agent (#1706), by @fengmk2 - Update
troubleshooting.md:vite.config.tsrelated issues are resolved by updating oxlint and oxfmt (#1708), by @leaysgur - Clarify the product and repository documentation locations and the new Run guide/config paths in
AGENTS.md(#1707), by @leaysgur
Chore
vpinstall: reduce retainedvpversions from 5 to 3 across the installer,vp upgrade, and the shell/PowerShell bootstrap scripts (active and previous versions stay protected for rollback); document the 3-version retention andvp upgrade --rollback(#1716), by @fengmk2- Exclude the snap-tests directory from Vitest config discovery so the VS Code Vitest extension stops generating a stray
.vitest-plugin-loadedfile (#1723), by @liangmiQwQ - Refresh trusted stack stats on the docs homepage (#1734), by @voidzero-guard[bot]
- Update @wan9chi's GitHub handle (formerly
branchseer) (#1705), by @wan9chi - Update GitHub Actions (#1724, #1730), by @renovate[bot]
- Upgrade upstream dependencies: vite
8.0.14 → 8.0.16, vitest4.1.7 → 4.1.8, tsdown0.22.0 → 0.22.1,@vitejs/devtools0.2.0 → 0.3.1(#1713, #1735, #1737), by @voidzero-guard[bot]
Bundled Versions
| Tool | Version | Source |
|---|---|---|
| vite | 8.0.16 |
f94df87 |
| rolldown | 1.0.3 |
a287faa |
| tsdown | 0.22.1 |
npm |
| vitest | 4.1.8 |
npm |
| oxlint | 1.67.0 |
npm |
| oxlint-tsgolint | 0.23.0 |
npm |
| oxfmt | 0.52.0 |
npm |
New Contributors
Welcome to our new contributor @semimikoh! 🎉
Full Changelog: v0.1.23...v0.1.24
Published Packages
@voidzero-dev/vite-plus-core@0.1.24@voidzero-dev/vite-plus-test@0.1.24vite-plus@0.1.24
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.
Upgrade:
vp upgradevite-plus v0.1.23
Enterprise-ready HTTP (proxy + custom CA), task command shorthands in vite.config.ts, a smoother vp create/vp migrate, and the oxc/vite/rolldown bundled stack moves forward.
Highlights
- Proxy and custom-CA aware HTTP: a new process-wide
vite_shared::shared_http_client()honorsHTTPS_PROXY/HTTP_PROXY/NO_PROXY, picks up macOS System Settings / Windows registry proxies, loads custom CAs fromSSL_CERT_FILEandNODE_EXTRA_CA_CERTS, and exposes aVP_INSECURE_TLSdiagnostic switch; makesvpwork through Socket Firewall Free and other TLS-intercepting proxies (#1686), by @fengmk2 - Task command shorthands:
run.tasksentries invite.config.tsnow accept a bare string ("build": "cmd") or array ("build": ["cmd1", "cmd2"]) instead of always requiring{ command: ... }; arrays reuse the existing&&planning path so cache,dependsOn, and task options stay consistent (vite-task#391), by @jong-kyung - Managed
vp outdated -g: routes through Vite+'s managed global package metadata instead of delegating to the underlyingnpm outdated -gstore, so all installed global packages are reported consistently (#1659), by @liangmiQwQ
Features
vp pm approve-builds: new unified subcommand that mirrorspnpm approve-buildsone-to-one, adapts tobun pm trust, and warns-and-noops on npm/yarn (#1662), by @fengmk2vp create: opt-in GitHub Copilot setup; selecting--agent copilotnow generates a.github/workflows/copilot-setup-steps.ymlso the Copilot Coding Agent can set up Vite+ and runvpin the new project out of the box (#1683), by @jong-kyungvp migrate: prompt to removebaseUrlfromtsconfig.jsonbefore applying type-aware lint defaults (runs@andrewbranch/ts5to6 --fixBaseUrl .under the hood; auto-applied in non-interactive mode) (#1692), by @TheAlexLichter- Respect
packageManagerin package-manager shims (npm/npx,pnpm/pnpx,yarn/yarnpkg,bun/bunx); add non-mutatingpackageManagerresolution metadata forvp env currentandvp env which(#1654), by @fengmk2 - vite-task:
--filterno-match now exits0by default; add--fail-if-no-matchto opt back in (vite-task#393), by @kazupon
Fixes & Enhancements
vp create: keep generated.vscode/settings.jsontrackable when the VS Code editor option is selected (avoid templates'.vscode/*.gitignoremasking it) (#1700), by @jong-kyungvp create vite:monorepo: normalize sub-packagevite-plustocatalog:even when onlyvite-plus(notvite/vitest/...) is present, and drop thevite/vitestaliases generated by the upstream library template (#1697), by @fengmk2vp add/install -g <path>: resolve the real package name frompackage.jsoninstead of using the path string, so local-path installs don't create broken directories (#1685), by @liangmiQwQvp test --coverageand other direct built-in commands now expose the workspace'spackage.json#packageManagerto child processes so tools like Vitest coverage can spawn the configured PM (#1696), by @jong-kyungvp migrate: clean up the whole ESLint ecosystem (plugins, configs, parser/resolver, type-utils) rather than justeslint; skip the migration entirely when@nuxt/eslintis detected (#1682), by @fengmk2vp create: writefmt.configPath(notconfigPath) for Zed oxfmt settings to match the official Zed OXC extension layout (#1687), by @chungweileong94vp migrate: parsetsconfig.jsonas JSONC so files with comments don't breakbaseUrldetection/removal (#1688), by @TheAlexLichtervp env setup: Unix env shims now point at the activevpexecutable instead of always assumingVP_HOME/current/bin/vp, so Homebrew-style installs work (#1631), by @leoharavp outdated -g/vp why -g: don't require a localpackage.json; global commands run regardless of cwd (#1622), by @liangmiQwQvp create: default the "Initialize a git repository?" prompt to yes (#1650), by @fengmk2vphooks: include the managed Node bin inPATHso./node_modules/.bin/vpcan findnodefrom a VS Code commit on macOS (#1647), by @TheAlexLichtervpxon Windows now invokes the package's.cmdshim instead of the Unix binary (#1652), by @tobynguyen27- vite-task: bump cache database schema to version 13 (forces a one-time rebuild of the local task cache) (vite-task#402), by @branchseer
- Bump vite-task to
d02b257and5833b374; also bumps the repo's Rust nightly toolchain tonightly-2026-05-24and ships the regeneratedrunconfig types and docs for the new task command shorthand (#1689, #1695), by @branchseer
Refactor
- Replace
VP_SHELL_NU/VP_SHELL_PWSHwith a singleVP_SHELLoverride; add explicit shell parsing forbash,zsh,fish,nu,pwsh, andcmd, and harden auto-detection against nested shells (#1658), by @nekomoyi - vite-task: replace
allocator-api2withbumpalocollections (vite-task#400), by @branchseer - vite-task: drop the unused
and_item_indexfield fromExecutionItemDisplay(vite-task#394), by @branchseer
Docs
- Add the root
AGENTS.mdas the primary AI-agent guide for the vite-plus repository; convertCLAUDE.mdinto a compatibility pointer (#1670), by @jong-kyung - Align the agent validation table to match
AGENTS.md(#1673), by @jong-kyung - Update the task output caching guide so the documented behavior matches what vite-task actually does (#1639), by @ericclemmons
- Correct the bundled-source location in
packages/core/BUNDLING.md(#1660), by @shulaoda
Chore
- Clarify
--helptext forvp env default/pin/use/execwithExamples:blocks (#1664), by @Boshen - Refresh trusted stack stats on the docs homepage (#1680), by @voidzero-guard[bot]
- Drop the standalone
pnpm --filter @rolldown/pluginutils buildstep now that@rolldown/pluginutilsis published from its own package (#1655), by @shulaoda - Preserve single-quote style when
sync-remoterewritespnpm-workspace.yaml(#1672), by @lyzno1 - Enable
vite_pm_clilib tests by removing a staletest = falseflag (#1661), by @shulaoda - CI: switch macOS runners back to
namespace-profile-mac-default(#1701), by @fengmk2 - CI: fix release-day flakes in the upgrade test and snap test when the dev
package.jsonversion equals npm latest (#1645), by @fengmk2 - CI: replace
zizmorandcargo-denyworkflows withoxc-project/security-action(#1635), by @Boshen - CI: warm-up monorepo cache test under npm (#1649), by @fengmk2
- CI: attach per-target
vpbinary archives (.tar.gz/.zip) to GitHub Releases alongside the existingvp-setup-*.exeinstallers (#1665), by @Boshen - CI: declare Playwright via
repo.jsonin ecosystem tests and bump consumers to>=1.60to dodge the Node 24.16.0 hang (#1668), by @fengmk2 - Update GitHub Actions (#1640, #1675, #1678, #1679, #1691), by @renovate[bot]
- Upgrade upstream dependencies: vite
8.0.11 → 8.0.14, rolldown1.0.0 → 1.0.3, vitest4.1.6 → 4.1.7, oxlint1.63.0 → 1.67.0, oxfmt0.48.0 → 0.52.0, oxlint-tsgolint0.22.1 → 0.23.0,@oxc-project/*and oxc Rust crates0.129.0 → 0.133.0(#1646, #1653, #1693, #1699), by @voidzero-guard[bot]
Bundled...
vite-plus v0.1.22
A critical Vitest browser-mode security fix, parallel vp add -g installs, a built-in oxlint rule to prefer vite-plus imports, and a new --git switch for vp create.
Highlights
- Security: bundled
vitestbumped to4.1.6to address GHSA-2h32-95rg-cppp (Critical, CVSS 9.6), an XSS to RCE chain via theotelCarrierquery parameter in Vitest browser mode (#1633) - Parallel global install:
vp add/install/update -gnow installs packages concurrently with a progress bar and a--concurrencyflag (default 5) (#1597) - Prefer vite-plus imports: new bundled oxlint rule rewrites
vite/vitestimports tovite-plus, enabled by default in generated and migratedlintconfigs (#1408) - Git init on scaffold:
vp createlearns--git/--no-git(interactive prompt; auto-commits "Initial commit from Vite+") (#1484)
Features
- Spawn npm for global installation in parallel with a progress bar and a
--concurrencyoption (#1597), by @liangmiQwQ - Add bundled oxlint rule to prefer
vite-plusimports overvite/vitest(#1408), by @Han5991 vp create: initialize a git repository and create an initial commit on scaffold (#1484), by @ryohidakavp create: rename underscore-prefixed files (_gitignore,_npmrc,_yarnrc.yml) to dotfiles for@org/createbundled templates (#1574), by @jong-kyung- Add
VP_PR_VERSIONenv var to install unreleased PR builds via pkg.pr.new (#1578), by @fengmk2
Fixes & Enhancements
- Skip merging standalone
.oxfmtrc/.oxlintrcconfig when thefmt:/lint:key is already declared invite.config.ts(fixes duplicate-block regression invp create fate) (#1601), by @fengmk2 - Suppress the
VITE+ - The Unified Toolchain for the Webbanner forvp lint --lsp,vp fmt --lsp, andvp fmt --stdin-filepathso stdout stays a pure LSP / formatter stream (#1619), by @fengmk2 vp create: detect output directory when running in the current directory (#1606), by @jong-kyungvp update -g: skip installs when the recorded global package version already matches the npm-resolved version, and tolerate string/array outputs fromnpm view ... version --json(#1596), by @leno23vp create: preserve single-segment project path inupdateWorkspaceConfig(#1582), by @jong-kyungvp env use: keep the change session-scoped on Windows (#1577), by @fengmk2vp rebuild: accept positional package names (#1564), by @fengmk2- Adopt the new vite-task error formatter; errors now print as
error: <top-level>plus* <source>chain lines, with bold-red highlight on a TTY (vite-task#390), by @branchseer - vite-task: forward
LOCALAPPDATAso Node's compile cache stays outside the workspace on Windows (vite-task#389), by @branchseer - Bump vite-task to
c945cc0(#1628), by @branchseer
Refactor
- Revert
vp pm plugincommand (per discussion in #1038) (#1623), by @jong-kyung
Docs
- Add
vitepress-plugin-llmsto the docs site so the published docs include LLM-friendly outputs (/llms.txt) (#1625), by @jong-kyung - Refresh home stats for oxlint, vite, and vitest (#1512), by @nozomee
- Mention
vp env doctorin agent instructions (#1603), by @leno23
Chore
- Consolidate the upstream build chain into a single
pnpm buildscript (justfile recipe now just callspnpm build) (#1626), by @fengmk2 - Fix bootstrap-cli on Windows (#1583), by @fengmk2
- Refresh trusted stack stats (#1573, #1616), by @voidzero-guard[bot]
- Update GitHub Actions (#1611, #1612), by @renovate[bot]
- Address zizmor findings in composite actions and the release workflow; drop unused
actions-cool/issues-helper(#1630), by @Boshen - Switch plain checkouts to
taiki-e/checkout-action(#1620), by @Boshen - Switch release to a version-bump PR + push trigger flow (#1575), by @Boshen
- Gate release publish on environment approval with a Discord notice (#1571), by @Boshen
- Enable
cargo clippywith-D warnings(#1579), by @Boshen - Drop unused
setup-nodefrom the version-check job (#1600), by @fengmk2 - Add Void deploy workflows for the docs site (#1590), by @fengmk2
- Add
--helpcase to config snap tests for npm10/yarn1/yarn4 (#1585), by @jong-kyung - Add
--helpcase to publish snap tests for npm10/yarn1/yarn4 (#1584), by @jong-kyung - Verify
.gitignoreand.yarnrc.ymlin the new-vite-monorepo snap (#1576), by @jong-kyung - vite-task: bump pnpm to
11.1.2(vite-task#383), by @branchseer - vite-task: update lint-staged to v17 (vite-task#385), by @renovate[bot]
Bundled Versions
| Tool | Version | Source |
|---|---|---|
| vite | 8.0.11 |
66f3194 |
| rolldown | 1.0.0 |
ac5c710 |
| tsdown | 0.22.0 |
npm |
| vitest | 4.1.6 |
npm |
| oxlint | 1.63.0 |
npm |
| oxlint-tsgolint | 0.22.1 |
npm |
| oxfmt | 0.48.0 |
npm |
New Contributors
Welcome to all new contributors! 🎉
Full Changelog: v0.1.21...v0.1.22
Published Packages
@voidzero-dev/vite-plus-core@0.1.22@voidzero-dev/vite-plus-test@0.1.22vite-plus@0.1.22
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.
Upgrade:
vp upgradevite-plus v0.1.21 — Create, Migrate & Local CLI Power-Up
vp create learns @org templates, vp migrate rewrites more of your codebase, and the local CLI gains full vp pm parity.
Highlights
- Package-manager parity — every
vp pmcommand now works from the local CLI (#1495) - More Nushell support — broader shell coverage for
vp envand related commands (#1305) - Smarter
vp migrate— rewrites named catalogs (#1493),tsdown/clientimports &declare modulestatements (#1541), andtsdown/client/vite/clientintsconfigcompilerOptions.types(#1542) vp create@orgtemplates — scoped default templates are now supported (#1398)
Features
- Bring all package-manager commands to the local CLI (#1495) — @fengmk2
- Support
@orgdefault templates invp create(#1398) — @fengmk2 - Support yarn plugin commands via
vp pm plugin(#1540) — @jong-kyung - Forward
--provenanceflag when publishing a package (#1549) — @cpojer - More Nushell support (#1305) — @XiNiHa
vp migrate: rewritetsdown/clientimports anddeclare modulestatements (#1541) — @naokihabavp migrate: rewritetsdown/clientandvite/clientintsconfigcompilerOptions.types(#1542) — @naokihaba- vite-task: add
outputglobs for cache restoration (vite-task#375) — @branchseer - vite-task: store colored task logs, strip at display when needed (vite-task#378) — @branchseer
- Upgrade upstream dependencies — rolldown
v1.0.0, vitev8.0.11, tsdown0.22.0(with newtsxconfig-loader), oxc Rust crates0.128.0, oxc npm0.129.0, oxlint1.63.0, oxfmt0.48.0,@vitejs/devtools0.1.21(#1521, #1531, #1548) — @voidzero-guard[bot]
Fixes & Enhancements
vp migrate: rewrite named catalogs (#1493) — @lyzno1- Show
createandmigratein local CLI top-level help (#1508) — @nurazon59 - Fish env setup using string-literal command for
vp envcommands (#1518) — @mikkurogue - Auto-pass
--ignore-scriptswhen pnpm>=11inmigrate/create(#1533) — @fengmk2 - Route Windows
.cmdshims through PowerShell for pm commands (#1498) — @fengmk2 - Add
vite-plus/pack/clientexport astsdown/clientequivalent (#1501) — @naokihaba - Publish release as draft to support immutable releases (#1558) — @fengmk2
- Preserve string-literal tabs in
convertTabsToSpaces(#1559) — @fengmk2 - Include
docs/in fmt and lint (#1552) — @fengmk2 - vite-task: move
FORCE_COLORfallback after pattern filtering (vite-task#379) — @branchseer - vite-task: preserve
PATHEXTfor Windows cached tasks (vite-task#366) — @SegaraRai - Bump vite-task to
c63db22(#1560) — @branchseer
Refactor
- Convert team data file to TypeScript (#1515) — @jong-kyung
Docs
- Add filename labels to configuration code blocks (#1496) — @fengmk2
- Add monorepo overrides guide (#1535) — @fengmk2
- Improve "before" CI usage to actual use case (#1551) — @Mister-Hope
Chore
- Update
crate-ci/typosaction to v1.46.1 (#1509, #1554) — @renovate[bot] - Rewrite upgrade-deps script in TypeScript (#1514) — @camc314
- Add pnpm v11 snap tests for command adaptation coverage (#1289) — @fengmk2
- Bump upgrade-deps
max-turnsfrom 200 to 400 (#1520) — @fengmk2 - Update pnpm to v10.33.2 (#1505) — @renovate[bot]
- Prevent false-positive
<repeat>replacement on trailing plus (#1524) — @nurazon59 - Update
lodash-esto v4.18.1 [security] (#1522) — @renovate[bot] - Stabilize global snap tests against pnpm v11 (#1528) — @fengmk2
- Disable npm and cargo updates in Renovate (#1536) — @Boshen
- Publish preview packages to pkg.pr.new (#1526) — @Boshen
- Gate pkg.pr.new publish on label only (#1547) — @Boshen
- Upgrade GitHub Actions to latest versions (#956) — @salmanmkc
- Upgrade GitHub Actions for Node 24 compatibility (#955) — @salmanmkc
- Correct kazupon's X account link on the team page (#1513) — @jong-kyung
- Ensure no file changes after
build-upstreamstep (#1563) — @fengmk2
Bundled Versions
| Tool | Version | Source |
|---|---|---|
| vite | 8.0.11 |
66f3194 |
| rolldown | 1.0.0 |
ac5c710 |
| tsdown | 0.22.0 |
npm |
| vitest | 4.1.5 |
npm |
| oxlint | 1.63.0 |
npm |
| oxlint-tsgolint | 0.22.1 |
npm |
| oxfmt | 0.48.0 |
npm |
Published Packages
@voidzero-dev/vite-plus-core@0.1.21@voidzero-dev/vite-plus-test@0.1.21vite-plus@0.1.21
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.
Upgrade:
vp upgradeNew Contributors
Welcome to all new contributors! 🎉
@nurazon59, @mikkurogue, @Mister-Hope, @salmanmkc, @XiNiHa
Full Changelog: v0.1.20...v0.1.21
vite-plus v0.1.21-alpha.7
vite-plus v0.1.21-alpha.7
Published Packages
@voidzero-dev/vite-plus-core@0.1.21-alpha.7@voidzero-dev/vite-plus-test@0.1.21-alpha.7vite-plus@0.1.21-alpha.7
Installation
macOS/Linux:
curl -fsSL https://vite.plus | VP_VERSION=0.1.21-alpha.7 bashWindows:
\$env:VP_VERSION=\"0.1.21-alpha.7\"; irm https://vite.plus/ps1 | iexOr download and run vp-setup.exe from the assets below.
View the full commit: c61621a
vite-plus v0.1.21-alpha.6
vite-plus v0.1.21-alpha.6
Published Packages
@voidzero-dev/vite-plus-core@0.1.21-alpha.6@voidzero-dev/vite-plus-test@0.1.21-alpha.6vite-plus@0.1.21-alpha.6
Installation
macOS/Linux:
curl -fsSL https://vite.plus | VP_VERSION=0.1.21-alpha.6 bashWindows:
\$env:VP_VERSION=\"0.1.21-alpha.6\"; irm https://vite.plus/ps1 | iexOr download and run vp-setup.exe from the assets below.
View the full commit: e134e4f
vite-plus v0.1.21-alpha.5
vite-plus v0.1.21-alpha.5
Published Packages
@voidzero-dev/vite-plus-core@0.1.21-alpha.5@voidzero-dev/vite-plus-test@0.1.21-alpha.5vite-plus@0.1.21-alpha.5
Installation
macOS/Linux:
curl -fsSL https://vite.plus | VP_VERSION=0.1.21-alpha.5 bashWindows:
\$env:VP_VERSION=\"0.1.21-alpha.5\"; irm https://vite.plus/ps1 | iexOr download and run vp-setup.exe from the assets below.
View the full commit: 6347597
vite-plus v0.1.21-alpha.4
vite-plus v0.1.21-alpha.4
Published Packages
@voidzero-dev/vite-plus-core@0.1.21-alpha.4@voidzero-dev/vite-plus-test@0.1.21-alpha.4vite-plus@0.1.21-alpha.4
Installation
macOS/Linux:
curl -fsSL https://vite.plus | VP_VERSION=0.1.21-alpha.4 bashWindows:
\$env:VP_VERSION=\"0.1.21-alpha.4\"; irm https://vite.plus/ps1 | iexOr download and run vp-setup.exe from the assets below.
View the full commit: dc41b71