Turborepo 2.11
Turborepo 2.11 adds native support for more languages, faster startup, improved JavaScript ecosystem compatibility, and more control over your deployments:
- Native support for Rust, Python, and Go (Experimental): One Task Graph, every language toolchain
- Faster Time to First Task: Up to 4x faster startup than Turborepo 2.9
devEngines.packageManagersupport: Declare your package manager with modern Node.js convention- nub and aube support: New JavaScript package managers
- Production pruning: Exclude development-only workspace packages from
turbo pruneoutputs
In addition to these new features, this is the first release of Turborepo with zero known bugs.


Upgrade or get started today.
# Use the automated upgrade CLI
pnpm dlx @turbo/codemod migrate
# Start a new repository
pnpm dlx create-turbo@latest# Use the automated upgrade CLI
yarn dlx @turbo/codemod migrate
# Start a new repository
yarn dlx create-turbo@latest# Use the automated upgrade CLI
npx @turbo/codemod migrate
# Start a new repository
npx create-turbo@latest# Use the automated upgrade CLI
bunx @turbo/codemod migrate
# Start a new repository
bunx create-turbo@latest# Use the automated upgrade CLI
nubx @turbo/codemod migrate
# Start a new repository
nubx create-turbo@latest# Use the automated upgrade CLI
aubx @turbo/codemod migrate
# Start a new repository
aubx create-turbo@latestNative support for Rust, Python, and Go (Experimental)
Turborepo can now discover packages and dependency relationships from Cargo, uv, and go.work workspaces, putting each language toolchain into the same Task Graph. This brings Turborepo's task scheduling, filtering, affectedness calculations, Watch Mode, and pruning to your Rust, Python, and Go projects. You get one CLI, turbo, to handle all the tasks in your monorepo.
You can use any of these languages on its own or combine JavaScript, Rust, Python, and Go into one unified execution graph. Turborepo runs tasks in parallel across languages while respecting their dependencies.
| Turborepo command | Task execution |
|---|---|
turbo run build | tsc build + cargo build + uv build + go build ./... |
turbo run test | vitest run + cargo test + uv run pytest + go test ./... |
turbo run check | tsc + cargo check + uv run mypy |
turbo run lint | eslint + cargo clippy + uv run ruff check + go vet ./... |
turbo run format | prettier + cargo fmt + uv run ruff format + go fmt ./... |
turbo run build test check lint format | All of the commands above run in parallel |
You can also create cross-toolchain dependencies in turbo.json. For example, tests for a Python API server wait for a Rust core package to be built:
{
"futureFlags": {
"experimentalCargoWorkspaces": true,
"experimentalPythonWorkspaces": true
},
"tasks": {
"my-dango-api#test": {
"dependsOn": ["rust-api-core#build"]
}
}
}Once the Rust dependency is done building, the Django server will run its Python tests.
Native Rust, Python, and Go support is Experimental and subject to change. To learn more, visit the Rust, Python, and Go guides.
Share your feedback in GitHub Discussions.
Up to 4x faster startup
Time to First Task is the time between when you invoke turbo run and when your first task starts running. In Turborepo 2.9, we improved Time To First Task by up to 96%.
In 2.11, Time to First Task is up to 4x faster than 2.9.
Time to First Task
Vercel's backend monorepo (1037 packages)
45% faster
2.11
394ms
2.9
716ms
8.1s
Vercel's frontend monorepo (132 packages)
43% faster
2.11
206ms
2.9
361ms
1.9s
create-turbo (6 packages)
74% faster
2.11
34ms
2.9
132ms
676ms
Benchmarked on Apple M4 Max, 36 GB RAM, macOS 15.7.1
Stacked on top of the Turborepo 2.9 gains, the largest repository we benchmarked now reaches its first task over 20x faster than it did before 2.9. As with 2.9, the improvement you see will depend on the size and complexity of your repository.
devEngines.packageManager support
Starting with this release, Turborepo respects the devEngines.packageManager field in your root package.json.
For JavaScript toolchains, the devEngines.packageManager field is the modern way to declare the package manager expected by your repository:
{
"devEngines": {
"packageManager": {
"name": "pnpm",
"version": "12.0.0"
}
}
}In a future major version of Turborepo, the top-level packageManager field will stop being supported to align with the current and future direction of the JavaScript ecosystem. We encourage migrating your repository by removing the top-level packageManager field and replacing it with devEngines.packageManager.
Read the package manager documentation to learn more.
nub and aube support
Turborepo now recognizes nub and aube as JavaScript package managers.
Both of these package managers focus on improving security and speed for dependency installation in your repo. They use your existing npm, pnpm, Yarn, or Bun lockfile, making for easy migration.
Declare nub in your root package.json:
{
"devEngines": {
"packageManager": {
"name": "nub",
"version": "0.8.3"
}
}
}{
"devEngines": {
"packageManager": {
"name": "aube",
"version": "2.2.9"
}
}
}To try nub or aube, create a monorepo with create-turbo:
# nub
nubx create-turbo -m nub
# aube
aubx create-turbo -m aubeProduction pruning
When preparing a deployment from a monorepo, it can be tricky to right-size your Docker images. Turborepo's prune command solves this problem, trimming your monorepo to only the code that is needed for the application to deploy and run successfully.
Until today, Turborepo would include workspace packages referenced through both dependencies and development dependencies while calculating the pruning dependency closure. While this is a safe default, removing development-only workspace packages from the production image can optimize further.
In this release, we're giving you control to exclude workspace packages that are only reachable through devDependencies with the new --production flag for turbo prune:
turbo prune web --productionThis works across all natively supported languages, including the Experimental ones introduced in this release. Visit the turbo prune documentation to learn more.
All changes
Acknowledgments and community
Turborepo is the result of the combined work of all contributors, including our core team: Anthony and Tom.
We also thank everyone who contributed to this release of Turborepo: @abhiaagarwal, @akshat-OwO, @alexey-yunoshev-1, @ashusnapx, @BABTUNA, @bangseongbeom, @charpeni, @christopherkindl, @colinhacks, @cuishuang, @Divyansh151005, @dnukumamras, @DominikRusso, @floriansalihovic, @ghoullier, @gtbuchanan, @gwagjiug, @Jarred-Sumner, @lachieh, @latent-9, @louis-bompart, @lukesandberg, @markandrus, @molebox, @molofsky, @Nishant-Chaudhary5338, @Nixxx19, @ognevny, @okxint, @Pcmhacker-piro, @Sakshamm-Goyal, @smasato, @tajo, @timsnadden, @tsushanth, @XananasX7, @y-lakhdar.
Thank you for your continued support, feedback, and collaboration to make Turborepo your build tool of choice. To learn how to get involved, visit the Community page.