Turborepo 2.7

Friday, December 19th, 2025
Anthony Shew
Name
Anthony Shew
X
@anthonysheww
Tom Knickman
Name
Tom Knickman
X
@tknickman

Turborepo 2.7 is now available, including new features like:

Upgrade today by running npx @turbo/codemod migrate or get started with npx create-turbo@latest.

Terminal
# Use the automated upgrade CLI
pnpm dlx @turbo/codemod migrate
 
# Start a new repository
pnpm dlx create-turbo@latest

Devtools

We’ve shipped a brand new experience at turborepo.com/devtools. Starting with this version of Turborepo, you can run turbo devtools to visually explore your Package Graph and Task Graph.

The graphs will hot-reload as you make changes to your repository, and help you to answer questions like:

And much, much more. Visit turborepo.com/devtools to get started, or learn more in the documentation.

Compose configuration with extends

We’ve expanded the capabilities of Package Configurations so you can write your configuration once, and share it to anywhere in your repository.

A more powerful extends key

Previously, you could only extend from your root turbo.json when you used the extends key. Now, you can reference turbo.json from any other package in your workspace by the package name:

Turborepo logo
./apps/docs/turbo.json
{
  "extends": ["//", "web"]
}

This configuration inherits the build and prepare-build tasks from apps/web/turbo.json.

Visit the docs to learn more.

Extending array configurations

Additionally, we’re introducing a new keyword: $TURBO_EXTENDS$.

Turborepo logo
./apps/web/turbo.json
{
  "extends": ["//"],
  "tasks": {
    "build": {
      // Inherits "dist/**" from root AND adds ".next/**"
      "outputs": ["$TURBO_EXTENDS$", ".next/**"]
    }
  }
}

Previously, you could only overwrite array configurations completely. But now, in the example above, you can use $TURBO_EXTENDS$ to append to an existing array. This gives you a greater degree of control so you can choose to completely overwrite or extend from existing configuration.

Visit the docs to learn more.

New Biome rule: noUndeclaredEnvVars

Turborepo users love going fast, so its no surprise they enjoy using Biome for linting and formatting. However, until today, the only linting support we had for finding unsafe environment variable usage was in ESLint, with our eslint-plugin-turbo plugin.

In Biome 2.3.10 and above, you can find environment variables that can cause unexpected cache hits faster with the new Turborepo domain in Biome.

Biome will read your dependencies in your repository, and activate the Turborepo domain automatically. The noUndeclaredEnvVars rule is currently in the “nursery” group, so must be activated manually:

biome.json
{
  "linter": {
    "rules": {
      "nursery": {
        "noUndeclaredEnvVars": "error"
      }
    }
  }
}

Once the rule is promoted out of the nursery group in a future release of Biome, the rule will be automatically activated for Turborepo projects, requiring zero-configuration. To learn more about Biome, visit the Biome documentation.

Yarn 4 catalogs

Yarn’s 4.10.0 release introduced “catalogs”, inspired by pnpm’s catalogs feature. Catalogs allow you to define a specific version of a dependency once, and reuse that version as a constant in the rest of your repository.

.yarnrc.yml
catalog:
  react: ^19.2.3
  lodash: ^4.17.21

We’ve updated our lockfile parser to work with this new Yarn feature, ensuring our smart lockfile detection doesn’t cause global invalidations in your repository. Only the packages and tasks that are affected by the change to your catalogs will see cache misses, improving your cache hit rates.

Visit our Support Policy to learn more about our package manager support, or learn more about catalogs in the Yarn documentation.

Other changes

Acknowledgments and community

Turborepo is the result of the combined work of all of its contributors, including our core team: Anthony and Tom.

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.

We also thank everyone who contributed to this release of Turborepo: @2qp, @AdelFetner, @AndrewPynch, @AryanBagade, @birajitsaikia, @ctate, @dsmurdoch357, @deepakpathik, @mrr11k, @lishaduck, @ethan-fraser, @eug-vs, @GAMMA_Demon, @hanlee, @jnsamines, @kitfoster, @louisbompart, @ognevny, @cmg8431, @chosim-dvlpr, @amond, @nicolascharpentier, @progyansen, @pyrytakala, @sakena1303, @vanshagarwal, @yairopro, @YASHRDX0001, @Yeom-JinHo, @Gabrola, @zacowan, @hookim, @johnpyp, @mahi656, and @neel.

Additionally, the core team would like to thank: