Turborepo runs and caches. Nx adds a platform. vx is the runner with open plugin points, and nothing behind a paid cloud.
comparison
comparison
Turborepo runs and caches. Nx adds a platform around its runner. We
wanted the runner with open plugin points, and nothing behind a paid
cloud. So we built vx.
Nothing changed
vx559 ms
Turborepo689 ms
Nx12.07 s
Vite Task10.71 s
Cold build
vx6.68 s
Turborepo11.18 s
Nx3 min 12 s
Vite Task8.51 s
Cold build: CPU the runner burns
vx42.19 s
Turborepo1 min 19 s
Nx5 min 31 s
Vite Task24.17 s
The table
Time added over the ideal run, 9,603 tasks
vx
Turborepo
Nx
Vite Task
Nothing changed
559 ms
689 ms
12.07 s
10.71 s
Cold build
6.68 s
11.18 s
3 min 12 s
8.51 s
Cold build: CPU the runner burns
42.19 s
1 min 19 s
5 min 31 s
24.17 s
Synthetic monorepo, 1,601 projects, 9,603 tasks, 30 levels · concurrency 10 · real repos with uneven task times will differ
Measured: vx 0.0.0 @ ee4c63a57 on 2026-11-12, Turborepo 2.11.10 on 2026-11-12, Nx 24.0.2 on 2026-11-12, Vite Task 1.4.0 on 2026-11-12; linux x64, 4 cores (AMD EPYC 7763 64-Core Processor), 16 GB.
With nothing changed, Nx adds 12.07 s against Turborepo’s 689 ms and
vx’s 559 ms, Nx’s daemon off as in CI. Source:
Benchmarks.
runs and caches tasks from one turbo.json; remote cache over an open API
Nx
a project graph, affected and plugins; distribution and flaky detection in Nx Cloud
vx
runs and caches; where a task runs and where artifacts live are plugins
Both got a lot right. Turborepo’s dependsOn syntax and pnpm-style
--filter read the way you think, and vx uses both. Nx’s project graph
and affected scale to very large repos.
flowchart LR
V[vx core: graph, keys, scheduler, local cache] --> P1[remote cache plugin]
V --> P2[remote execution: @vzn/vx-reapi]
V --> P3[spread over your CI: @vzn/vx-dte]
V --> P4[telemetry, CI summaries]
Plugins, not a service. Remote cache, remote execution,
scheduling and telemetry use a public plugin API. @vzn/vx-reapi
talks to any Bazel Remote Execution server. @vzn/vx-dte spreads a
run over workers your own CI starts.
Nothing to keep alive: no daemon, no account, no cloud.
vx has to do what both do. A parity suite writes each Turborepo or Nx
habit in vx and tests it against the real CLI.
Where vx differs (no --parallel, because dependsOn says the order),
the page says so. Full matrix, with upstream sources: Compared to
Turborepo, Nx, vite-task.
Commit a file that sits in a task’s output folder. On the next cache hit, Turborepo, Nx and Vite Task write the old copy back over it, and the run reports success.
correctness
One test suite, six task runners, the same 993 cases
993 task-runner cases, compiled from the test suites of Nx, Turborepo, Vite Task, moon, Nix and vx, run sandboxed against all six. Every result is on one page.