Skip to content

v0.0.636

Choose a tag to compare

@github-actions github-actions released this 13 Oct 18:45
· 318 commits to main since this release
Immutable release. Only release title and notes can be modified.
fb6820e

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 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

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 --all

PR #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.json

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

Breaking changes

  • cache.rewrittenInputs and VX_REWRITTEN_INPUTS are gone. Use
    cache.inputStability: { strategy, severity } ('withhold' is
    'immutable', 'compare' is 'mutable'),
    VX_CACHE_INPUT_STABILITY_STRATEGY and
    VX_CACHE_INPUT_STABILITY_SEVERITY
    (#3438). See
    Upgrading.

How to update

npm install -D @vzn/vx@latest

A standalone binary updates itself with vx upgrade.

Learn more

Read it on the site