Repository navigation
release: v1.6.0 - #3426
release: v1.6.0#3426
Conversation
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. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🚀 Deploying Preview to Cloudflare 🚀Preview URL: https://release-v1-6-0-viteplus-dev.voidzero-docs.workers.dev (commit a86fd16)This URL reflects your latest Preview deploymentPreview Deployments by commit
|
|
✅ Staging deployment successful! Preview: https://viteplus-staging.void.app/ |
CLI artifact sizes (
|
| Artifact | Format | Base | PR | Change |
|---|---|---|---|---|
packages/cli/dist |
Directory total | 2.34 MiB | 2.34 MiB | 0 B (0.00%) |
packages/core/dist |
Directory total | 4.09 MiB | 4.09 MiB | 0 B (0.00%) |
| Combined package dist | Directory total | 6.42 MiB | 6.42 MiB | 0 B (0.00%) |
vp (Linux x64) |
Binary | 8.34 MiB | 8.34 MiB | 0 B (0.00%) |
vp (Linux x64) |
gzip -9 | 3.81 MiB | 3.81 MiB | +52 B (+0.00%) |
| NAPI (Linux x64) | Binary | 36.77 MiB | 36.77 MiB | 0 B (0.00%) |
| NAPI (Linux x64) | gzip -9 | 14.69 MiB | 14.69 MiB | -8 B (-0.00%) |
vp (macOS ARM64) |
Binary | 5.46 MiB | 5.46 MiB | 0 B (0.00%) |
vp (macOS ARM64) |
gzip -9 | 3.25 MiB | 3.25 MiB | -203 B (-0.01%) |
| NAPI (macOS ARM64) | Binary | 43.43 MiB | 43.43 MiB | 0 B (0.00%) |
| NAPI (macOS ARM64) | gzip -9 | 18.87 MiB | 18.86 MiB | -732 B (-0.00%) |
vp (Windows x64) |
Binary | 6.18 MiB | 6.18 MiB | 0 B (0.00%) |
vp (Windows x64) |
gzip -9 | 2.86 MiB | 2.86 MiB | -1.22 KiB (-0.04%) |
| NAPI (Windows x64) | Binary | 32.81 MiB | 32.81 MiB | 0 B (0.00%) |
| NAPI (Windows x64) | gzip -9 | 13.45 MiB | 13.45 MiB | -757 B (-0.01%) |
| Trampoline (Windows x64) | Binary | 13.50 KiB | 13.50 KiB | 0 B (0.00%) |
| Trampoline (Windows x64) | gzip -9 | 7.09 KiB | 7.09 KiB | 0 B (0.00%) |
| Installer (Windows x64) | Binary | 4.68 MiB | 4.68 MiB | 0 B (0.00%) |
| Installer (Windows x64) | gzip -9 | 2.24 MiB | 2.24 MiB | +1 B (+0.00%) |
Preview binary sizes (
|
| Binary | Latest release | Preview | Change |
|---|---|---|---|
vp (macOS ARM64) |
5.42 MiB | 5.46 MiB | +32.66 KiB (+0.59%) |
| NAPI (macOS ARM64) | 43.01 MiB | 43.39 MiB | +388.33 KiB (+0.88%) |
vp (macOS x64) |
6.90 MiB | 6.92 MiB | +20.38 KiB (+0.29%) |
| NAPI (macOS x64) | 48.29 MiB | 48.76 MiB | +485.56 KiB (+0.98%) |
vp (Linux ARM64 GNU) |
6.88 MiB | 6.90 MiB | +28.05 KiB (+0.40%) |
| NAPI (Linux ARM64 GNU) | 32.26 MiB | 32.69 MiB | +436.70 KiB (+1.32%) |
vp (Linux ARM64 musl) |
6.95 MiB | 6.97 MiB | +22.77 KiB (+0.32%) |
| NAPI (Linux ARM64 musl) | 31.48 MiB | 31.89 MiB | +422.56 KiB (+1.31%) |
vp (Linux x64 GNU) |
8.31 MiB | 8.33 MiB | +24.05 KiB (+0.28%) |
| NAPI (Linux x64 GNU) | 36.19 MiB | 36.69 MiB | +516.69 KiB (+1.39%) |
vp (Linux x64 musl) |
8.38 MiB | 8.41 MiB | +31.84 KiB (+0.37%) |
| NAPI (Linux x64 musl) | 35.39 MiB | 35.90 MiB | +513.84 KiB (+1.42%) |
vp (Windows x64) |
6.16 MiB | 6.19 MiB | +32.50 KiB (+0.52%) |
| NAPI (Windows x64) | 32.02 MiB | 32.45 MiB | +442.00 KiB (+1.35%) |
| Trampoline (Windows x64) | 13.00 KiB | 13.00 KiB | 0 B (0.00%) |
| Installer (Windows x64) | 4.67 MiB | 4.69 MiB | +18.50 KiB (+0.39%) |
vp (Windows ARM64) |
5.40 MiB | 5.42 MiB | +22.50 KiB (+0.41%) |
| NAPI (Windows ARM64) | 28.31 MiB | 28.66 MiB | +352.00 KiB (+1.21%) |
| Trampoline (Windows ARM64) | 13.00 KiB | 13.00 KiB | 0 B (0.00%) |
| Installer (Windows ARM64) | 3.84 MiB | 3.86 MiB | +14.50 KiB (+0.37%) |
gzip -9 sizes
| Binary | Latest release | Preview | Change |
|---|---|---|---|
vp (macOS ARM64) |
3.24 MiB | 3.25 MiB | +11.51 KiB (+0.35%) |
| NAPI (macOS ARM64) | 18.68 MiB | 18.85 MiB | +178.08 KiB (+0.93%) |
vp (macOS x64) |
3.42 MiB | 3.43 MiB | +9.59 KiB (+0.27%) |
| NAPI (macOS x64) | 19.91 MiB | 20.12 MiB | +215.69 KiB (+1.06%) |
vp (Linux ARM64 GNU) |
3.73 MiB | 3.74 MiB | +12.84 KiB (+0.34%) |
| NAPI (Linux ARM64 GNU) | 13.74 MiB | 13.93 MiB | +197.25 KiB (+1.40%) |
vp (Linux ARM64 musl) |
3.75 MiB | 3.77 MiB | +14.34 KiB (+0.37%) |
| NAPI (Linux ARM64 musl) | 13.44 MiB | 13.63 MiB | +198.28 KiB (+1.44%) |
vp (Linux x64 GNU) |
3.80 MiB | 3.81 MiB | +14.62 KiB (+0.38%) |
| NAPI (Linux x64 GNU) | 14.44 MiB | 14.65 MiB | +221.57 KiB (+1.50%) |
vp (Linux x64 musl) |
3.82 MiB | 3.84 MiB | +15.75 KiB (+0.40%) |
| NAPI (Linux x64 musl) | 14.11 MiB | 14.33 MiB | +224.31 KiB (+1.55%) |
vp (Windows x64) |
2.85 MiB | 2.87 MiB | +14.09 KiB (+0.48%) |
| NAPI (Windows x64) | 13.11 MiB | 13.31 MiB | +199.63 KiB (+1.49%) |
| Trampoline (Windows x64) | 7.14 KiB | 7.14 KiB | +2 B (+0.03%) |
| Installer (Windows x64) | 2.24 MiB | 2.25 MiB | +7.53 KiB (+0.33%) |
vp (Windows ARM64) |
2.72 MiB | 2.73 MiB | +11.54 KiB (+0.41%) |
| NAPI (Windows ARM64) | 12.45 MiB | 12.62 MiB | +180.95 KiB (+1.42%) |
| Trampoline (Windows ARM64) | 6.92 KiB | 6.92 KiB | 0 B (0.00%) |
| Installer (Windows ARM64) | 2.13 MiB | 2.14 MiB | +7.28 KiB (+0.33%) |
Raw sizes are uncompressed file sizes. gzip sizes recompress each binary at level 9; they are not package or download archive sizes.
The baseline uses published release files, including NAPI packages from npm at the same version. Build versions and toolchains can affect the difference.
Registry bridge build (
|
| Package | Version |
|---|---|
vite-plus |
0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be |
@voidzero-dev/vite-plus-core |
0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be |
create-vite-plus |
0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be |
Install the Vite+ CLI built from this commit, then migrate a project:
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/voidzero-dev/vite-plus/a86fd1603196e23718d16144a472ad91b4ba21be/packages/cli/install.sh | VP_PR_VERSION=3426 VP_LEGACY_INSTALLER_URL=https://raw.githubusercontent.com/voidzero-dev/vite-plus/a86fd1603196e23718d16144a472ad91b4ba21be/packages/cli/install-legacy.sh bash# Windows (PowerShell)
$env:VP_PR_VERSION="3426"; $env:VP_LEGACY_INSTALLER_URL="https://raw.githubusercontent.com/voidzero-dev/vite-plus/a86fd1603196e23718d16144a472ad91b4ba21be/packages/cli/install-legacy.ps1"; irm https://raw.githubusercontent.com/voidzero-dev/vite-plus/a86fd1603196e23718d16144a472ad91b4ba21be/packages/cli/install.ps1 | iexOr install with Homebrew (macOS / glibc Linux):
These commands use the formula and binary from this published commit. Replace brew install with brew reinstall if the tap package is already installed.
If Homebrew Core’s vite-plus is installed, run brew uninstall vite-plus first. This keeps your user data; do not run vp implode to switch installations.
(
set -eu
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_VP_PR_VERSION=a86fd1603196e23718d16144a472ad91b4ba21be
brew tap voidzero-dev/vite-plus https://github.com/voidzero-dev/vite-plus
preview_tap="$(brew --repository voidzero-dev/vite-plus)"
git -C "$preview_tap" fetch --depth=1 https://github.com/voidzero-dev/vite-plus.git "$HOMEBREW_VP_PR_VERSION"
git -C "$preview_tap" switch --detach "$HOMEBREW_VP_PR_VERSION"
brew install voidzero-dev/vite-plus/vp
brew test voidzero-dev/vite-plus/vp
"$(brew --prefix)/bin/vp"
)The tap stays at the tested commit. Return it to main after testing:
git -C "$(brew --repository voidzero-dev/vite-plus)" switch mainOr download the standalone Windows installer built from this commit:
| Architecture | Installer |
|---|---|
| x64 | vp-setup-x86_64-pc-windows-msvc.exe |
| Arm64 | vp-setup-aarch64-pc-windows-msvc.exe |
GitHub requires you to sign in and downloads each installer as a ZIP artifact. Extract vp-setup.exe, then run it against this preview build:
.\vp-setup.exe --version "0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be" --registry "https://registry-bridge.viteplus.dev/"After installing, upgrade the current project's vite-plus to this test build with:
vp migrateOr create a new project from this commit without installing the CLI:
export npm_config_registry=https://registry-bridge.viteplus.dev/ pnpm_config_registry=https://registry-bridge.viteplus.dev/
pnpm create vite-plus@0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be # or: npm create vite-plus@0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be$env:npm_config_registry="https://registry-bridge.viteplus.dev/"; $env:pnpm_config_registry="https://registry-bridge.viteplus.dev/"
pnpm create vite-plus@0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be # or: npm create vite-plus@0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21bepnpm 11+ reads pnpm_config_registry, npm and older pnpm read npm_config_registry. The new project pins this build, so keep the registry set for later installs, or configure it as below.
Or 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.a86fd1603196e23718d16144a472ad91b4ba21be",
"vite": "npm:@voidzero-dev/vite-plus-core@0.0.0-commit.a86fd1603196e23718d16144a472ad91b4ba21be"
}
}
🐳 Docker preview imageBuilt from this PR's registry bridge build:
# remove any stale local copy from a previous run, then pull fresh
docker rmi ghcr.io/voidzero-dev/vite-plus:pr-3426 2>/dev/null; docker pull ghcr.io/voidzero-dev/vite-plus:pr-3426Quick check: docker run --rm ghcr.io/voidzero-dev/vite-plus:pr-3426 vp --versionSee docs/guide/docker.md for usage. |
Vite+ 1.6.0 caches
vp runtasks that rewrite files they read, previews runs withvp run --dry-runand JSON output, letsvp check --continue-on-errorreport every failed check, and setsVP_USER_AGENTfor the tools thatvpstarts.Features
vp runcaches tasks that read files they also write, such astsdown --exportsrewritingpackage.jsonortsc --incrementalreading and writingtsconfig.tsbuildinfo. The files a task writes, and folders that hold only those files, may be missing on the next run, as on a fresh clone, and a cache hit restores them with the task's outputs, including the symbolic links the task created (docs) (vite-task#913, vite-task#914, vite-task#915, vite-task#916, vite-task#917, vite-task#918), by @wan9chi.vp run --dry-runshows each command that a run would start and whether it would hit the cache, without running anything or writing to the cache.vp run --jsonprints every package and task in the workspace, andvp run --dry-run --jsonprints the run plan with each step's cache status, as one JSON document for scripts, CI, and coding agents.vp run -vlists every change behind a cache miss, including each changed input file, and-vvalso lists the unchanged inputs and the outputs that a hit restores (docs) (vite-task#948, vite-task#960, vite-task#961, vite-task#963, vite-task#966, vite-task#967, vite-task#968, vite-task#969), by @wan9chi.vp check --continue-on-errorruns the remaining enabled checks after a failure, so one run reports formatting, lint, and type errors together, and exits with the status of the first failed check. Without the flag,vp checkstill stops at the first failed check (#3367), by @chbaefront.vp,vpr, andvpxsetVP_USER_AGENT=vp/<version>for their child processes, so tools can detect that Vite+ started them. When the global CLI delegates to a project's local CLI, the local version is reported (docs) (#1958), by @fengmk2.VP_ENV_FORBIDDEN=1, for systems such as NixOS that provide Node.js and package managers themselves: with it set, Vite+ never downloads a Node.js or package-manager version, shims andvpxuse only the system tools onPATH, and installers andvp upgradeuse the systemnodeandpnpmfor Vite+'s own dependencies. In this release, commands that delegate to a package manager, such asvp installandvp run, fail withDisabledByEnvForbiddenwhile it is set. A follow-up change is planned to cover them and document the variable (#3233), by @myuron.oxfmt@0.76.0tooxfmt@0.78.0. Oxfmt formats Vue files with its own formatter instead of Prettier, so the output for Vue templates can change. It also fixes Tailwind class sorting in several layouts, Less escapes and%selectors, and TypeScript in Astro files.oxlint@1.91.0tooxlint@1.93.0andoxlint-tsgolint@7.0.2005tooxlint-tsgolint@7.0.2006.no-redeclaregets anignoreDeclarationMergeoption, andpromise/prefer-catchoffers a suggestion.rootinvite.config.tsfrom the directory of the config file instead of the current directory, so editor integrations in multi-root workspaces load the correct project.vp upgradewithpnpm@10.34.9(waspnpm@10.34.7).vp check, runvp check --fix --continue-on-errorafter you upgrade: it formats files, applies the available lint fixes, formats again, and reports every error that remains. For example,unicorn/prefer-type-errornow also reports athrowin anifbranch without braces, and this command rewrites it.Fixes & Enhancements
Installing global packagesinvp install -g, Vite+ hides the cursor and discards typed keys. Pressing Enter no longer leaves copies of the spinner row, and typed text no longer runs in the shell after the command ends. Ctrl+C during a spinner now ends the command with the usual signal status instead of exit code 0, and the global package spinners show the elapsed time (#3373, #3417), by @jong-kyung and @fengmk2.vp runloads a package'svite.config.*only when the run reaches one of that package's tasks. A run in one package no longer waits for the configs of other packages, a broken config in another package no longer fails it, andvp run <task>in a package that does not define the task reportsTask "<task>" not foundinstead of another package's config error (vite-task#944, vite-task#988), by @wan9chi.vp run nope#build, where no workspace package has the namenope, fails withPackage 'nope' not found in the workspaceand exits with code 1, instead of running nothing and exiting with code 0. A short name that matches several scoped packages fails as ambiguous (vite-task#984), by @wan9chi.dist, so adistfolder that appears or disappears in a folder a task lists makes the next run a cache miss. Exclusions in a task'sinput, such as"!dist/**", now also apply to the folders that the task lists. In a new monorepo fromvp create, every task hits the cache from the thirdvp run ready, because the first build creates thedistfolders (vite-task#919, vite-task#941), by @wan9chi.vp run: on Windows, files that a task deletes or moves are no longer among its inputs. Tasks that readnode_modules/.vite/task-cache, as Parcel and Gatsby do, hit the cache. A task that writes outside the workspace through.., likecp -r dist ../site, no longer fails withCache update failed(vite-task#937, vite-task#940, vite-task#980), by @wan9chi.outputglobs match as links, instead of dropping them (vite-task#885), by @jasonkuhrt.vp runchecks their cache entries in parallel, so cache hits start sooner (vite-task#982), by @wan9chi.shorbashbehave as on Linux: awhile readloop with a redirect underset -eno longer exits the script, anEXITtrap sees the exit status, so a failed task is no longer reported as successful, and$BASHis set (vite-task#939), by @lifeiscontent.vp runwrites to the system temp directory go in one folder that only the current user can write to, such as/tmp/vp_run-1000on Linux. On Linux, a different Vite+ version run by another user no longer fails (vite-task#947, vite-task#974), by @wan9chi.getEnvsquery from@voidzero-dev/vite-task-clientthat matches every name ({ prefix: '' }or*) returns nothing and no longer adds every environment variable to the cache key (vite-task#976), by @wan9chi.vp migrateno longer writes package specs that the package manager cannot resolve, such as a@vitest/*catalog:reference without a catalog entry or a top-level catalog on Bun before 1.2.21. Bun projects with an emptyworkspacesfield get catalog references, and child packages with a plainvite-plusrange get the same concrete version as the root when the project cannot use catalogs (#3397), by @jong-kyung.vp createuses the package manager version thatVP_PACKAGE_MANAGERselects for the generated settings, the installation, and its summary. Standalone pnpm projects getpackages: ['.']in an existingpnpm-workspace.yamlonly for pnpm before 10.5.0 (#3197), by @evan-lc and @fengmk2.vpsends aUser-Agentheader on all HTTP requests, so Node.js mirrors that reject requests without one, such asmirrors.aliyun.com, work (#3425), by @naokihaba.vp env pinprintsUpdatedwhen it overwrites an existing.node-versionor.nvmrcfile andCreatedwhen it writes a new one (#3377), by @CheHyeonYeong.Docs
-vvin thevp runguide (#3419, #3421), by @wan9chi.Chore
cb1ea8d, with its user-facing changes listed above, and list--dry-run,--json, and-vvinvp run --help(#3418), by @wan9chi.vp createCI job under pnpm and Bun (#3423), by @wan9chi.donecheck did not cover (#3403), by @jong-kyung.Bundled Versions
8.3.75def9361.2.18f9a49d61.0.17ff14c30.23.45.1.01.93.07.0.20060.78.0Upgrade
If
vp upgrademust download Node.js andVP_NODE_DIST_MIRRORpoints to a mirror that rejects requests without aUser-Agentheader, such asmirrors.aliyun.com, unset it or point it to another mirror for this upgrade. The installedvpdownloads Node.js and does not send the header yet.New Contributors
@alexicum, @evan-lc, @CheHyeonYeong
Full Changelog: v1.5.1...v1.6.0
For a stable release, complete the
HomebrewFormula/vp.rbupdate after publication by merging the generatedrelease/homebrew-v1.6.0PR.Merging this PR will trigger the release workflow.