Cache you can trust
A hit replays exactly what a run would have made.
A cache is only worth having if a hit is the same as a run. vx keys every task on what it reads, restores exactly what it wrote, and treats anything it cannot vouch for as a miss.
22 features
Outputs are exactly the snapshotA module you deleted never comes back from the cache.Many monorepo caches restore files on top of what is already there. Delete a module, get a hit, and the old file is still in dist/.
Sandboxed tasksAn undeclared read or write fails the task and names the path.Declared inputs can be wrong. A task reads a file it never named, the key never sees it, and a later hit replays output built from something else.Each one has a page that shows it working.
Config in TypeScript, keyed as evaluatedChange a shared preset and exactly the tasks that use it re-run.
Lockfile-aware keysA dependency bump re-runs the projects that use it, not the whole repo.
Caching you opt intoA task caches only when it names its inputs, so a hit is never a guess.And 17 smaller things that add up.
Everything a build depends onEnv vars, tool versions, upstream tasks and root files all go into the key.Outputs that come backName what a task produces, and a hit puts exactly those files back.Changes travel down, and stopA task’s key folds in its dependencies’ input keys, so a change reaches exactly what depends on it.Every key known before the runvx refuses an input glob another task’s outputs could match, so keys never wait on a build.The cache, your wayTurn it off, refresh it, or choose per layer what is read and written.Put the cache where you wantMove the cache to a fast disk or a CI cache folder with one setting.Only trusted runs write the shared cacheMain writes the remote cache; a laptop or a fork only reads it.Keep the cache smallEvict by age or size, oldest use first, by hand or on a schedule.Download only what you needWith remote execution, choose to fetch all outputs, the top-level ones, or none.One cache for every checkoutClones and worktrees of the same repo share their cache entries.Hits that touch nothingWhen the outputs on disk already match, a hit costs a few file stats.Hits replay what you sawA cache hit prints stdout and stderr in the order the task printed them.Restores never wait for buildsCache restores run in their own lane, so hits finish while misses build.Configs read, not re-runA config that is plain data is read back from cache, not evaluated again.Keys that see what the build seesFiles git rewrites on checkout are keyed on the bytes on disk.Uploads never fail the buildRemote cache writes drain at the end of the run and never turn a green build red.Bring your own cache serverPlug any storage in as a remote cache through one small interface.