Skip to content
vxvx
GitHubBlueskydev.toRSS
Releases

Choose how vx treats inputs that move

cache.inputStability picks which writes to an input during a run count, and whether one warns or fails the run. vx is tested in Git 3 repositories, and the benchmark pages show plain figures.

vx 0.0.636: Choose how vx treats inputs that move

vx 0.0.636 shipped on 2026-10-13. It turns the check on inputs that change during a run into one setting with two choices: which writes count, and what happens when one does.

In this release

cache.inputStability replaces cache.rewrittenInputs. strategy says which writes to an input during the command count: 'immutable' (the default, on CI too) counts any write, 'mutable' lets a rewrite to the same bytes through, and 'unchecked' skips the check. severity says what a write that counts does: 'warn' (the default) keeps the result and skips the save, 'error' fails the task. Set it on a task, in vx.workspace.ts, or for one run with VX_INPUT_STABILITY and VX_INPUT_STABILITY_SEVERITY; the environment wins, then the task, then the workspace.

import { defineProject } from '@vzn/vx/config'
export default defineProject({
tasks: {
build: {
exec: { command: 'tsdown' },
cache: {
inputs: { files: ['src/**', 'package.json'] },
outputs: { files: ['dist/**'] },
inputStability: { strategy: 'mutable' },
},
},
},
})
Terminal window
$ VX_INPUT_STABILITY_SEVERITY=error vx run build --all
...
[vx] @demo/ui#build: `package.json` changed after its key was taken — the result is not saved, and inputStability.severity is 'error', so the task fails

Every task that ran over a withheld task’s outputs withholds its own save too, and so does a task in any project that reads the moved file.

PR #3438. Deep dive: When an input moves mid-run

Git 3 makes reftable refs and sha256 objects the default. vx now runs its cache tests in such a repository: keys from 64-character object ids, hits, a staged edit, --affected and the store id all behave as in a sha1 repository. No code change was needed.

Terminal window
$ git init --object-format=sha256 --ref-format=reftable
$ vx run build --all

PR #3443.

The benchmark tables on the site, the README and the compare pages now show each tool’s time alone. Every runner was measured again on one host, with Nx’s .env loading off, and the compare page for Nx says so.

Terminal window
$ bun packages/vx-bench/update-site.ts --check
site matches results.json

PRs #3437, #3439, #3440. Numbers: Benchmarks

  • cache.rewrittenInputs and VX_REWRITTEN_INPUTS are gone. Use cache.inputStability: { strategy, severity } ('withhold' is 'immutable', 'compare' is 'mutable'), VX_INPUT_STABILITY and VX_INPUT_STABILITY_SEVERITY (#3438). See Upgrading.
Terminal window
npm install -D @vzn/vx@latest

A standalone binary updates itself with vx upgrade.

Turborepo, Nx and other product names are trademarks of their owners. vx is not affiliated with or endorsed by them.