Turborepo website screenshot

Turborepo

Turborepo is a high-performance build system for JavaScript and TypeScript codebases, built by Vercel and written in Rust. It accelerates monorepo development by orchestrating task pipelines with explicit dependency graphs, hashing task inputs to skip redundant work, and caching task outputs locally and remotely so the same build/lint/test never runs twice across developers and CI. The project ships the turbo CLI (turbo run, prune, watch, boundaries, ls, query, generate, login, link, telemetry) plus an open Remote Cache HTTP API specification that any server can implement — Vercel's Remote Cache is the reference, and community implementations enable fully self-hosted caching. Turborepo is MIT-licensed open source at github.com/vercel/turborepo.

1 APIs 21 Features
Build SystemMonorepoJavaScriptTypeScriptCachingOpen SourceRustVercelDeveloper ToolsCI/CD

APIs

Turborepo Remote Cache API

The Turborepo Remote Cache API specification defines the HTTP interface that any remote cache server must implement to be compatible with Turborepo. The remote cache stores buil...

Collections

GraphQL

Features

High-performance build system for JavaScript and TypeScript monorepos, written in Rust
Task pipeline orchestration with dependsOn graphs (turbo run build, lint, test)
Content-addressable local caching of task outputs
Remote Caching with shared artifact store across teammates and CI
Open Remote Cache API specification — any HTTP server can implement it
Vercel Remote Cache as the reference implementation (api.vercel.com)
Self-hosted remote cache compatible (ducktors/turborepo-remote-cache, brunojppb/turbo-cache-server)
Package manager support — npm, pnpm, Yarn, Bun
turbo prune for shipping minimal monorepo subsets to Docker/production
turbo watch for single-process dependency-aware task watching
turbo boundaries for enforcing architectural rules between packages
turbo query — GraphQL queries over monorepo structure
turbo ls for listing packages and dependencies
turbo gen scaffolding for new apps and packages
turbo-ignore helper for CI skip-build decisions based on affected packages
Codemods via turbo-codemod for upgrading between major versions
VS Code extension (turbo-vsc) and ESLint plugin/config
Telemetry CLI (turbo telemetry enable/disable/status) with anonymous opt-out
Login flow (turbo login, turbo link, turbo unlink) for Remote Cache provider auth
turbo bin and turbo docs helper commands
MIT licensed, open source on GitHub (vercel/turborepo)

Resources

🌐
Portal
Portal
🔗
Documentation
Documentation
🚀
GettingStarted
GettingStarted
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
📰
Blog
Blog
🔗
Documentation
Documentation
👥
GitHubOrganization
GitHubOrganization
💻
SourceCode
SourceCode
📄
ChangeLog
ChangeLog
🔗
License
License
🔗
SecurityPolicy
SecurityPolicy
💻
CodeOfConduct
CodeOfConduct
🔗
Documentation
Documentation
🔗
Package
Package
🔗
Package
Package
🔗
Package
Package
🔗
Package
Package
🔗
Package
Package
💻
CodeExamples
CodeExamples
🔗
Documentation
Documentation
🔗
Documentation
Documentation
💰
Pricing
Pricing
🔑
Authentication
Authentication
🔗
Forums
Forums
🔗
X
X
🔗
BlueSky
BlueSky

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Turborepo Remote Cache API
  version: 1.0.0
items:
- info:
    name: artifacts
    type: folder
  items:
  - info:
      name: Get remote caching status
      type: http
    http:
      method: GET
      url: '{protocol}://{host}/artifacts/status'
      params:
      - name: teamId
        value: ''
        type: query
        description: The team identifier to perform the request on behalf of. Used for multi-tenant cache implementations
          where artifacts are scoped to teams.
      - name: slug
        value: ''
        type: query
        description: The team slug to perform the request on behalf of. Alternative to `teamId` for identifying the team.
      auth:
        type: bearer
        token: '{{bearerToken}}'
    docs: 'Check the status of Remote Caching for the authenticated user or team. Returns a JSON-encoded status indicating
      if Remote Caching is enabled, disabled, or disabled due to usage limits.


      Implementers should return `enabled` if the authenticated principal is allowed to use the cache, or `disabled` if not.
      The `over_limit` and `paused` statuses are optional and can be used to indicate usage limits or temporary suspension.'
  - info:
      name: Download a cache artifact
      type: http
    http:
      method: GET
      url: '{protocol}://{host}/artifacts/:hash'
      headers:
      - name: x-artifact-client-ci
        value: ''
      - name: x-artifact-client-interactive
        value: ''
      params:
      - name: hash
        value: ''
        type: path
        description: The artifact hash. This is a content-addressable hash that uniquely identifies the cached artifact based
          on task inputs.
      - name: teamId
        value: ''
        type: query
        description: The team identifier to perform the request on behalf of. Used for multi-tenant cache implementations
          where artifacts are scoped to teams.
      - name: slug
        value: ''
        type: query
        description: The team slug to perform the request on behalf of. Alternative to `teamId` for identifying the team.
      auth:
        type: bearer
        token: '{{bearerToken}}'
    docs: 'Downloads a cache artifact identified by its `hash` specified on the request path. The artifact is downloaded as
      an octet-stream (binary data).


      The artifact data is a gzip-compressed tarball containing the cached task outputs. The client will verify the content-length
      header against the response body size.'
  - info:
      name: Upload a cache artifact
      type: http
    http:
      method: PUT
      url: '{protocol}://{host}/artifacts/:hash'
      headers:
      - name: Content-Length
        value: ''
      - name: x-artifact-duration
        value: ''
      - name: x-artifact-tag
        value: ''
      - name: x-artifact-sha
        value: ''
      - name: x-artifact-dirty-hash
        value: ''
      - name: x-artifact-client-ci
        value: ''
      - name: x-artifact-client-interactive
        value: ''
      params:
      - name: hash
        value: ''
        type: path
        description: The artifact hash. This is a content-addressable hash that uniquely identifies the cached artifact based
          on task inputs.
      - name: teamId
        value: ''
        type: query
        description: The team identifier to perform the request on behalf of. Used for multi-tenant cache implementations
          where artifacts are scoped to teams.
      - name: slug
        value: ''
        type: query
        description: The team slug to perform the request on behalf of. Alternative to `teamId` for identifying the team.
      auth:
        type: bearer
        token: '{{bearerToken}}'
    docs: 'Uploads a cache artifact identified by the `hash` specified on the path. The cache artifact can then be downloaded
      with the provided `hash`.


      The request body should contain a gzip-compressed tarball of the task outputs. The server should store this data and
      make it available for subsequent downloads.'
  - info:
      name: Check if artifact exists
      type: http
    http:
      method: HEAD
      url: '{protocol}://{host}/artifacts/:hash'
      params:
      - name: hash
        value: ''
        type: path
        description: The artifact hash. This is a content-addressable hash that uniquely identifies the cached artifact based
          on task inputs.
      - name: teamId
        value: ''
        type: query
        description: The team identifier to perform the request on behalf of. Used for multi-tenant cache implementations
          where artifacts are scoped to teams.
      - name: slug
        value: ''
        type: query
        description: The team slug to perform the request on behalf of. Alternative to `teamId` for identifying the team.
      auth:
        type: bearer
        token: '{{bearerToken}}'
    docs: 'Check that a cache artifact with the given `hash` exists. This request returns response headers only and is equivalent
      to a `GET` request to this endpoint where the response contains no body.


      Implementers should return 200 if the artifact exists, or 404 if it does not.'
  - info:
      name: Query artifact information
      type: http
    http:
      method: POST
      url: '{protocol}://{host}/artifacts'
      params:
      - name: teamId
        value: ''
        type: query
        description: The team identifier to perform the request on behalf of. Used for multi-tenant cache implementations
          where artifacts are scoped to teams.
      - name: slug
        value: ''
        type: query
        description: The team slug to perform the request on behalf of. Alternative to `teamId` for identifying the team.
      body:
        type: json
        data: '{}'
      auth:
        type: bearer
        token: '{{bearerToken}}'
    docs: 'Query information about multiple artifacts by their hashes. Returns metadata about each artifact including size,
      task duration, and tag.


      This endpoint is optional for basic cache functionality but enables optimized cache fetching by allowing the client
      to query multiple artifacts in a single request.'
- info:
    name: analytics
    type: folder
  items:
  - info:
      name: Record cache usage events
      type: http
    http:
      method: POST
      url: '{protocol}://{host}/artifacts/events'
      headers:
      - name: x-artifact-client-ci
        value: ''
      - name: x-artifact-client-interactive
        value: ''
      params:
      - name: teamId
        value: ''
        type: query
        description: The team identifier to perform the request on behalf of. Used for multi-tenant cache implementations
          where artifacts are scoped to teams.
      - name: slug
        value: ''
        type: query
        description: The team slug to perform the request on behalf of. Alternative to `teamId` for identifying the team.
      body:
        type: json
        data: '{}'
      auth:
        type: bearer
        token: '{{bearerToken}}'
    docs: 'Records cache usage analytics events. The body of this request is an array of cache usage events.


      This endpoint is optional but enables cache hit/miss analytics. Implementers can use this data to track cache effectiveness
      and optimize storage.


      Event types:

      - `HIT`: A cached artifact was found and used

      - `MISS`: No cached artifact was found for the given hash


      Source types:

      - `LOCAL`: The cache event was on the user''s local filesystem cache

      - `REMOTE`: The cache event is for the remote cache'
bundled: true