vx runs no background process. When nothing changed, a run over 9,603
tasks still finishes in 720 ms.
| Runner | Nothing changed | Daemon |
|---|---|---|
| vx | 720 ms | none |
| Turborepo | 1.05 s | not for turbo run
|
| Nx | 26.21 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 720 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)