Fresh installs now use a split directory layout instead of a single ~/.vite-plus root. Unix follows the XDG base directory specification, and Windows uses the standard %LOCALAPPDATA% and %APPDATA% folders. Existing ~/.vite-plus installs keep their current directory layout. vp migrate also converts tsup projects, and vp now sends Bun 1.4 package-manager commands to bun directly. The published npm package shrank by about half, and the upgrade check no longer delays each command.
Breaking Changes
-
Fresh installs now use a split directory layout instead of a single root: XDG base directories on Unix, and the standard known folders on Windows. Existing
~/.vite-plusinstalls keep their current layout, and the installer does not move their files.VP_HOMEstill selects the single-root layout (#2346), by @forehaloCategory Unix default Windows default Single-root ( VP_HOME)bin ~/.local/share/vite-plus/bin%LOCALAPPDATA%\vite-plus\bin<root>/bindata ~/.local/share/vite-plus%LOCALAPPDATA%\vite-plus\data<root>cache ~/.cache/vite-plus%LOCALAPPDATA%\vite-plus\cache<root>/cacheconfig ~/.config/vite-plus%APPDATA%\vite-plus<root>state ~/.local/state/vite-plus%LOCALAPPDATA%\vite-plus\state<root>The installer configures your shell for the new location, and CI that installs through
setup-vpkeeps the single-root layout automatically. Update each hard-coded~/.vite-plus/binpath, such as a path in a Dockerfile.vp upgradeleaves an existing install where it is. To move one to the split layout, remove it and install again:vp implode unset VP_HOME VP_DATA_DIR VP_BIN_DIR VP_CACHE_DIR curl -fsSL https://vite.plus | bash
On Windows, run
vp implode, thenRemove-Item Env:\VP_HOME, Env:\VP_DATA_DIR, Env:\VP_BIN_DIR, Env:\VP_CACHE_DIR -ErrorAction SilentlyContinue, thenirm https://vite.plus/ps1 | iex. Also delete any persistentVP_HOMEorVP_*_DIRdefinition from your shell profile or system environment, because a fresh install still honors them andVP_HOMEselects the single-root layout.vp imploderemoves every Vite+ managed Node.js runtime, global package, configuration file, and cache. Stay on your current layout if you would rather not rebuild that state. See Move an existing install to the split directory layout.
Highlights
vp migratenow convertstsupprojects. It replaces thetsupdependency and script withvp pack. It also changestsup.config.tsto atsdown.config.tsthat imports fromvite-plus/pack(#2434), by @KTrain5169- Shell integrations now accept the global
-Cflag.vp -C <dir> env usechanges the environment of your current shell. The-C<dir>and-C=<dir>forms also work. In zsh, Fish, Nushell, and PowerShell,vprcompletion keeps the working directory when it changes the command tovp run(#2508), by @simulacre7 - The published
vite-plusnpm package shrank from 1.05 MB to 516 kB, a 51% reduction. It now includes only Markdown files from the documentation workspace. It no longer includes VitePress tooling, images, or deployment files (#2480), by @liangmiQwQ
Features
- With Bun
1.4or later, Vite+ forwards these commands and flags tobun. Earlier Bun versions keep their fallback or unsupported behavior and report the required Bun version (#2513), by @jong-kyungvp deduperunsbun dedupe, including--checkvp pm prunerunsbun prunevp pm audit --fixrunsbun audit fixvp add,vp remove, andvp updatesend--filtertobunvp add --save-catalogsends--catalogtobun
- The upgrade check no longer delays fast commands. It runs in a separate process. It reports an available update during a later command, and commands no longer wait for the registry (#2380), by @liangmiQwQ
- Upgrade the bundled toolchain (#2443, #2500, #2504, #2519, #2532), by @voidzero-guard[bot]:
vite:8.2.1to8.2.2rolldown:1.2.3to1.2.5vitest:4.1.10to4.1.11oxlint:1.77.0to1.79.0oxfmt:0.62.0to0.64.0- Oxc packages and crates:
0.143.0to0.146.0 - Vite+ now accepts
@vitejs/devtools0.5.x. The optional peer range is^0.4.0 || ^0.5.0. This repository uses0.5.2. oxfmtandoxlintcan report new issues after the upgrade. Runvp checklocally. Usevp fmtto fix formatting changes.
vp toolchaindraws its tree with Unicode glyphs. It no longer uses ASCII connectors (#2442), by @liangmiQwQ
Fixes & Enhancements
- At a workspace root, bare app commands now use
defaultPackageor detected root configuration before they select a member package. A workspace without member packages runs the command in the root (#2530, #2533), by @fengmk2 vp upno longer changes"vite": "catalog:"to a version alias underpnpm. Catalog references now stay unchanged during an update. Runvp migrateonce to correct an existing project (#2425), by @fengmk2- If the server accepts range requests, an interrupted runtime download continues from the bytes on disk. It does not start again (#2452), by @tarikermis
- The local CLI shows the install instructions when you run a global-only command such as
env,upgrade, orimplode(#2522), by @jong-kyung vp up -gasks npm for globally installed package versions. A project-level setting no longer makes the lookup fail and hide an available update (#2438), by @jong-kyung- When hooks are disabled through
HUSKY=0,VP_GIT_HOOKS=0, orVITE_GIT_HOOKS=0,vp configskips the Git lookup. This letsvp configrun in a container without Git (#2458), by @tarikermis vp create vite:monoreponow asks once about Git and runsgit initonce (#2417), by @jong-kyungvp createdoes not ask about pre-commit hooks when you choose not to initialize Git (#2477), by @liangmiQwQvp pack --no-configdoes not read the Vite config. A localvite.config.*file, itspackoptions, and its hooks no longer run (#2486), by @jong-kyungvp pack --helpshows the supported--no-configoptions (#2487), by @jong-kyungvp staged --no-concurrentworks again.--concurrentacceptstrue,false, or a number greater than0. It rejects other values. Vite+ also rejects--no-cwd,--no-diff, and--no-diff-filter(#2501), by @RSS1102vpreads about 450 kB less JavaScript at start. It loads the--initand--migratehelpers only when a command needs them (#2490), by @jong-kyung- The standalone
vpbinary is smaller. Vite+ no longer copies the package-manager command tree, and it disables unused tar and dialoguer features (#2507), by @liangmiQwQ - A generated Fish environment file escapes the special characters in a path (#2492), by @fengmk2
- A generated POSIX shell environment file escapes the special characters in a path. It also removes each duplicate Vite+ bin entry (#2494), by @fengmk2
- The generated
cmd.exewrapper preserves the exit status fromvp env use. It does not apply output after a failed command (#2496), by @fengmk2 vp execresolves a relativePATHentry such as./node_modules/.binagainst the working directory of the command (#2350), by @RSS1102- Older GitLab
setup-vptemplates continue to work. The installer selects the legacy layout for them. A template can select the new layout withVP_VPDIRS_AWARE=1(#2520), by @fengmk2 - The Windows installer checks the directory variables and the requested version before it downloads a payload. It also repairs a broken
currentjunction (#2505), by @fengmk2 install.shdoes not show shell configuration warnings whenCI=true(#2511), by @fengmk2- On Windows,
vp implodecan remove Vite+ roots that contain long or locked paths. A native helper does this work, and it retries cleanup and writes an error log if cleanup fails (#2510), by @fengmk2 - A Windows trampoline sidecar must have a
vite-plus-shim-v1header. The trampoline rejects one without that header instead of guessing the install layout (#2526), by @fengmk2
Docs
- Document the
vite-plus/testimport surface (#2413), by @jong-kyung - Add
vp hooksto the README command list (#2446), by @lyzno1
Chore
- Add Yii to the core team (#2435), by @forehalo
- Include install e2e in the aggregate CI status (#2439), by @jong-kyung
- Use the catalog for shared dependencies (#2447), by @liangmiQwQ
- Replace
huskywithvpgit hooks in this repo (#1001), by @Arthie - Exclude test fixtures from Renovate scanning (#2457), by @fengmk2
- Keep the binary size report in the job summary for fork PRs (#2448), by @fengmk2
- Update crate-ci/typos action to v1.49.0 (#2467), by @renovate[bot]
- Update GitHub Actions (#2474), by @renovate[bot]
- Update the
napicrate to3.12.2(#2527), by @fengmk2 - Ignore every
vite-taskgit dependency in Renovate (#2478), by @fengmk2 - Link preview installers and pin install scripts in CI (#2499), by @fengmk2
- Cover PowerShell setup in tests (#2495), by @fengmk2
- Cover Nushell file-based use in tests (#2497), by @fengmk2
- Remove redundant dist/test inclusion from the CLI package (#2506), by @jong-kyung
- Redact the
bunbuild hash in snapshots (#2514), by @jong-kyung - Align the command-routing RFC with the current global CLI (#2528), by @jong-kyung
- Fold v0.2.9 release learnings into the release-manager skill (#2429), by @fengmk2
- Add
vp_pm_cli_macrosandvp_toolchainto the repo map (#2524), by @jong-kyung
Bundled Versions
| Tool | Version | Source |
|---|---|---|
| vite | 8.2.2
| de1111a
|
| rolldown | 1.2.5
| 84c904b
|
| tsdown | 0.22.14
| npm |
| vitest | 4.1.11
| npm |
| oxlint | 1.79.0
| npm |
| oxlint-tsgolint | 7.0.2001
| npm |
| oxfmt | 0.64.0
| npm |
Upgrade
vp upgradeNew Contributors
Full Changelog: v0.2.9...v0.3.0
Published Packages
@voidzero-dev/vite-plus-core@0.3.0vite-plus@0.3.0
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.3.0 vp buildRun any vp command without installing it; see the Docker guide for more.