Skip to content
vxvx
GitHubBlueskydev.toRSS
Blog

There was no choice on the market

Turborepo runs and caches. Nx adds a platform. vx is the runner with open plugin points, and nothing behind a paid cloud.

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.

Tool In one line
Turborepo 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.

  • Keys that are right more often: computed config, strict outputs, no false miss after a commit (keys from git).
  • 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.

More at vznjs.github.io/vx.

Turborepo, Nx and other product names are trademarks of their owners. vx is not affiliated with or endorsed by them.