---
title: Turborepo 2.3
date: 2024/11/14
description: Turborepo 2.3 introduces the Boundaries RFC, along with several ergonomics improvements.
tag: 'web development'
---

<h1 className="text-center">Turborepo 2.3</h1>

import { Authors } from '#components/authors';
import { Date } from '#components/blog/date';
import { Tab, Tabs } from '#components/tabs';
import { Callout } from '#components/callout';

<Date>Tuesday, November 14th, 2024</Date>

<Authors authors={['chrisolszewski', 'nicholasyang', 'anthonyshew']} />

Turborepo 2.3 introduces several ergonomics improvements:

- [**Boundaries RFC**](#boundaries-rfc): Enforce constraints to maintain developer experience
- [**Package task shortcuts**](#package-task-shortcuts): Execute tasks with `turbo run package#task`
- [**Simplified cache control**](#simplified-cache-control): Easier management of cache sources using a single flag

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

## Boundaries RFC

Monorepos unlock greater iteration speed and incredible flexibility, but also introduce new challenges:

- How do we make sure the public API of a package is respected?
- How do we communicate where code can and cannot be used to all of our developers?
- How can we ensure packages are only used in the right context?

These are only a few examples of a key question when building in monorepos: How do we communicate and enforce the structural integrity of the Workspace?

<Callout type="info">
  At the time of publishing this post, the Boundaries RFC is only an initial
  draft. The implementation described below is subject to change. Please see the
  RFC itself for the most up to date information.
</Callout>

[The Boundaries RFC](https://github.com/vercel/turborepo/discussions/9435) is our initial proposal for this problem. In our current approach, we want you to be able to incrementally adopt Boundaries in one line of code:

```json title="turbo.json"
{
  "boundaries": true
}
```

Additionally, we want to create a tagging system so you can mark domains, concerns, contexts, and other useful metadata with custom Boundaries.

```json title="apps/ui/turbo.json"
{
  "extends": ["//"],
  "boundaries": {
    "tags": ["library", "ui", "frontend", "beta"],
    "allowDependencyOn": ["library", "frontend"],
    "denyDependencyFrom": ["backend", "stable"]
  }
}
```

We also plan for you to be able to allowlist existing diagnostics with a flag:

```bash title="Terminal"
turbo boundaries --exclude-errors
```

This way, you can enforce Boundaries for new code and gradually fix existing issues.

We're looking forward to hearing your ideas and feedback on [the Boundaries RFC](https://github.com/vercel/turborepo/discussions/9435).

## Package task shortcuts

You can now run tasks using the fully qualified task identifier:

```bash title="Terminal"
turbo run web#build
```

This is more convenient than the equivalent command using `--filter` (`turbo run build --filter=web`) and allows for more precision if you have multiple tasks that you'd like to target:

```bash title="Terminal"
turbo run web#build docs#lint
```

[Learn more in the documentation.](/docs/crafting-your-repository/running-tasks#filtering-by-package)

## Simplified cache control

Previously, the `--remote-only` and `--no-cache` flags were used to manage the sources and caching for your output artifacts. However, we've seen how they can cause confusion, and there are gaps in control as far as reading and writing to local and Remote Caches.

To refine this, we've introduced a new `--cache` flag that brings these flags together - and provides more power.

```bash title="Terminal"
turbo run build --cache=local:rw,remote:r
```

Using `local` and `remote`, you can control the reading and writing behavior of the `turbo` invocation. Learn more in the [documentation](/docs/reference/run#--cache-options).

## Continued improvements for `turbo query`

In 2.2, we introduced `turbo query`, a feature built for examining your repository using Turborepo's knowledge of your package and task graphs. We've iterated further on this feature to provide you with even more powerful queries:

- Implemented reverse file tracing to find which files depend on a specific file
- Filters for file tracing to find type-only dependencies
- Package names that you provide are now validated to ensure that they exist

## Community

Since releasing [Turborepo 2.2](/blog/turbo-2-2-0), we've seen great adoption and community growth:

- [26.3+ GitHub Stars](https://github.com/vercel/turbo)
- [3.4M+ weekly NPM downloads](https://www.npmjs.com/package/turbo)
- 496 years of compute time saved using [Vercel Remote Cache](https://vercel.com/docs/concepts/monorepos/remote-caching)

Turborepo is the result of the combined work of all of its contributors, including our core team: [Anthony](https://github.com/anthonyshew), [Chris](https://github.com/chris-olszewski), [Nicholas](https://github.com/NicholasLYang), and [Tom](https://github.com/tknickman).

Thank you for your continued support, feedback, and collaboration to make Turborepo your build tool of choice.
