Skip to content

Tags: voidzero-dev/vite-plus

Tags

v1.4.0

Toggle v1.4.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v1.4.0 (#3201)

Vite+ 1.4 runs TypeScript and JavaScript files with `vpx`, and `vp
migrate` can move tsx scripts to it. It also adds `vp check
--deny-warnings` and `vp pm team`, and installs the global CLI's
dependencies from a lockfile published with each release.

### Features

- `vpx <file>` runs a TypeScript or JavaScript file on the project's
Node.js with the [oxc-node](https://github.com/oxc-project/oxc-node)
loader that ships with Vite+, and `vpx --watch <file>` reruns it when a
file it uses changes. In `package.json` scripts, the `vpx` bin of the
`vite-plus` package runs scripts without the global CLI and runs package
binaries only from `node_modules/.bin`, pointing to `vp dlx` for
anything not installed
([docs](https://viteplus.dev/guide/vpx#running-scripts))
([#2936](#2936),
[#3164](#3164)), by
@Brooooooklyn and @fengmk2.
- `vp migrate` offers to move tsx scripts to `vpx`: `tsx a.ts`, `npx tsx
a.ts`, `node --import tsx a.ts`, and `tsx watch a.ts` in `package.json`
scripts, lint-staged tasks, and `#!/usr/bin/env tsx` shebangs become
`vpx a.ts` or `vpx --watch a.ts`. A project already on Vite+ gets the
offer with `vp migrate --full`
([docs](https://viteplus.dev/guide/migrate-rules#tsx-to-vpx))
([#3179](#3179)), by
@fengmk2.
- `vp check --deny-warnings` fails the check on lint warnings, so CI no
longer needs a separate `vp lint --deny-warnings` run
([docs](https://viteplus.dev/guide/check#usage))
([#3075](#3075)), by
@acalvino4.
- `vp pm team` creates and destroys registry organization teams and
adds, removes, and lists their members, through npm or pnpm 11.13.0 and
later, falling back to npm for older pnpm and Bun
([#3040](#3040)), by
@jong-kyung.
- Security: `vp` no longer accepts HTTPS certificates issued through the
distrusted emSign intermediates when downloading Node.js, package
managers, and upgrades
([RUSTSEC-2026-0382](https://rustsec.org/advisories/RUSTSEC-2026-0382.html),
[RUSTSEC-2026-0383](https://rustsec.org/advisories/RUSTSEC-2026-0383.html)),
and it ships tokio 1.54.1, which fixes a race in `tokio::time::Interval`
([RUSTSEC-2026-0384](https://rustsec.org/advisories/RUSTSEC-2026-0384))
([#3159](#3159),
[#3202](#3202)), by
@wan9chi and @fengmk2.
- `vp pm` registry commands (`login`, `logout`, `whoami`, `owner`,
`token`, `dist-tag`, `deprecate`, `search`, `ping`, and `publish`) run
pnpm's own commands on pnpm 11 and later (`token` from 12.13.0), and `vp
pm owner` and `vp pm publish` run Yarn's own commands, so they follow
that package manager's registry configuration and authentication. Older
versions still go through npm
([#3044](#3044)), by
@jong-kyung.
- The installer and `vp upgrade` install the global CLI's JavaScript
dependencies from a lockfile published with each release, so every
installation of a version gets the same dependency versions. Set
`VP_SETUP_SKIP_INSTALL_LOCKFILE=1` to resolve them again if that
installation fails
([docs](https://viteplus.dev/guide/global-cli#vp-setup-skip-install-lockfile))
([#3117](#3117)), by
@fengmk2.
- Upgrade the bundled tools
([#3133](#3133),
[#3158](#3158),
[#3175](#3175)), by
@voidzero-guard[bot] and @fengmk2:
- `vite@8.3.4` to `vite@8.3.5`, with fixes for bundled dev mode, chunk
import maps, CSS `url()` values containing `%`, and subpath imports with
several `#` characters.
- `rolldown@1.2.14` to `rolldown@1.2.15`, with fixes for `this.resolve`
recursion between plugins using `skipSelf: true`, strict execution
order, and chunk import maps.
- `oxlint@1.88.0` to `oxlint@1.89.0`, with rule fixes that report cases
missed before, for example in `prefer-const`, `no-param-reassign`, and
`sort-imports`.
- `oxfmt@0.73.0` to `oxfmt@0.74.0`, with formatting fixes for comments,
parentheses, JSDoc, JSON, YAML, and Markdown.
- The new oxlint and oxfmt versions can flag code that passed before. If
your CI runs `vp check`, run `vp fmt` after upgrading.
  - `vpx` scripts run on `oxc-node@1.0.0`.
- `@vitejs/devtools` 0.8 is accepted as a peer dependency, alongside
0.7.

### Fixes & Enhancements

- The standalone `vp` executable is 30%+ smaller
([#3086](#3086)), by
@fengmk2.
- `VP_SETUP_NODE_VERSION` selects the Node.js version the installer uses
for the CLI's dependencies, so `setup-vp` can use the project's version
and avoid downloading a second Node.js in CI
([docs](https://viteplus.dev/guide/global-cli#vp-setup-node-version))
([#3087](#3087)), by
@fengmk2.
- When tasks miss the cache, `vp run` finishes sooner because it no
longer waits for the disk after saving each result. If the computer
loses power or the operating system crashes during a run, the entries it
saved can be lost and those tasks run again
([vite-task#871](voidzero-dev/vite-task#871)),
by @magurotuna.
- Cached tasks no longer miss the cache when only pnpm's
`node_modules/.modules.yaml` differs, for example after installing with
another pnpm version, with `--ignore-scripts`, or on glibc and musl
machines
([vite-task#850](voidzero-dev/vite-task#850)),
by @wan9chi.
- `vp run` in a package that sits inside a workspace folder but is not
listed in its `pnpm-workspace.yaml` `packages` or `package.json`
`workspaces` runs that package's own tasks with its own
`packageManager`, instead of treating the enclosing workspace as its
root
([vite-task#859](voidzero-dev/vite-task#859)),
by @liangmiQwQ.
- A mistyped or misplaced task setting fails with an error that names
it, such as `unknown field outputs`, instead of `data did not match any
variant of untagged enum UserTaskDefinition`
([vite-task#815](voidzero-dev/vite-task#815)),
by @tlq5l.
- `vp run` no longer panics on scripts that contain non-ASCII
characters, such as `echo こんにちは`, and no longer cuts those commands off
in its output
([vite-task#861](voidzero-dev/vite-task#861)),
by @magurotuna.
- In cached tasks on Linux and macOS, programs that pass `-1` as a
directory descriptor, such as `ps -p <pid>` from procps-ng 4.0.6 and
later, no longer abort
([vite-task#862](voidzero-dev/vite-task#862)),
by @magurotuna.
- On Linux, cached tasks such as `pnpm dlx` no longer occasionally abort
with a stack overflow when the program makes concurrent system calls at
startup
([vite-task#854](voidzero-dev/vite-task#854)),
by @fengmk2.
- On Windows, `vp run` and the global `vpx` wait for the child process
to finish its Ctrl+C cleanup and exit with its code, instead of exiting
immediately
([#3167](#3167)), by
@fengmk2.
- `vp migrate` and the `prefer-vite-plus-imports` lint autofix leave
`vite/rolldown` and `vite/rolldown/*` imports unchanged, instead of
rewriting them to `vite-plus/rolldown` subpaths that `vite-plus` does
not export
([#3070](#3070),
[#3191](#3191)), by
@Crimson341 and @Dunqing.
- `vp migrate` keeps existing `.nvmrc` files instead of converting them
to `.node-version`, so nvm, fnm, and other tools that read `.nvmrc` keep
working and the selected Node.js version does not change
([#3126](#3126)), by
@liangmiQwQ.
- `vp migrate` converts Oxlint configs that `extends` shared JSON files
into TypeScript modules imported through `lint.extends`, so the
inherited rules keep applying after migration
([#3097](#3097)), by
@fengmk2.
- `vp migrate` skips the git hooks prompt when the project's Vite+ hooks
are already set up, and completes a partial setup without prompting
([#3118](#3118)), by
@0froq.
- `vp migrate` keeps the workspace members declared in `package.json`
`workspaces` when it selects pnpm for a project without a lockfile, so
recursive commands still include them
([#2863](#2863)), by
@SaKaNa-Y.
- `vp migrate` no longer reports `unawaited-assertion` for a local
assertion promise that the function later awaits or returns
([#3180](#3180)), by
@fengmk2.
- `pnpm create vite-plus` and `yarn create vite-plus` no longer fail
during dependency installation when `vp` is not on `PATH`, and no longer
run a different global `vp` version for installation, formatting, and
hooks ([#3181](#3181)), by
@fengmk2.
- `vp create` and `vp migrate` resolve the npm registry and credentials
as npm does: a `.npmrc` above the project is no longer read,
`userconfig` and `globalconfig` are honored, and registry hosts in
credential keys match regardless of case
([#3124](#3124)), by
@liangmiQwQ.
- `vp pack` and `vp create` find the monorepo root the same way as `vp
run` and `vp install`, and `vp pack` at a monorepo root without a
`vite.config` no longer picks up a config from the directory above
([#3101](#3101)), by
@liangmiQwQ.
- `defineConfig` keeps plugins that are promises unchanged, so plugins
that find themselves through properties on their promise, such as
`vike()`, work under Vite+
([#3154](#3154)), by
@liangmiQwQ.
- `vp dev` with `experimental.bundledDev` no longer fails with
`ERR_MODULE_NOT_FOUND` when no separate `rolldown` package is installed,
and no longer picks up the runtime of an unrelated installed `rolldown`
([#3111](#3111)), by
@fengmk2.
- With `nodeShimMode: system_first`, `vp node` and `vp env exec` run the
system tool that the shell would find, instead of downloading and
running the managed Node.js
([#3100](#3100)), by
@liangmiQwQ.
- `VP_NODE_VERSION=22` and other partial versions resolve to an exact
release in `vp env install`, `vp env exec`, and `vp env clean`, instead
of failing with a 404 download error
([#3038](#3038)), by
@Dev-next-gen.
- `vp env pin` and `vp env unpin` show the file and field they changed.
Package-manager pins from a workspace member update the workspace root
`package.json`, and the help and guide now say so
([#3103](#3103)), by
@SaKaNa-Y.
- In PowerShell, a bare `--` reaches `vp` again, so `vp create vite --
--template react-ts` forwards `--template` to create-vite
([#3083](#3083)), by
@fengmk2.
- Nushell 0.112.1 and later starts when the user defines a custom
command with the same name as a built-in that the Vite+ `env.nu` calls,
such as `update`. Run `vp env setup` again to regenerate `env.nu`
([#3123](#3123)), by
@naokihaba.
- Package-manager commands reject options that the selected version
would silently ignore, such as `--dry-run` or `--provenance` with an npm
whose version is unknown, instead of running without them
([#3122](#3122)), by
@jong-kyung.
- Fresh Bun installs verify the integrity hash in a `packageManager` pin
and reject a mismatched download, as pnpm 12 and later already did
([#3134](#3134)), by
@jong-kyung.
- A failed `vp install -g` restores the executables and npm links that
existed before, instead of deleting files it never created
([#3119](#3119)), by
@jong-kyung.
- `vp install -g` skips package binaries with unsafe names or targets
instead of linking them, as pnpm does
([#3156](#3156)), by
@jong-kyung.
- `npm uninstall -g <package> --dry-run` no longer removes the package's
commands from Vite+
([#3112](#3112)), by
@jong-kyung.

### Refactor

- Replace `glob` with `tinyglobby` in the CLI and share `.nvmrc` line
parsing between reading and pinning. Workspace discovery in `vp create`
and `vp migrate` now honors negated patterns such as `!packages/foo` and
follows symlinked directories in `**` patterns, as pnpm does
([#3099](#3099),
[#3125](#3125)), by
@liangmiQwQ.
- Share clap error diagnostics, manager preference parsing, external
tool lookup, and native shell parsing for migration rewrites, and remove
a redundant git hooks wrapper
([#3172](#3172),
[#3143](#3143),
[#3138](#3138),
[#3173](#3173)), by
@jong-kyung, @myuron, and @fengmk2.

### Docs

- Note that `run.cache` can only be set in the workspace root's
`vite.config.ts`
([#3139](#3139)), by
@yusuke99.

### Chore

- Bump vite-task to `a3c087a`; its user-facing changes are listed above
([#3153](#3153),
[#3168](#3168),
[#3184](#3184)), by
@wan9chi.
- Run Node.js, runtime download, and package-manager tests against local
mirrors and offline fixtures, serve snapshot registry traffic from local
fixtures and a shared cache, replace sleeps with deterministic waits,
keep snapshot setup off the npm registry, and fix or remove tests that
checked nothing
([#3067](#3067),
[#3169](#3169),
[#3170](#3170),
[#3171](#3171),
[#3144](#3144),
[#3146](#3146),
[#3145](#3145),
[#3147](#3147),
[#3148](#3148),
[#3194](#3194),
[#3203](#3203)), by
@fengmk2 and @liangmiQwQ.
- Cover package-manager detection for nested projects and owner listing
with pnpm 11.28.7, and allow time for the Playwright type check on slow
runners ([#3051](#3051),
[#3174](#3174),
[#3082](#3082)), by
@liangmiQwQ, @jong-kyung, and @fengmk2.
- Update the Node.js versions used for development, CI, and release
publishing to the [October 2026 security
releases](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases):
22.23.4, 24.22.1, and 26.12.1
([#3186](#3186)), by
@fengmk2.
- Reduce GitHub Actions cache storage and enable the e18e lint rules for
the repository
([#3149](#3149),
[#3088](#3088)), by
@fengmk2.
- Upgrade JavaScript dependencies and Rust crates, including
`@ast-grep/napi@0.51.0` and `serial_test@4`
([#3108](#3108),
[#3109](#3109)), by
@renovate[bot].
- Refine the release-manager and vite-task bump guidance
([#3084](#3084),
[#3160](#3160)), by
@fengmk2 and @wan9chi.

### Bundled Versions

| Tool | Version | Source | Changelog |
| --------------- | ---------- |
---------------------------------------------------------------------------------------------------
| ----------------------------------------------------------------------
|
| vite | `8.3.5` |
[`981f07f`](vitejs/vite@981f07f)
| [8.3.5](https://github.com/vitejs/vite/releases/tag/v8.3.5) |
| rolldown | `1.2.15` |
[`89d821c`](rolldown/rolldown@89d821c)
| [1.2.15](https://github.com/rolldown/rolldown/releases/tag/v1.2.15) |
| oxc-node | `1.0.0` |
[`4759ced`](oxc-project/oxc-node@4759ced)
| [1.0.0](https://github.com/oxc-project/oxc-node/releases/tag/v1.0.0) |
| tsdown | `0.23.1` | [npm](https://npmx.dev/package/tsdown/v/0.23.1) |
unchanged |
| vitest | `5.0.5` | [npm](https://npmx.dev/package/vitest/v/5.0.5) |
unchanged |
| oxlint | `1.89.0` | [npm](https://npmx.dev/package/oxlint/v/1.89.0) |
[1.89.0](https://github.com/oxc-project/oxc/releases/tag/oxlint_v1.89.0)
|
| oxlint-tsgolint | `7.0.2004` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2004) | unchanged |
| oxfmt | `0.74.0` | [npm](https://npmx.dev/package/oxfmt/v/0.74.0) |
[0.74.0](https://github.com/oxc-project/oxc/releases/tag/oxfmt_v0.74.0)
|

### Upgrade

```bash
vp upgrade
```

### New Contributors

@acalvino4, @Dev-next-gen, @0froq, @Crimson341, @Dunqing, @magurotuna,
@tlq5l

**Full Changelog**:
v1.3.0...v1.4.0

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

v1.3.0

Toggle v1.3.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v1.3.0 (#3079)

Vite+ 1.3 adds `create-vite-plus`, so `npm create vite-plus@latest`
starts a project without the global `vp`. It adds `vp pm pkg` for
editing `package.json` and `vp pm licenses list` for dependency
licenses, and lets `vp env` take package-manager dist-tags such as
`pnpm@latest-10`. It also makes `vp migrate` import rewriting much
faster on large projects and makes `vp dev` print Vite's `ready in` line
and honor `--debug`, `--filter`, and `--profile`.

### Features

- Create a Vite+ project without installing the global `vp` through
`pnpm create vite-plus`, `npm create vite-plus@latest`, `yarn create
vite-plus`, or `bun create vite-plus`, which run `vp create` with the
same arguments
([docs](https://viteplus.dev/guide/create#without-the-global-cli))
([#3028](#3028),
[#3048](#3048)), by
@liangmiQwQ.
- `vp pm pkg get`, `set`, `delete`, and `fix` read and update
`package.json` through the detected package manager: npm 7.20.0 and
later (`fix` from 9.8.0), pnpm 11.3.0 and later, and Bun 1.2.19 and
later
([docs](https://viteplus.dev/guide/package-management#package-manifest))
([#3020](#3020)), by
@jong-kyung.
- `vp pm licenses list` (or `ls`) lists dependency licenses through pnpm
7.17.0 and later, Yarn Classic, or Bun 1.4.0 and later, with `--json`
for machine-readable output
([#3037](#3037)), by
@jong-kyung.
- `vp env` accepts npm dist-tags in package-manager specs: `vp env pin
pnpm@latest-10` pins the exact version the tag points to, and `vp env
default pnpm@latest-10` follows the tag on each use
([#3047](#3047)), by
@liangmiQwQ.
- Upgrade the bundled tools
([#3058](#3058),
[#3078](#3078)), by
@voidzero-guard[bot] and @fengmk2:
- `rolldown@1.2.13` to `rolldown@1.2.14`. Rolldown adds the
`output.charset` option and fixes several tree-shaking, code-splitting,
and renaming bugs.
- `vitest@5.0.4` to `vitest@5.0.5`, with fixes for browser mode, hook
cleanup after a failing hook, and `--changed` with quoted file names.

### Fixes & Enhancements

- Import rewriting in `vp migrate` is up to 14 times faster on large
projects, for example 78 s to 5.6 s on Dify
([#2987](#2987)), by
@fengmk2.
- `vp dev` prints Vite's `ready in N ms` line, so scripts that wait for
it no longer time out after `vp migrate`. `--debug`, `--filter`, and
`--profile` now take effect in `vp dev`, `vp build`, and `vp preview`,
and `vp preview` stops when the build output is missing, as `vite
preview` does
([#3056](#3056)), by
@fengmk2.
- `vp staged` prints one result line per task, such as `✔ vp check
--fix`, instead of the task list and Git progress. Warnings, errors, and
rollback results stay visible, `--verbose` shows task output, and
`--debug` keeps the full log
([#3060](#3060)), by
@fengmk2.
- After a successful upgrade, `vp upgrade` reminds you to run `vp
migrate` in projects that use an older Vite+ version
([#3063](#3063)), by
@KTrain5169.
- The coding agent picker in `vp create` and `vp migrate` lists Claude
Code under `AGENTS.md` and no longer offers a separate `CLAUDE.md`
option. `--agent claude` and existing `CLAUDE.md` files still work
([#3055](#3055)), by
@fengmk2.

### Docs

- Recommend setting `runtimeOnFail: ignore` and `pmOnFail: ignore` in
the project's `pnpm-workspace.yaml` for pnpm 11 and later, since pnpm
does not read `runtimeOnFail` from its global config
([#3077](#3077)), by
@liangmiQwQ.

### Chore

- Speed up CI with ThinLTO native test builds, a pinned prepacked
Windows SDK, and a precompiled std for trampoline tests, keep
dependencies in Cargo caches, switch Linux runners, and update Windows
build pins with Renovate
([#3026](#3026),
[#2995](#2995),
[#3009](#3009),
[#3000](#3000),
[#3073](#3073),
[#3049](#3049)), by
@fengmk2.
- Stabilize CLI snapshots during slow package-manager downloads, isolate
Vitest browser and UI server ports, skip slow snapshot cases on Linux
and Windows, and remove duplicate Rust unit tests
([#3043](#3043),
[#3061](#3061),
[#3059](#3059),
[#3057](#3057)), by
@fengmk2 and @Brooooooklyn.
- Upgrade Rust crates and JavaScript dependencies, including
`rustls@0.23.46` and `ast-grep@0.51.0`, and remove unused catalog
entries ([#1780](#1780),
[#1782](#1782),
[#1783](#1783)), by
@renovate[bot] and @fengmk2.
- Refine the release-manager guidance
([#3052](#3052)), by
@fengmk2.

### Bundled Versions

| Tool | Version | Source | Changelog |
| --------------- | ---------- |
-------------------------------------------------------------------------------------------------
| ------------------------------------------------------------------- |
| vite | `8.3.4` |
[`b6c20f6`](vitejs/vite@b6c20f6)
| unchanged |
| rolldown | `1.2.14` |
[`c9a8cda`](rolldown/rolldown@c9a8cda)
| [1.2.14](https://github.com/rolldown/rolldown/releases/tag/v1.2.14) |
| tsdown | `0.23.1` | [npm](https://npmx.dev/package/tsdown/v/0.23.1) |
unchanged |
| vitest | `5.0.5` | [npm](https://npmx.dev/package/vitest/v/5.0.5) |
[5.0.5](https://github.com/vitest-dev/vitest/releases/tag/v5.0.5) |
| oxlint | `1.88.0` | [npm](https://npmx.dev/package/oxlint/v/1.88.0) |
unchanged |
| oxlint-tsgolint | `7.0.2004` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2004) | unchanged |
| oxfmt | `0.73.0` | [npm](https://npmx.dev/package/oxfmt/v/0.73.0) |
unchanged |

### Upgrade

```bash
vp upgrade
```

**Full Changelog**:
v1.2.0...v1.3.0

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

v1.2.0

Toggle v1.2.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v1.2.0 (#3029)

Vite+ 1.2 supports authenticated private npm registries and shows a new
`vp run` summary that counts cache hits among cache-enabled tasks and
reports successful tasks. It also verifies installer downloads, shows
download progress in `vp upgrade`, and fixes task cache misses in pnpm
projects and PowerShell exit status.

### Highlights

- Support authenticated private npm registries
([#2624](#2624)), by
@RSS1102.
- The `vp run` summary now reads like `3/4 cache hit (75%), 9/10
successful, 2s saved.`: the cache hit rate leaves out tasks with caching
disabled, and the count of successful tasks replaces the count of failed
tasks
([vite-task#821](voidzero-dev/vite-task#821)),
by @wan9chi.

### Features

- The `install.sh` and `install.ps1` installers check each downloaded
platform archive against the registry's SHA-512 `dist.integrity` before
extracting it, and stop when the digest is missing or does not match
([#2949](#2949)), by
@fengmk2.
- `vp upgrade` shows a progress bar while it downloads the new platform
package, instead of looking frozen on slow connections
([#2968](#2968)), by
@kshanxs.
- When a task is not cached because it wrote a file it also read, the
summary says it `modified its inputs`, and `vp run --last-details` shows
the `cache: { input, output }` exclusions that let it be cached.
Detailed summaries show each cause of an error on its own line, and an
invalid `--filter` glob reports its error once
([vite-task#783](voidzero-dev/vite-task#783),
[vite-task#784](voidzero-dev/vite-task#784),
[vite-task#761](voidzero-dev/vite-task#761),
[vite-task#763](voidzero-dev/vite-task#763)), by
@wan9chi.
- The task runner can be built without file-access tracking on
additional platforms. Tasks on those platforms must configure both
`input` and `output` explicitly to be cached
([vite-task#829](voidzero-dev/vite-task#829)),
by @mfechner.
- Upgrade the bundled tools
([#2935](#2935),
[#2977](#2977),
[#2998](#2998),
[#3021](#3021),
[#3039](#3039)), by
@voidzero-guard[bot] and @fengmk2:
  - `vite@8.3.3` to `vite@8.3.4`.
  - `rolldown@1.2.12` to `rolldown@1.2.13`.
  - `tsdown@0.23.0` to `tsdown@0.23.1`.
- `vitest@5.0.3` to `vitest@5.0.4`. Vitest now turns on its on-disk
caches by default, and `vp test` tasks run through `vp run` stay
cacheable with them.
- `oxlint@1.87.0` to `oxlint@1.88.0` and `oxfmt@0.72.0` to
`oxfmt@0.73.0`. Oxfmt now also formats TOML in Markdown code blocks and
frontmatter. The new lint and format versions can flag code that passed
before, so run `vp fmt` after upgrading if CI runs `vp check`.
- `vp migrate` keeps Prettier and continues the rest of the migration
when the Prettier config uses a format the bundled Oxfmt cannot read,
such as `.prettierrc.yml`.
- `oxlint-tsgolint@7.0.2003` to `oxlint-tsgolint@7.0.2004`. Line disable
comments apply to type-aware diagnostics again
([tsgolint#1271](oxc-project/tsgolint#1271)), so
disable comments moved to the `} as T` line for v1.1.0 need to move back
above the statement.
- Projects that use `@effect/tsgo` need `@effect/tsgo@0.52.0` or later
with this tsgolint version.

### Fixes & Enhancements

- Reinstalling dependencies with pnpm, or installing them at another
path, no longer causes task cache misses, and tasks that run `pnpm run`
or `pnpm exec` no longer miss the cache after pnpm rechecks dependencies
([vite-task#823](voidzero-dev/vite-task#823),
[vite-task#824](voidzero-dev/vite-task#824),
[vite-task#825](voidzero-dev/vite-task#825)), by
@wan9chi.
- On macOS, tasks with automatic file-access tracking can run Node.js
single executable applications, such as pnpm 11's standalone binary, and
`deno compile` outputs
([vite-task#840](voidzero-dev/vite-task#840)),
by @wan9chi.
- Cached tasks can run scripts whose shebang names an interpreter path
longer than 126 bytes
([vite-task#788](voidzero-dev/vite-task#788)),
by @lifeiscontent.
- When a cache hit's outputs cannot be restored, `vp run` fails with an
error suggesting `vp cache clean` instead of reporting a successful
cache hit
([vite-task#770](voidzero-dev/vite-task#770)),
by @wan9chi.
- `vp run` no longer stops every task when concurrent tasks write to a
full output pipe, such as a CI log collector
([vite-task#801](voidzero-dev/vite-task#801)),
by @naokihaba.
- On Linux, tasks with automatic file-access tracking start faster
([vite-task#817](voidzero-dev/vite-task#817)),
by @wan9chi.
- In PowerShell, a failing `vp` command sets `$?` to `False` and stops
`&&` chains, as calling `vp.exe` directly does
([#2947](#2947)), by
@fengmk2.
- The Windows installer works when the PowerShell profile enables
`Set-StrictMode`, and leaves the caller's strict mode unchanged
([#3005](#3005)), by
@fengmk2.
- Sourcing the Vite+ env script in POSIX shells is much faster with a
long `PATH`, for example from 1.5 s to 6 ms in dash with 147 entries
([#2905](#2905)), by
@jonykru.
- Node.js version ranges from `.node-version`, `engines.node`, and
`devEngines.runtime`, and package-manager version ranges, follow npm's
semver rules
([#2835](#2835)), by
@ryuapp.
- `vp migrate` adds the `tsdown <0.23` compatibility settings
(`deps.resolveDepSubpath` and `attw.profile`) only for projects on an
older tsdown, so upgrades from Vite+ 1.x or `tsdown@0.23.0` and later
keep the modern defaults
([#2910](#2910)), by
@fengmk2.
- `vp create vite:generator` keeps the description prompt visible
instead of drawing the spinner over it, uses concrete version ranges for
dependencies missing from the workspace catalog, adds `rootDir: "src"`
to the generated `tsconfig.json`, and scaffolds generators on
`bingo@0.13.2` with Zod 4 option schemas
([#2940](#2940),
[#2996](#2996),
[#1831](#1831)), by
@jong-kyung, @fengmk2, and @renovate[bot].
- `vp create` stops processing an organization template archive that
expands past fixed size, compression ratio, or entry count limits
([#2950](#2950)), by
@fengmk2.
- `vp config` skips Git config writes that change nothing, so concurrent
runs across linked worktrees no longer fail with `could not lock config
file` after the first setup
([#2958](#2958)), by
@naokihaba.
- Git hooks no longer append the legacy `$VP_HOME/bin` or
`~/.vite-plus/bin` directory to `PATH`. They use the inherited
environment with the project's `node_modules/.bin` first, so projects
without a local `vite-plus` dependency need the Vite+ bin directory on
the Git client's `PATH`
([#2930](#2930)), by
@liangmiQwQ.
- Concurrent commands that need the same uninstalled Node.js version
download it once; the others wait and reuse the installation
([#3024](#3024)), by
@fengmk2.
- `@voidzero-dev/vite-plus-core` declares the same `postcss`, optional
`fsevents`, and Yuku parser ranges as the bundled Vite and tsdown, and
`@oxlint/plugins` matches the bundled `oxlint`
([#2921](#2921)), by
@fengmk2.
- `vp pack --help` lists both default env prefixes, `VITE_PACK_` and
`TSDOWN_`
([#3002](#3002)), by
@jong-kyung.
- Prompts and status lines use one space after status symbols
([#2928](#2928)), by
@cpojer.

### Docs

- Document shell completion, the global `-C` flag, the split directory
layout, automatic update checks and how to opt out, package manager
subcommands, and `vp env doctor` diagnostic scopes
([#2972](#2972),
[#2956](#2956),
[#2973](#2973),
[#2960](#2960),
[#2975](#2975),
[#2982](#2982)), by
@jong-kyung.
- Clarify how `vp exec` and `vpx` resolve commands, how `vp test`
selects its runner, how `vp config` treats existing Git hooks, what `vp
check` needs for type checking, and how global CLI environment variables
behave ([#2957](#2957),
[#2979](#2979),
[#2962](#2962),
[#2978](#2978),
[#2916](#2916),
[#2919](#2919)), by
@jong-kyung.
- Correct migration prerequisites, minimum versions, and upgrade order,
clarify tsup migration and staged configuration, fix local CLI
installation without a global `vp`, and state the version requirements
of `vp env uninstall`
([#2990](#2990),
[#2923](#2923),
[#2944](#2944),
[#3004](#3004),
[#2946](#2946)), by
@jong-kyung.
- Rename the install guide to Package Management, clarify
package-management command compatibility, and align the create, run, and
staged guides with CLI behavior and Vite Task defaults
([#2929](#2929),
[#2925](#2925),
[#2939](#2939),
[#2941](#2941),
[#2908](#2908)), by
@jong-kyung.
- Explain task cache behavior and how Vite build outputs are cached
([#2963](#2963),
[#2942](#2942)), by
@yusuke99 and @jong-kyung.
- Correct the `baseUrl` and editor setup guidance in troubleshooting,
and clarify JetBrains IDE support
([#2943](#2943),
[#3001](#3001)), by
@jong-kyung.
- Note that `lazyPlugins` does not defer local module imports
([#2967](#2967)), by
@kshanxs.
- Align inline comments in code examples
([#2927](#2927)), by
@yusuke99.

### Chore

- Bump vite-task to `9ba4cc9`; its user-facing changes are listed above
([#3019](#3019)), by
@wan9chi.
- Speed up CI by removing platform waits, reusing native test binaries
and dependency caches, skipping slow pnpm cache restores on macOS and
Windows, and installing prebuilt `cargo-zigbuild`
([#2961](#2961),
[#3023](#3023),
[#3015](#3015),
[#3010](#3010)), by
@fengmk2.
- Run CI bootstrap scripts without unpinned `tsx`, isolate upstream CLI
help capture from workspace overrides, and update security-action to
v1.0.10 ([#2948](#2948),
[#2976](#2976),
[#3022](#3022)), by
@fengmk2.
- Cache the docs build with the Vite Task remote cache
([#2926](#2926),
[#2951](#2951)), by
@wan9chi.
- Add a Nix flake for the contributor development environment
([#2874](#2874),
[#2974](#2974)), by
@myuron and @fengmk2.
- Stabilize the CLI help wrapping and browser snapshot tests
([#2952](#2952),
[#3006](#3006)), by
@myuron and @fengmk2.
- Exclude upstream-managed dependencies from Renovate
([#2918](#2918)), by
@fengmk2.
- Refine the release-manager guidance
([#2917](#2917)), by
@fengmk2.

### Bundled Versions

| Tool | Version | Source | Changelog |
| --------------- | ---------- |
-------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
| vite | `8.3.4` |
[`b6c20f6`](vitejs/vite@b6c20f6)
| [8.3.4](https://github.com/vitejs/vite/releases/tag/v8.3.4) |
| rolldown | `1.2.13` |
[`f7de35f`](rolldown/rolldown@f7de35f)
| [1.2.13](https://github.com/rolldown/rolldown/releases/tag/v1.2.13) |
| tsdown | `0.23.1` | [npm](https://npmx.dev/package/tsdown/v/0.23.1) |
[0.23.1](https://github.com/rolldown/tsdown/releases/tag/v0.23.1) |
| vitest | `5.0.4` | [npm](https://npmx.dev/package/vitest/v/5.0.4) |
[5.0.4](https://github.com/vitest-dev/vitest/releases/tag/v5.0.4) |
| oxlint | `1.88.0` | [npm](https://npmx.dev/package/oxlint/v/1.88.0) |
[1.88.0](https://github.com/oxc-project/oxc/releases/tag/oxlint_v1.88.0)
|
| oxlint-tsgolint | `7.0.2004` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2004) |
[7.0.2004](https://github.com/oxc-project/tsgolint/releases/tag/v7.0.2004)
|
| oxfmt | `0.73.0` | [npm](https://npmx.dev/package/oxfmt/v/0.73.0) |
[0.73.0](https://github.com/oxc-project/oxc/releases/tag/oxfmt_v0.73.0)
|

### Upgrade

```bash
vp upgrade
```

### New Contributors

@ryuapp @jonykru @myuron @kshanxs @mfechner

**Full Changelog**:
v1.1.0...v1.2.0

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

v1.1.0

Toggle v1.1.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v1.1.0: faster `vp dev` startup and clearer interactive prom…

…pts (#2907)

Vite+ 1.1 starts `vp dev` faster and makes the interactive prompts
clearer, alongside fixes for `vp migrate`, package-manager commands, and
Windows terminals.

### Highlights

- `vp dev` reaches its local URL about 24% sooner and uses about 30%
less memory in the parent process, because Vite+ no longer loads Vite
and Vitest there before starting the dev server
([#2851](#2851)), by
@camc314.
- Interactive prompts render boxes, logs, and wrapped text consistently,
with clearer hints, validation, and navigation instructions
([#2870](#2870)), by
@cpojer.

### Features

- `vp run` sets `npm_execpath` and `npm_config_user_agent` for npm,
pnpm, and Yarn, so tools such as npm-run-all2 use the project's package
manager instead of falling back to npm
([#2895](#2895)), by
@naokihaba and @tarikermis.
- Upgrade `vite@8.3.1` to `vite@8.3.3`, `rolldown@1.2.11` to
`rolldown@1.2.12`, `vitest@5.0.1` to `vitest@5.0.3`, `oxlint@1.85.0` to
`oxlint@1.87.0`, and `oxfmt@0.70.0` to `oxfmt@0.72.0`. The new lint and
format versions can flag code that passed before, so run `vp fmt` after
upgrading if CI runs `vp check`. `vp migrate` now keeps the React
Refresh `allowCompoundComponents` option because the bundled Oxlint
supports it
([#2871](#2871),
[#2896](#2896),
[#2904](#2904)), by
@voidzero-guard[bot].

### Fixes & Enhancements

- `vp migrate` keeps Oxlint rules written with plugin aliases (such as
`@typescript-eslint/*`, `react-hooks/*`, and `import-x/*`) and removes
rules the bundled Oxlint does not support, listing them in a warning
([#2820](#2820),
[#2906](#2906)), by
@TheAlexLichter and @yusuke99.
- `vp migrate` leaves projects without a declared package manager
unpinned, keeps existing declarations, and points to `vp env pin` when
it infers one
([#2817](#2817)), by
@TheAlexLichter.
- `vp migrate` reports a short error for a directory without
`package.json` instead of an `ENOENT` stack trace
([#2821](#2821)), by
@TheAlexLichter.
- `vp create` in an existing pnpm workspace adds the catalog entries the
new application needs, so installation no longer fails with
`ERR_PNPM_CATALOG_ENTRY_NOT_FOUND_FOR_SPEC`
([#2808](#2808)), by
@SaKaNa-Y.
- On Windows, one Ctrl+C stops `vpr` scripts and managed Bun, pnpm, npm,
and Yarn commands without leaving `cmd.exe` stuck at `Terminate batch
job (Y/N)?`
([#2890](#2890)), by
@fengmk2.
- `vp pack --watch` on Windows rebuilds with the new options after the
config file changes
([#2826](#2826)), by
@liangmiQwQ.
- `vp test doctor` and `vp test complete` run the Vitest subcommands
instead of being treated as test file filters
([#2879](#2879)), by
@liangmiQwQ.
- With isolated dependency layouts such as pnpm's global virtual store,
`vp pack` finds installed Vue language tools and TypeScript Go for
declaration generation, and Playwright browser provider options keep
their types
([#2868](#2868),
[#2865](#2865)), by
@liangmiQwQ.
- Package-manager commands fail when the project's package manager does
not support a named option, instead of silently dropping it and
continuing. Bun 1.4.1+ receives `--offline` and `--prefer-offline`, and
Yarn Classic accepts a single `--filter` for `vp remove`
([#2775](#2775)), by
@jong-kyung.
- `vp pm config` in Bun projects falls back to npm, as its warning says
([#2899](#2899)), by
@jong-kyung.
- `vp pm approve-builds` states that Yarn Berry disables third-party
build scripts by default from 4.14.0, not in every version
([#2902](#2902)), by
@jong-kyung.
- `vp implode` asks you to type `boom` instead of `uninstall` to confirm
([#2901](#2901)), by
@fengmk2.
- Global package installs and updates print a green `+`, and removals a
red `-`, with bold package names in both
([#2828](#2828)), by
@liangmiQwQ.
- Setup headings and command hints keep their colors when the installer
captures stdout
([#2829](#2829)), by
@liangmiQwQ.

### Refactor

- Replace `semver` with `verkit` in the CLI, reducing the bundled CLI
JavaScript by about 26 KB
([#2837](#2837)), by
@liangmiQwQ.
- Share the shim filename logic between setup and `vp env doctor`, and
remove unused config migration metadata
([#2876](#2876),
[#2894](#2894)), by
@jong-kyung.

### Docs

- Announce Vite+ 1.0 on the website and update the homepage `vp pack`
demo ([#2843](#2843),
[#2844](#2844)), by
@TheAlexLichter and @naokihaba.
- Document `vp install -g --node` and explain when `vp env default`
re-resolves versions
([#2885](#2885),
[#2884](#2884)), by
@hyunbinseo.
- Use runnable package examples in the `vpx` guide and `vpx --help`
([#2864](#2864)), by
@SaKaNa-Y.
- Remove the redundant `vp install` step from `setup-vp` CI examples
([#2888](#2888)), by
@yusuke99.
- Explain how to return from a preview build, align manual installation
examples with the installed toolchain, and update the JetBrains Node.js
path and `vp env current --json` example for the split directory layout
([#2886](#2886),
[#2887](#2887),
[#2889](#2889),
[#2891](#2891)), by
@jong-kyung.

### Chore

- Update contributor setup instructions, move the logo files under
`docs/public`, and ignore the root `tmp` directory
([#2832](#2832),
[#2831](#2831),
[#2860](#2860)), by
@liangmiQwQ.
- Stabilize Node API reporter, catalog update, Bun, Yarn, and preview
snapshots ([#2869](#2869),
[#2872](#2872),
[#2893](#2893)), by
@liangmiQwQ and @fengmk2.
- Build the docs with the latest Vite+ and fix flaky CI tests
([#2855](#2855)), by
@fengmk2.
- Remove the unused `set-snapshot-version` action
([#2877](#2877)), by
@jong-kyung.
- Refine the release-manager guidance
([#2827](#2827),
[#2788](#2788)), by
@wan9chi and @fengmk2.

### Bundled Versions

| Tool | Version | Source | Changelog |
| --------------- | ---------- |
-------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------------------------------------------
|
| vite | `8.3.3` |
[`fea5b21`](vitejs/vite@fea5b21)
| [8.3.2](https://github.com/vitejs/vite/releases/tag/v8.3.2),
[8.3.3](https://github.com/vitejs/vite/releases/tag/v8.3.3) |
| rolldown | `1.2.12` |
[`45e407b`](rolldown/rolldown@45e407b)
| [1.2.12](https://github.com/rolldown/rolldown/releases/tag/v1.2.12) |
| tsdown | `0.23.0` | [npm](https://npmx.dev/package/tsdown/v/0.23.0) |
unchanged |
| vitest | `5.0.3` | [npm](https://npmx.dev/package/vitest/v/5.0.3) |
[5.0.2](https://github.com/vitest-dev/vitest/releases/tag/v5.0.2),
[5.0.3](https://github.com/vitest-dev/vitest/releases/tag/v5.0.3) |
| oxlint | `1.87.0` | [npm](https://npmx.dev/package/oxlint/v/1.87.0) |
[1.86.0](https://github.com/oxc-project/oxc/releases/tag/oxlint_v1.86.0),
[1.87.0](https://github.com/oxc-project/oxc/releases/tag/oxlint_v1.87.0)
|
| oxlint-tsgolint | `7.0.2003` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2003) | unchanged |
| oxfmt | `0.72.0` | [npm](https://npmx.dev/package/oxfmt/v/0.72.0) |
[0.71.0](https://github.com/oxc-project/oxc/releases/tag/oxfmt_v0.71.0),
[0.72.0](https://github.com/oxc-project/oxc/releases/tag/oxfmt_v0.72.0)
|

### Upgrade

```bash
vp upgrade
```

### New Contributors

@hyunbinseo

**Full Changelog**:
v1.0.0...v1.1.0

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

v1.0.0

Toggle v1.0.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v1.0.0: Vite+ 1.0 is stable (#2839)

Vite+ 1.0 is stable. This release promotes
[v1.0.0-rc.1](https://github.com/voidzero-dev/vite-plus/releases/tag/v1.0.0-rc.1)
to stable with no code changes.

### Notable changes since v0.3.3

v1.0.0 includes everything from the two release candidates below. See
each release's notes for the full list of changes.

-
[v1.0.0-rc.0](https://github.com/voidzero-dev/vite-plus/releases/tag/v1.0.0-rc.0):
`vp test` moves to `vitest@5.0.1`, and the CLI now requires Node.js
`^22.18.0 || ^24.11.0 || >=26.0.0`. `vp staged` has new Node.js and Git
minimums. Standalone installs and `vp upgrade` verify release
provenance.
-
[v1.0.0-rc.1](https://github.com/voidzero-dev/vite-plus/releases/tag/v1.0.0-rc.1):
task cache settings in `run.tasks` move under `cache`. `vp lint` and `vp
fmt` run from a package directory now use the same config as your
editor.

Projects on v1.0.0-rc.1 need no changes. Projects on v1.0.0-rc.0 whose
tasks set `env`, `untrackedEnv`, `input`, or `output` should run `vp
migrate` to move those settings under `cache`. For a Vite+ 0.3 project,
follow [Upgrade from Vite+ 0.3 to
1.0](https://viteplus.dev/guide/migrate#upgrade-from-vite-0-3-to-1-0)
and run `vp migrate` before you update the project's dependencies.

### Bundled Versions

| Tool | Version | Source |
| --------------- | ---------- |
-----------------------------------------------------------------------------------------------
|
| vite | `8.3.1` |
[`39ddf7c`](vitejs/vite@39ddf7c)
|
| rolldown | `1.2.11` |
[`8df4219`](rolldown/rolldown@8df4219)
|
| tsdown | `0.23.0` | [npm](https://npmx.dev/package/tsdown/v/0.23.0) |
| vitest | `5.0.1` | [npm](https://npmx.dev/package/vitest/v/5.0.1) |
| oxlint | `1.85.0` | [npm](https://npmx.dev/package/oxlint/v/1.85.0) |
| oxlint-tsgolint | `7.0.2003` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2003) |
| oxfmt | `0.70.0` | [npm](https://npmx.dev/package/oxfmt/v/0.70.0) |

### Upgrade

```bash
vp upgrade
```

**Full Changelog**:
v1.0.0-rc.1...v1.0.0

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: wan9chi <me@wan9chi.com>

v1.0.0-rc.1

Toggle v1.0.0-rc.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v1.0.0-rc.1: task cache settings move under `cache` (#2818)

Task cache settings now live under `cache`, and `vp migrate` moves
existing task settings for you. `vp lint` and `vp fmt` run from a
package directory now pick the same config as your editor, and piped
`vp` output exits cleanly.

### Breaking Changes

Task cache settings in `run.tasks` now go inside `cache`
([#2813](#2813),
[#2814](#2814),
[#2823](#2823),
[vite-task#749](voidzero-dev/vite-task#749)), by
@wan9chi.

| Old (top level of a task) | New |
| --- | --- |
| `env` | `cache.env` |
| `untrackedEnv` | `cache.untrackedEnv` |
| `input` | `cache.input` |
| `output` | `cache.output` |

`cache: true` is the same as `cache: {}`. After upgrading, a task that
still uses the old top-level fields fails with an error that points to
`vp migrate`. Run `vp migrate` to move the fields in `vite.config.*` for
the workspace root and every package. It warns about tasks in
`vite.config.*` that it cannot rewrite safely. Tasks created in other
modules, such as by a shared helper function, are not detected, so move
their fields by hand; the error lists every task that still needs it.
Projects whose tasks do not use these fields need no changes. See the
[task cache migration
rules](https://viteplus.dev/guide/migrate-rules#task-cache-configuration)
and the [`cache` reference](https://viteplus.dev/config/run#cache).

### Highlights

- `vp lint` and `vp fmt` run from a package directory now use the same
config as Oxlint, Oxfmt, and the language server, so results match your
editor. `vp check` still applies the workspace-root settings
([#2807](#2807)), by
@fengmk2.
- Global `vp` commands now exit cleanly when piped into a command that
closes early, such as `vp --version | head -n 1`, instead of aborting
with exit code 134
([#2785](#2785),
[#2793](#2793)), by
@naokihaba.
- Cached tasks on macOS no longer intermittently fail with `oils I/O
error (main): No such process`
([vite-task#703](voidzero-dev/vite-task#703)),
by @lifeiscontent.

### Features

- The bundled tools update `vite@8.3.0` -> `vite@8.3.1`,
`rolldown@1.2.9` -> `rolldown@1.2.11`, and `oxlint-tsgolint@7.0.2002` ->
`oxlint-tsgolint@7.0.2003`
([#2805](#2805),
[#2812](#2812)), by
@voidzero-guard[bot].

### Fixes & Enhancements

- Async `defineConfig` callbacks now type-check lint and format options,
such as `'warn'` rule severities, the same way as synchronous callbacks,
so configs updated by `vp migrate` no longer fail with `TS2769`
([#2803](#2803)), by
@TheAlexLichter.
- `vp test --help` now lists the Vitest 5 options `--repeats`,
`--injectCjsGlobals`, `--fsModuleCache`, `--fsModuleCachePath`, and
`--sharedViteServer`
([#2809](#2809)), by
@Marve10s.
- On Windows, `vp run` now matches environment variable names regardless
of letter case
([vite-task#747](voidzero-dev/vite-task#747)),
by @wan9chi.

### Docs

- The copy prompt dialog no longer nests scroll areas and shows clearer
copy feedback
([#2794](#2794),
[#2799](#2799)), by
@liangmiQwQ and @Boshen.

### Chore

- Snapshot tests share prepared packages and one Chromium process, run
faster on every platform, and no longer read the live npm registry in
the standalone npm fallback case
([#2771](#2771),
[#2786](#2786),
[#2797](#2797)), by
@fengmk2 and @voidzero-guard[bot].
- The snapshot setup check links the local `vite-plus` package into its
reference home instead of installing the version under release from npm,
so it passes before that version is published
([#2819](#2819)), by
@wan9chi.
- The preview migration harness installs a project's committed
dependencies before running `vp migrate`, so the Vitest 5 migration can
read the original Vitest version
([#2822](#2822)), by
@wan9chi.
- The standalone install workflow loads the generated environment before
running `vp env doctor`
([#2790](#2790)), by
@naokihaba.

### Bundled Versions

| Tool | Version | Source |
| --- | --- | --- |
| vite | `8.3.1` |
[`39ddf7c`](vitejs/vite@39ddf7c)
|
| rolldown | `1.2.11` |
[`8df4219`](rolldown/rolldown@8df4219)
|
| tsdown | `0.23.0` | [npm](https://npmx.dev/package/tsdown/v/0.23.0) |
| vitest | `5.0.1` | [npm](https://npmx.dev/package/vitest/v/5.0.1) |
| oxlint | `1.85.0` | [npm](https://npmx.dev/package/oxlint/v/1.85.0) |
| oxlint-tsgolint | `7.0.2003` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2003) |
| oxfmt | `0.70.0` | [npm](https://npmx.dev/package/oxfmt/v/0.70.0) |

### Upgrade

```bash
vp upgrade
```

### New Contributors

@Marve10s

**Full Changelog**:
v1.0.0-rc.0...v1.0.0-rc.1

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: wan9chi <me@wan9chi.com>

v1.0.0-rc.0

Toggle v1.0.0-rc.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v1.0.0-rc.0: Vitest 5 migration and npm provenance checks (#…

…2780)

Vite+ now uses Vitest 5, and `vp migrate` helps Vitest 4 projects adopt
the new APIs and defaults. Standalone installs and upgrades now require
verified npm provenance for release binaries.

### Breaking Changes

#### Vitest 5

`vp test` and the public `vite-plus/test*` exports now use
`vitest@5.0.1`
([#2551](#2551)), by
@fengmk2.

| Area | Old | New |
| --- | --- | --- |
| Test runner | `vitest@4.1.11` | `vitest@5.0.1` |
| CLI Node.js range | `^20.19.0 \|\| ^22.18.0 \|\| >=24.11.0` |
`^22.18.0 \|\| ^24.11.0 \|\| >=26.0.0` |
| `vite-plus/test/runners` and `vite-plus/test/suite` | Vite+
compatibility exports | Use supported APIs from `vite-plus/test`; review
unsupported runner and expect plugins |
| `vite-plus/test/browser-webdriverio` | Bundled export | Use the
community `@vitest/browser-webdriverio` package |

Run `vp migrate` from the workspace root before you install the new
dependencies. The migrator updates supported config, source, benchmark,
command, and import changes. It reports manual work as `BLOCK` or
`REVIEW` items. See the [Vitest 5 migration
guide](https://viteplus.dev/guide/vitest-v5) for the full process.
Projects can stay on the prior release until their runtimes and tests
are ready.

#### `vp staged` runtime requirements

`vp staged` now uses `lint-staged@17.5.1`
([#2754](#2754)), by
@fengmk2.

| Requirement | Old | New |
| --- | --- | --- |
| Node.js for `vp staged` | The Vite+ CLI runtime range | `^22.22.1 \|\|
^24.11.0 \|\| >=26.0.0` |
| Git | No separate documented minimum | `>=2.32.0` |

Update Node.js and Git on developer machines and CI runners that execute
`vp staged` or its pre-commit hook. Other workflows do not use these
extra requirements.

### Highlights

- Standalone installers, `vp upgrade`, and `vp-setup.exe` now reject
release binaries without supported SLSA provenance
([#2440](#2440)), by
@kazupon.
- Installers now show progress and the exact shell activation command.
Download progress preserves earlier terminal output
([#2744](#2744),
[#2741](#2741)), by
@fengmk2.
- System-first runtime and package-manager shims now use a fallback
directory at the end of `PATH`. Setup restores missing package-manager
preferences
([#2758](#2758),
[#2763](#2763)), by
@liangmiQwQ and @fengmk2.
- `vp run` now finishes when background processes remain. Large file
traces run without caching instead of killing the task
([#2767](#2767),
[vite-task#675](voidzero-dev/vite-task#675)), by
@wan9chi.

### Features

- `vp add` now supports shared install options such as `--offline`,
`--frozen-lockfile`, and `--lockfile-only`
([#2722](#2722)), by
@jong-kyung.
- `vp pm patch` and `vp pm patch-commit` now use the native commands in
npm 12 and later
([#2736](#2736)), by
@jong-kyung.
- `vp rebuild` now supports Yarn Berry and forwards package names and
extra arguments
([#2761](#2761)), by
@jong-kyung.
- The bundled tools update `oxlint` `1.83.0` -> `1.85.0`,
`oxlint-tsgolint` `7.0.2001` -> `7.0.2002`, and `oxfmt` `0.68.0` ->
`0.70.0` ([#2745](#2745),
[#2773](#2773),
[#2778](#2778)), by
@voidzero-guard[bot]. These versions can flag or format code that passed
before. Run `vp fmt` after upgrading if CI runs `vp check`.

### Fixes & Enhancements

- `oxlint` and `oxfmt` no longer expose bin wrappers that conflict with
upstream packages. Editors must use `vp lint --lsp`, `vp fmt --lsp`, or
`vp fmt --stdin-filepath`
([#2672](#2672)), by
@fengmk2.
- `vp create vite:generator` now replaces catalog references for package
managers that do not support catalogs
([#2720](#2720)), by
@SaKaNa-Y.
- Unpinned npm projects now use the npm version bundled with the
selected Node.js runtime. The same policy works during migration
([#2742](#2742),
[#2748](#2748)), by
@liangmiQwQ.
- The CLI now loads its local versions module through a file URL,
including on Windows paths
([#2749](#2749)), by
@YanChenBai.
- Package-manager commands now use pnpm when the project has no detected
package manager
([#2750](#2750)), by
@liangmiQwQ.
- `vp migrate` now removes unused `@oxlint/plugins` dependencies after
it rewrites plugin imports
([#2751](#2751)), by
@fengmk2.
- `vp update --no-save` now warns that Yarn Classic and Yarn Berry do
not support the option
([#2762](#2762)), by
@jong-kyung.
- `vp migrate` now explains its `tsdown@0.23` compatibility settings and
links to removal guidance
([#2769](#2769)), by
@fengmk2.
- Environment setup now installs and diagnoses the official `pn` and
`pnx` aliases for pnpm
([#2770](#2770)), by
@iruoy.
- Cached tasks now receive GitHub Actions OIDC variables, so npm Trusted
Publishing works through `vp run`
([vite-task#691](voidzero-dev/vite-task#691)),
by @naokihaba.
- Automatic task input tracking now records file access from signal
handlers
([vite-task#687](voidzero-dev/vite-task#687)),
by @wan9chi.

### Refactor

- `vp lint`, `vp fmt`, and `vp check` now use native config discovery.
Package commands keep matching workspace-root settings, while explicit
config flags take precedence
([#2731](#2731)), by
@fengmk2.

### Chore

- Generated workflows and `vp migrate` now use `setup-vp@v1.21.1`,
including its installation fixes
([#2760](#2760),
[#2772](#2772)), by
@renovate[bot] and @fengmk2.

### Bundled Versions

| Tool | Version | Source |
| --- | --- | --- |
| vite | `8.3.0` |
[`434e8e9`](vitejs/vite@434e8e9)
|
| rolldown | `1.2.9` |
[`5b4746e`](rolldown/rolldown@5b4746e)
|
| tsdown | `0.23.0` | [npm](https://npmx.dev/package/tsdown/v/0.23.0) |
| vitest | `5.0.1` | [npm](https://npmx.dev/package/vitest/v/5.0.1) |
| oxlint | `1.85.0` | [npm](https://npmx.dev/package/oxlint/v/1.85.0) |
| oxlint-tsgolint | `7.0.2002` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2002) |
| oxfmt | `0.70.0` | [npm](https://npmx.dev/package/oxfmt/v/0.70.0) |

### Upgrade

```bash
vp upgrade
```

### New Contributors

@YanChenBai, @iruoy

**Full Changelog**:
v0.3.3...v1.0.0-rc.0

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>

v0.3.3

Toggle v0.3.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v0.3.3: Homebrew setup and workspace dependency fixes (#2734)

This release fixes Homebrew setup, Windows installation, and workspace
dependency commands. It also updates Rolldown, Oxlint, and Oxfmt.

### Fixes & Enhancements

- Homebrew installations complete setup once, retain their bundled CLI,
and direct upgrades to `brew upgrade vite-plus`
([#2729](#2729)), by
@fengmk2.
- Windows installations decode remote legacy PowerShell scripts
correctly
([#2701](#2701)), by
@james-elicx.
- `vp migrate` removes the unsupported React Refresh
`allowCompoundComponents` option and warns about possible lint errors
([#2702](#2702)), by
@fengmk2.
- New monorepo packages use the root lint configuration without a
conflicting nested configuration
([#2667](#2667)), by
@semimikoh.
- Yarn Classic rejects filtered additions and removals instead of
changing unintended dependencies
([#2705](#2705)), by
@jong-kyung.
- Yarn Berry rejects unsupported filtered updates and respects filters
during recursive removal
([#2709](#2709),
[#2712](#2712)), by
@jong-kyung.
- Yarn and Bun warn when a command does not support `--workspace-root`.
Yarn Classic accepts root additions through `vp add` and `vp install
<packages>`
([#2713](#2713)), by
@jong-kyung.
- `vp dedupe` warns about unsupported check options
([#2717](#2717)), by
@jong-kyung.
- Rust command output respects `NO_COLOR`
([#2716](#2716)), by
@liangmiQwQ.
- Windows commands find lowercase shims in directories with
case-sensitive file names
([#2727](#2727)), by
@fengmk2.

### Dependency Updates

- Update `rolldown@1.2.8` to `rolldown@1.2.9`, `oxlint@1.82.0` to
`oxlint@1.83.0`, and `oxfmt@0.67.0` to `oxfmt@0.68.0`. The new lint and
format versions can flag code that passed before. Run `vp fmt` after
upgrading if CI runs `vp check`
([#2725](#2725)), by
@voidzero-guard[bot].

### Docs

- Reorganize the guide and expand the global CLI sections
([#2684](#2684),
[#2715](#2715)), by
@liangmiQwQ.
- Explain Nushell startup requirements and recovery for XDG
installations
([#2704](#2704)), by
@naokihaba.

### Chore

- Add documentation previews for fork PRs
([#2691](#2691)), by
@fengmk2.
- Publish `@voidzero-dev/vite-plus-prompts` with npm releases
([#2707](#2707)), by
@fengmk2.
- Reuse native preview installations and clarify release evidence and
package checks
([#2693](#2693),
[#2708](#2708)), by
@fengmk2.
- Stabilize dependency-removal snapshots and temporarily skip Socket
Firewall tests on Windows
([#2711](#2711),
[#2730](#2730)), by
@fengmk2.
- Clarify package-manager comments and update the preview workflow
reference ([#2706](#2706),
[#2714](#2714)), by
@jong-kyung.
- Run dependency upgrade automation with Kimi K3
([#2723](#2723)), by
@Brooooooklyn.

### Bundled Versions

| Tool | Version | Source |
| --- | --- | --- |
| `vite` | `8.3.0` |
[`434e8e9`](vitejs/vite@434e8e9)
|
| `rolldown` | `1.2.9` |
[`5b4746e`](rolldown/rolldown@5b4746e)
|
| `tsdown` | `0.23.0` | [npm](https://npmx.dev/package/tsdown/v/0.23.0)
|
| `vitest` | `4.1.11` | [npm](https://npmx.dev/package/vitest/v/4.1.11)
|
| `oxlint` | `1.83.0` | [npm](https://npmx.dev/package/oxlint/v/1.83.0)
|
| `oxlint-tsgolint` | `7.0.2001` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2001) |
| `oxfmt` | `0.68.0` | [npm](https://npmx.dev/package/oxfmt/v/0.68.0) |

### Upgrade

```bash
vp upgrade
```

### New Contributors

@james-elicx

**Full Changelog**:
v0.3.2...v0.3.3

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK <fengmk2@gmail.com>

v0.3.2

Toggle v0.3.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v0.3.2: independent package-manager versions and Oxlint plug…

…in APIs (#2692)

`vp env use` now sets each package manager's version independently. This
release also adds Oxlint plugin APIs and fixes migration, installation,
and template extraction.

### Breaking Changes

#### Package-manager overrides

Direct package-manager commands no longer use `VP_PACKAGE_MANAGER`. Use
the matching version variable in shell profiles, CI jobs, and
Dockerfiles:

| Previous override for a direct command | New override |
| --- | --- |
| `VP_PACKAGE_MANAGER=npm@<version>` | `VP_NPM_VERSION=<version>` |
| `VP_PACKAGE_MANAGER=pnpm@<version>` | `VP_PNPM_VERSION=<version>` |
| `VP_PACKAGE_MANAGER=yarn@<version>` | `VP_YARN_VERSION=<version>` |
| `VP_PACKAGE_MANAGER=bun@<version>` | `VP_BUN_VERSION=<version>` |

`VP_PACKAGE_MANAGER` still selects the manager and version for `vp
install` and related commands. `vp env use pnpm@10` now changes only the
direct pnpm commands. To override `vp install`, set `VP_PACKAGE_MANAGER`
explicitly.

The old `.session-package-manager` file is no longer read or migrated.
Run `vp env use` again to create the new session files. Projects that
use only project pins or global defaults need no changes. See the
[environment guide](https://viteplus.dev/guide/env)
([#2658](#2658),
[#2659](#2659)), by
@liangmiQwQ.

#### Installer preferences

`VP_NODE_MANAGER` now controls only Node.js. Existing installations
retain saved preferences during upgrades, so `vp upgrade` needs no
configuration changes. For scripted installations, set `VP_PM_MANAGER`
to apply the same choice to package managers:

| Previous combined setting | New combined setting |
| --- | --- |
| `VP_NODE_MANAGER=no` | `VP_NODE_MANAGER=no VP_PM_MANAGER=no` |
| `VP_NODE_MANAGER=yes` | `VP_NODE_MANAGER=yes VP_PM_MANAGER=yes` |

Update installer commands in CI jobs and Dockerfiles. Use
`VP_NPM_MANAGER`, `VP_PNPM_MANAGER`, `VP_YARN_MANAGER`, or
`VP_BUN_MANAGER` for individual preferences. The interactive prompt
retains its combined choice. See the [installer variables
guide](https://viteplus.dev/guide/installer-env-vars)
([#2681](#2681)), by
@liangmiQwQ.

#### Vite DevTools

Projects that install `@vitejs/devtools` must update its dependency
range from `^0.4.0 || ^0.5.0` to `^0.7.1`. Projects without this
optional dependency need no changes. This requirement comes with the
Vite upgrade listed below.

### Highlights

- Installers and `vp upgrade` share setup behavior across platforms,
which simplifies maintenance. The installers retain support for older
releases ([#2611](#2611)),
by @liangmiQwQ.
- Custom Oxlint rules can import their APIs from
`vite-plus/lint/plugins` and `vite-plus/lint/plugins-dev`. `vp migrate`
updates supported existing imports
([#2328](#2328)), by
@fengmk2.
- `vp install` and `vp add` now honor `--ignore-scripts` for named
packages and managed global installations
([#2682](#2682)), by
@jong-kyung.
- `vp create` rejects malformed registry versions that could place
organization template files outside the cache directory
([#2665](#2665)), by
@fengmk2.

### Features

- The bundled tools update from `vite@8.2.2` to `vite@8.3.0` and from
`rolldown@1.2.7` to `rolldown@1.2.8`. They also update from
`oxlint@1.81.0` to `oxlint@1.82.0` and from `oxfmt@0.66.0` to
`oxfmt@0.67.0`. The new linter and formatter can flag code that passed
before. Run `vp fmt` after the upgrade if CI runs `vp check`
([#2670](#2670)), by
@fengmk2.

### Fixes & Enhancements

- `vp env pin` updates an active local `.nvmrc` and preserves its
comments. Use `--target nvmrc` to select this file explicitly
([#2676](#2676)), by
@ywenhao.
- `vp migrate` reports unsupported ESLint rules that it skips, so users
can review the missing checks
([#2689](#2689)), by
@yusuke99.
- `vp migrate` imports leftover tsdown configuration when a project
already uses Vite+
([#2646](#2646)), by
@TheAlexLichter.
- `vp migrate` accepts single-line JSON formatter configuration with a
final newline
([#2643](#2643)), by
@TheAlexLichter.
- `vp migrate` avoids a redundant `playwright` dependency when the
project already declares `@playwright/test`
([#2637](#2637)), by
@yusuke99.
- Newly scaffolded local generators honor `--no-interactive` and report
missing arguments without prompts. Existing generators need the updated
entrypoint
([#2677](#2677)), by
@SaKaNa-Y.
- `vp upgrade` installs its dependencies correctly when the installation
directory is inside a pnpm workspace
([#2644](#2644)), by
@fengmk2.
- Nested package-manager commands retain the selected Node runtime and
package-manager versions
([#2631](#2631)), by
@lyzno1.
- Built-in tools reuse the Node executable that starts the CLI. Editor
lint and format servers work when `node` is absent from `PATH`
([#2673](#2673)), by
@fengmk2.
- The npm command wrapper enables Node's compile cache before it loads
the CLI, which reduces repeated startup work
([#2648](#2648)), by
@pablog12.
- Package-manager commands suppress pnpm, npm, and supported Yarn update
notices. Yarn 4 daily tips are also hidden
([#2649](#2649),
[#2650](#2650),
[#2651](#2651)), by
@fengmk2.
- Invalid `package.json` errors include the affected file's path
([#2683](#2683)), by
@adamaveray.

### Docs

- The README task example uses the supported `env` field
([#2653](#2653)), by
@SaKaNa-Y.
- Migration guidance tells pnpm users to retain the generated `vite` and
`vitest` dependencies
([#2660](#2660)), by
@naokihaba.
- Lint and format guides explain root configuration and overrides for
monorepos. They clarify that nested configuration is not supported
([#2668](#2668)), by
@liangmiQwQ.

### Chore

- The repository removes unused Babel dependencies and the unused hooks
directory setter
([#2634](#2634),
[#2647](#2647)), by
@jong-kyung.
- CLI snapshot tests run across parallel jobs, and the pnpm 11 workspace
pack test excludes generated archives
([#2657](#2657),
[#2655](#2655)), by
@fengmk2.
- CI removes the unused Graphite optimization and adds Solid 2 ecosystem
coverage ([#2678](#2678),
[#2680](#2680)), by
@fengmk2.
- Release guidance clarifies validation and announcement procedures
([#2633](#2633)), by
@fengmk2.
- The runtime manager refreshes the signing keys for Node.js release
verification
([#2687](#2687)), by
@voidzero-guard[bot].

### Bundled Versions

| Tool | Version | Source |
| --- | --- | --- |
| `vite` | `8.3.0` |
[`434e8e9`](vitejs/vite@434e8e9)
|
| `rolldown` | `1.2.8` |
[`9704b56`](rolldown/rolldown@9704b56)
|
| `tsdown` | `0.23.0` | [npm](https://npmx.dev/package/tsdown/v/0.23.0)
|
| `vitest` | `4.1.11` | [npm](https://npmx.dev/package/vitest/v/4.1.11)
|
| `oxlint` | `1.82.0` | [npm](https://npmx.dev/package/oxlint/v/1.82.0)
|
| `oxlint-tsgolint` | `7.0.2001` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2001) |
| `oxfmt` | `0.67.0` | [npm](https://npmx.dev/package/oxfmt/v/0.67.0) |

### Upgrade

```bash
vp upgrade
```

### New Contributors

@yusuke99, @pablog12, @SaKaNa-Y, @ywenhao, @adamaveray

**Full Changelog**:
v0.3.1...v0.3.2

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>

v0.3.1

Toggle v0.3.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v0.3.1: manage package-manager versions with vp env (#2623)

`vp env` now manages Node.js and package-manager versions together. This
release also fixes TanStack Start routing and stale Vitest aliases.

### Breaking Changes

#### Package-manager setup

Vite+ replaces Corepack with managed `npm`, `pnpm`, `yarn`, and `bun`
commands. It removes the `corepack` shim and legacy global
package-manager installations
([#2391](#2391)), by
@liangmiQwQ.

Replace Corepack setup commands in shell profiles, CI jobs, and
Dockerfiles:

| Previous setup | Replacement |
| --- | --- |
| `corepack enable` | `vp env setup` |
| `vp install -g pnpm@<version>` | `vp env default pnpm@<version>` |
| `vp install -g yarn@<version>` | `vp env default yarn@<version>` |
| `vp install -g bun@<version>` | `vp env default bun@<version>` |
| `vp install -g corepack` | Use the managed package-manager commands
directly |

Use `vp env pin <manager>@<version>` to set a project version.

#### `vp env` command scope and JSON output

Unscoped `vp env` commands now operate on Node.js and package managers.
Package managers support independent defaults, project pins, session
overrides, and installation commands
([#2398](#2398)), by
@liangmiQwQ.

Add `node` to limit an operation to Node.js, for example, `vp env off
node` or `vp env unpin node`. Bare versions, such as `vp env default
22.19.0`, still select Node.js.

Update scripts that read JSON output:

| Command | New output structure |
| --- | --- |
| `vp env current --json` | `node` and `package_manager` objects |
| `vp env list --json`, `vp env list-remote --json` | `node` and
`package_managers` groups |

See the [environment guide](https://viteplus.dev/guide/env).

#### `vp pack` migration to `tsdown` `0.23`

`vp pack` now uses `tsdown` `0.23`, which removes deprecated options and
changes defaults
([#2614](#2614)), by
@fengmk2.

1. Run `vp migrate` to update supported static configurations and
package scripts, including projects that already use Vite+.
2. Check migration warnings in `vite.config.*`, `tsdown.config.*`, and
`package.json`.
3. Update dynamic configurations manually. Arrays built with `.map()`
require manual changes, even when migration reports no warning.
4. Run `vp pack` to check the result.

| Previous option | Replacement |
| --- | --- |
| `bundle: false` | `unbundle: true` |
| `outExtension` | `outExtensions` |
| `publicDir` / `--public-dir` | `copy` / `--copy` |
| `removeNodeProtocol: true` | `nodeProtocol: 'strip'` |
| `injectStyle` | `css.inject` |
| `inlineOnly` / `deps.onlyAllowBundle` | `deps.onlyBundle` |
| `noExternal` | `deps.alwaysBundle` |
| `skipNodeModulesBundle: true` / `deps.skipNodeModulesBundle: true` |
`deps.neverBundle: true` |
| `dts.tsgo: true` / `dts.oxc: true` | `dts.generator: 'tsgo'` /
`dts.generator: 'oxc'` |

Migration preserves the previous defaults for dependency resolution and
ATTW.

`tsdown` no longer supports Node.js `25`. Use Node.js `^22.18.0`,
`^24.11.0`, or `>=26.0.0`. The programmatic `build()` API now returns `{
bundles, watch }`.

See the [complete migration
guide](https://github.com/rolldown/tsdown/releases/tag/v0.23.0) for
declaration and TypeScript module-resolution changes.

#### CLI argument validation

`vp staged`, `vp config`, `vp hooks`, `vp migrate`, and `vp create` now
reject unsupported options and extra positional arguments
([#2523](#2523)), by
@fengmk2.

Remove unsupported arguments from scripts. For example, replace `vp
config --hooks-only` with `vp config --no-agent`.

### Highlights

- Fix TanStack Start HTTP `404` responses caused by separate Vite
runtime copies
([#2617](#2617)), by
@fengmk2.
- Reduce the Windows `vp-shim.exe` size from `214 KiB` to `14 KiB`
([#2466](#2466)), by
@fengmk2.
- Add `vp check --quiet` to hide lint warning diagnostics while
retaining errors and summary counts
([#2593](#2593)), by
@RSS1102.

### Features

- Add `vp sync-versions --json` so automation can request dependency
alignment plans from manifest snapshots without changing project files
([#2600](#2600)), by
@afonsojramos.
- Make `vp create --git` suggest an initial commit command after Git
initialization
([#2581](#2581)), by
@fengmk2.
- Make `vp migrate` replace frozen `voidzero-dev/setup-vp@v1` workflow
references with the supported version pin
([#2540](#2540)), by
@fengmk2.
- Upgrade `rolldown` from `1.2.5` to `1.2.7`, `tsdown` from `0.22.14` to
`0.23.0`, and Oxc from `0.146.0` to `0.148.0`. Upgrade `oxlint` from
`1.79.0` to `1.81.0` and `oxfmt` from `0.64.0` to `0.66.0`. These
versions can flag code that passed before. Run `vp fmt` after upgrading
if CI runs `vp check`
([#2580](#2580),
[#2613](#2613)), by
@voidzero-guard[bot].

### Fixes & Enhancements

- Resolve package-manager versions without rewriting `package.json`. Use
`vp env pin` or `vp env unpin` to change project declarations explicitly
([#2399](#2399)), by
@liangmiQwQ.
- Let `vp migrate` repair stale `vitest` aliases that previously
prevented the CLI from starting
([#2605](#2605)), by
@fengmk2.
- Keep Vite DevTools within the version ranges supported by the bundled
Vite ([#2559](#2559)), by
@fengmk2.
- Keep automatic Vitest upgrades on the supported `4.x` major
([#2612](#2612)), by
@fengmk2.
- Remove a deprecated `tsdown` option from the prompts package build
([#2597](#2597)), by
@jong-kyung.

### Refactor

- Use the updated `which` dependency to resolve relative `PATH` entries
([#2583](#2583)), by
@RSS1102.
- Remove the unused `async-trait` annotation from `JsRuntimeProvider`
([#2538](#2538)), by
@jong-kyung.

### Docs

- Add Azure Pipelines setup instructions
([#2553](#2553)), by
@naokihaba.
- Correct Zed Oxc formatter settings and include JSX and TSX
([#2592](#2592)), by
@joschuba.
- Add Wrangler deployment configuration for the documentation site
([#2596](#2596)), by
@mdong1909.
- Explain conflicts between pnpm and Vite+ runtime management, including
the `runtimeOnFail` setting
([#2620](#2620)), by
@liangmiQwQ.

### Chore

- Run CLI snapshots without published release packages
([#2625](#2625)), by
@fengmk2.
- Update the release-manager skill with package-install checks,
changelog guidance, and announcement handling
([#2548](#2548)), by
@fengmk2.
- Wait for npm dependencies to become available before publishing
dependent release packages
([#2601](#2601)), by
@fengmk2.
- Remove old Docker preview images
([#2539](#2539)), by
@fengmk2.
- Stabilize external-tool snapshots and isolate npm network cases
([#2577](#2577),
[#2604](#2604)), by
@fengmk2.
- Avoid unreliable Fish PPA setup in CI
([#2560](#2560)), by
@fengmk2.
- Update the `vinext` fixture to an upstream fix
([#2571](#2571)), by
@jong-kyung.
- Stabilize the pnpm snapshot and Nuxt build in CI
([#2591](#2591)), by
@voidzero-guard[bot].
- Pin pnpm in project-creation build-approval fixtures
([#2616](#2616)), by
@liangmiQwQ.
- Remove unused documentation components, assets, and the typewriter
dependency
([#2550](#2550),
[#2562](#2562)), by
@jong-kyung.
- Remove duplicate `tempfile` dependencies, an unused runtime helper,
and unused error variants. Update the `unit_bindings` lint name
([#2555](#2555),
[#2558](#2558),
[#2566](#2566),
[#2567](#2567)), by
@jong-kyung.
- Update GitHub Actions dependencies, including `actions/setup-node`
`v7` ([#2544](#2544),
[#2545](#2545),
[#2582](#2582),
[#2618](#2618)), by
@renovate[bot].
- Update `crate-ci/typos` through `v1.50.1`
([#2584](#2584),
[#2589](#2589),
[#2609](#2609)), by
@renovate[bot].
- Update repository pnpm to `11.24.0`
([#2590](#2590)), by
@renovate[bot].
- Update `voidzero-dev/setup-vp` to `v1.19.0`
([#2619](#2619)), by
@renovate[bot].

### Bundled Versions

| Tool | Version | Source |
| --- | --- | --- |
| `vite` | `8.2.2` |
[`de1111a`](vitejs/vite@de1111a)
|
| `rolldown` | `1.2.7` |
[`26b4c6e`](rolldown/rolldown@26b4c6e)
|
| `tsdown` | `0.23.0` | [npm](https://npmx.dev/package/tsdown/v/0.23.0)
|
| `vitest` | `4.1.11` | [npm](https://npmx.dev/package/vitest/v/4.1.11)
|
| `oxlint` | `1.81.0` | [npm](https://npmx.dev/package/oxlint/v/1.81.0)
|
| `oxlint-tsgolint` | `7.0.2001` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2001) |
| `oxfmt` | `0.66.0` | [npm](https://npmx.dev/package/oxfmt/v/0.66.0) |

### Upgrade

```bash
vp upgrade
```

### New Contributors

@afonsojramos, @joschuba

**Full Changelog**:
v0.3.0...v0.3.1

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>