flowchart LR
T["command + inputs + outputs"] --> R[remote: one REAPI action]
T --> S["sandbox: one process in bwrap or seatbelt"]
T --> P[replay: same bytes on a hit]
T --> M[migration from Turbo or Nx]
T --> D["vx show, --dry: what you'd type"]
Every feature works on the same three things. Replay stores the captured stdout in the cache index and prints it byte for byte on a hit,
carriage returns and colours included.
Each task gets an isolated environment: a small essential allowlist
(PATH, HOME, CI, NODE_OPTIONS and a few more), then what
exec.env says. Values you define are in the key.
Variables you passThrough are not. inputs.env puts a variable in the
key without passing it, so a variable that changes the output goes in
both.
The most common mistake is a variable that changes the output but is
missing from inputs.env. The key doesn’t change, so vx restores the
old output. More in the env post.
vx needs no plugin per tool. There is no @vzn/vx-vite or
@vzn/vx-jest, because vite build and jest already are the API.
Tool settings belong in TypeScript presets.
vx DTE puts each task on a machine type that can run it, books it by its measured memory peak and CPU, stops a server once nothing needs it, and prints how busy every worker was.
vx's CI is one run spread over its own Linux and Mac runners. On Nx Cloud's Team plan with Nx's agents, the same CI would cost about $12,192 a year. On vx it costs $0.
Turborepo, Nx and other product names are trademarks of their owners. vx is not affiliated with or endorsed by them.