vx runs no background process. When nothing changed, a run over 9,603
tasks still finishes in 799 ms.
| Runner | Nothing changed | Daemon |
|---|---|---|
| vx | 799 ms | none |
| Turborepo | 927 ms | not for turbo run
|
| Nx | 24.15 s | off, as in CI |
Synthetic monorepo, 1,601 projects, 9,603 tasks · linux x64, 4 cores, concurrency 10 · vx 0be036747, Turborepo 2.11.10, Nx 24.0.1 · 2026-10-23 · benchmarks
Nx runs a daemon by default. Turborepo shipped one and, since 2.8.11,
no longer uses it for turbo run.
A daemon can be wrong
A daemon keeps its own copy of your tree. One missed file event and that
copy is wrong. For a build cache, wrong means old bytes under a green
check.
vx reads the tree fresh, every run
Each run asks git, which already holds a hash for every clean file. A
clean tree is keyed with no read of a source file
(how).
Config comes from the lock file, so no vx.config.ts is evaluated. A
hit on an up-to-date tree only checks that the outputs are there
(how).
That is the 799 ms. Nothing stays running after it, and a run in a
terminal, in CI or in a container gives the same answer.
More at vznjs.github.io/vx.
Originally published on the vx blog. vx is open-source (MIT) task orchestration with a build cache: vznjs.github.io/vx · GitHub.
Written with AI assistance.
Top comments (0)