// the find
vercel/turborepo
Build system optimized for JavaScript and TypeScript, written in Rust
Turborepo is a monorepo build orchestration tool that caches task outputs (locally and remotely) and runs tasks in parallel based on a dependency graph. It targets JS/TS monorepos where you want to avoid re-running builds, tests, and lints for code that hasn't changed. The Rust rewrite (from the original Go) has been largely complete since v2.
- Content-addressable local and remote caching is genuinely fast and the cache hit logic is sound — it hashes inputs (source files, env vars, lock files) and skips tasks when outputs are already cached, which works well in CI.
- Task graph execution with `dependsOn` lets you express real build ordering constraints without writing shell glue, and parallel execution of independent tasks is automatic.
- The Rust core means the graph traversal and file hashing are fast even in large repos with hundreds of packages — noticeably faster than the old Go binary on cold runs.
- Active release cadence (multiple releases per month based on the blog history) and the remote cache protocol is open/documented, so you're not fully locked into Vercel's hosted cache.
- Remote caching outside of Vercel requires either self-hosting a compatible server or using a third-party (Actionforge, ducktape, etc.) — the open protocol is good, but the official self-hosted option is not first-class and configuration is underdocumented.
- Cache invalidation for environment variables requires you to manually declare every env var in `globalEnv` or `env` per task; miss one and you'll get stale cache hits in production, and there's no tooling to detect gaps.
- It's fundamentally a task runner with caching, not a full build system — it has no understanding of what files a task actually reads or writes beyond what you declare, so correctness of the cache depends entirely on accurate `inputs`/`outputs` configuration by the user.
- The Vercel ownership means product decisions are influenced by what works well with Vercel's platform; features like `--affected` (only run tasks for changed packages) only recently matured, and things like fine-grained artifact sharing between PRs still pushes you toward their paid remote cache tier.