Repository navigation
v0.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
Input stability
cache.inputStability decides which input writes count. 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_CACHE_INPUT_STABILITY_STRATEGY
and VX_CACHE_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' },
inputs: { files: ['src/**', 'package.json'] },
cache: {
outputs: { files: ['dist/**'] },
inputStability: { strategy: 'mutable' },
},
},
},
})$ VX_CACHE_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 failsEvery 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
Tested in Git 3 repositories
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.
$ git init --object-format=sha256 --ref-format=reftable
$ vx run build --allPR #3443.
Benchmarks show the figures
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.
$ bun packages/vx-bench/update-site.ts --check
site matches results.jsonPRs #3437,
#3439,
#3440. Numbers:
Benchmarks
Breaking changes
cache.rewrittenInputsandVX_REWRITTEN_INPUTSare gone. Use
cache.inputStability: { strategy, severity }('withhold'is
'immutable','compare'is'mutable'),
VX_CACHE_INPUT_STABILITY_STRATEGYand
VX_CACHE_INPUT_STABILITY_SEVERITY
(#3438). See
Upgrading.
How to update
npm install -D @vzn/vx@latestA standalone binary updates itself with vx upgrade.