release: v0.2.2 Vite+ Beta#2016
Conversation
✅ Deploy Preview for viteplus-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
NAPI bakes the package.json version into binding/index.cjs version checks. The prepare_release workflow bumps package.json but does not regenerate this file, so the CI build's regeneration step produces a diff that the post-build no-unexpected-changes guard rejects.
|
Discord announcement draft (concise), copy-paste after the release is published: **Vite+ Beta is out (vite-plus v0.2.2)** :tada:
Stable, production-ready, MIT. Read the announcement: https://voidzero.dev/posts/announcing-vite-plus-beta
**Highlights**
:seedling: `vp migrate` now upgrades existing Vite+ projects across versions
:hammer_and_wrench: Official Docker image: `ghcr.io/voidzero-dev/vite-plus`
:zap: Zero-config `vp build` caching (auto outputs + tracked envs)
:lock: PGP-verified Node.js downloads
**Also in this release**
- `check.fmt` / `check.lint` config for `vp check`
- `vpr` ships as a package bin (works on Vercel/CI)
- Windows: `vp run` no longer hangs on PowerShell `.cmd` shims
- Task cache survives switching branches across Vite+ versions
- `dependsOn: [{ task, from: "dependencies" }]`
**Bundled versions**
vite `8.1.2`, rolldown `1.1.4`, tsdown `0.22.3`, vitest `4.1.9`, oxlint `1.72.0`, oxlint-tsgolint `0.24.0`, oxfmt `0.57.0`
**Upgrade**: `vp upgrade`
Full notes: <https://github.com/voidzero-dev/vite-plus/releases/tag/v0.2.2>
Thanks to new contributors @rokuosan, @Aalivexy, @cheezone, @daflyinbed, @forehalo, @kvnwolf :wave: |
vite-plus
@voidzero-dev/vite-plus-core
@voidzero-dev/vite-plus-prompts
@voidzero-dev/vite-plus-cli-darwin-arm64
@voidzero-dev/vite-plus-cli-darwin-x64
@voidzero-dev/vite-plus-cli-linux-arm64-gnu
@voidzero-dev/vite-plus-cli-linux-arm64-musl
@voidzero-dev/vite-plus-cli-linux-x64-gnu
@voidzero-dev/vite-plus-cli-linux-x64-musl
@voidzero-dev/vite-plus-cli-win32-arm64-msvc
@voidzero-dev/vite-plus-cli-win32-x64-msvc
@voidzero-dev/vite-plus-darwin-arm64
@voidzero-dev/vite-plus-darwin-x64
@voidzero-dev/vite-plus-linux-arm64-gnu
@voidzero-dev/vite-plus-linux-arm64-musl
@voidzero-dev/vite-plus-linux-x64-gnu
@voidzero-dev/vite-plus-linux-x64-musl
@voidzero-dev/vite-plus-win32-arm64-msvc
@voidzero-dev/vite-plus-win32-x64-msvc
commit: |
Registry bridge build (
|
| Package | Version |
|---|---|
vite-plus |
0.0.0-commit.1d7ba811f0e456640b0e761e8e8acf77d1ad3251 |
@voidzero-dev/vite-plus-core |
0.0.0-commit.1d7ba811f0e456640b0e761e8e8acf77d1ad3251 |
Install the Vite+ CLI built from this commit, then migrate a project:
# macOS / Linux
curl -fsSL https://vite.plus | VP_PR_VERSION=2016 bash# Windows (PowerShell)
$env:VP_PR_VERSION="2016"; irm https://vite.plus/ps1 | iexAfter installing, upgrade the current project's vite-plus to this test build with:
vp migrateOr point your package manager at the bridge registry https://registry-bridge.viteplus.dev/:
| Package manager | Registry config |
|---|---|
| npm / pnpm / Bun | .npmrc: registry=https://registry-bridge.viteplus.dev/ |
| Yarn (v2+) | .yarnrc.yml: npmRegistryServer: "https://registry-bridge.viteplus.dev/" |
Then pin the build (vite aliases to vite-plus-core; pnpm can use a catalog, npm an overrides entry):
{
"devDependencies": {
"vite-plus": "0.0.0-commit.1d7ba811f0e456640b0e761e8e8acf77d1ad3251",
"vite": "npm:@voidzero-dev/vite-plus-core@0.0.0-commit.1d7ba811f0e456640b0e761e8e8acf77d1ad3251"
}
}
🐳 Docker preview imageBuilt from this PR's pkg.pr.new build:
# remove any stale local copy from a previous run, then pull fresh
docker rmi ghcr.io/voidzero-dev/vite-plus:pr-2016 2>/dev/null; docker pull ghcr.io/voidzero-dev/vite-plus:pr-2016Quick check: docker run --rm ghcr.io/voidzero-dev/vite-plus:pr-2016 vp --versionSee docs/guide/docker.md for usage. |
Documents the v0.2.2 (PR #2016) smoke test run: choosing a target project pinned to the previous release for a real upgrade path, passing the full build commit SHA when the PR head has moved, the shape of a passing run, and the single-version pass criteria with the release-blocker rule on failure.
Release vite-plus v0.2.2: the Vite+ Beta release.
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-awarevp buildcaching, 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 @fengmk2ghcr.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 @fengmk2vp 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 @wan9chiSHASUMS256.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 @fengmk2Features
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 @kvnwolfdependsOncan select tasks from dependency packages, e.g.dependsOn: [{ "task": "build", "from": "dependencies" }](vite-task#479), by @wan9chienv/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 @wan9chi8.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
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 @fengmk2node_modules/.vite/task-cache/v13/), so switching between branches that pin different Vite+ versions no longer fails withUnrecognized database version(vite-task#433), by @fengmk2PATH=... 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 @wan9chivp 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 @liangmiQwQpackages/<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 @liangmiQwQlazyPlugins(): 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-kyungpackageManager/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 @liangmiQwQvp-setup: pass the configured npm registry to the inner pnpm install so setup works behind custom registries (#1795), by @daflyinbedengines.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 @fengmk2vp 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 @rokuosanHttpClient::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 @shulaodaenv.fishfallback path (#1954), by @Aalivexyinstall.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 @fengmk2vp 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-kyungErrorConfigerror types across the codebase (#1934), by @liangmiQwQRefactor
vite_install: centralize Yarn v1/berry branching withis_yarn_berry(#1897), by @jong-kyungDocs
dependsOn: [{ task, from: "dependencies" }](#1992), by @wan9chi0.0.0-commit.<sha>npm versions, andvp migrateis the recommended way to upgrade a project or move it onto a preview build (#1965), by @fengmk2vp envhelp output (#1969), and add liangmiQwQ as a team member (#1911), by @liangmiQwQdependsOnguide link (#1883), by @jong-kyungChore
vite-plusversion so release-branch CI can pass before the new version is published (#2017), by @fengmk2VITE_PLUS_env var prefixes toVP_in the RFCs (#1984), by @liangmiQwQBundled Versions
8.1.2ba311931.1.46cbd2330.22.34.1.91.72.00.24.00.57.0Upgrade
New to Vite+? Start with the Beta announcement, then create a project with
vp createor bring an existing one over withvp migrate.New Contributors
Welcome to our new contributors @rokuosan, @Aalivexy, @cheezone, @daflyinbed, @forehalo, @kvnwolf! 🎉
Full Changelog: v0.2.1...v0.2.2
Merging this PR will trigger the release workflow.