{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/SchemaV1",
  "definitions": {
    "SchemaV1": {
      "anyOf": [
        {
          "$ref": "#/definitions/WorkspaceSchemaV1"
        },
        {
          "$ref": "#/definitions/RootSchemaV1"
        }
      ]
    },
    "WorkspaceSchemaV1": {
      "type": "object",
      "properties": {
        "$schema": {
          "type": "string",
          "default": "https://turborepo.com/schema.v1.json"
        },
        "pipeline": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/PipelineV1",
            "description": "The name of a task that can be executed by turbo. If turbo finds a workspace package with a package.json scripts object with a matching key, it will apply the pipeline task configuration to that npm script during execution."
          },
          "description": "An object representing the task dependency graph of your project. turbo interprets these conventions to schedule, execute, and cache the outputs of tasks in your project.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#tasks",
          "default": {}
        },
        "extends": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "This key is only available in Workspace Configs and cannot be used in your root turbo.json.\n\nTells turbo to extend your root `turbo.json` and overrides with the keys provided in your Workspace Configs.\n\nCurrently, only the \"//\" value is allowed.",
          "default": [
            "//"
          ]
        }
      },
      "required": [
        "extends",
        "pipeline"
      ],
      "additionalProperties": false
    },
    "PipelineV1": {
      "type": "object",
      "properties": {
        "dependsOn": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The list of tasks that this task depends on.\n\nPrefixing an item in dependsOn with a ^ prefix tells turbo that this task depends on the package's topological dependencies completing the task first. (e.g. \"A package's build tasks should only run once all of its workspace dependencies have completed their own build commands.\")\n\nItems in dependsOn without a ^ prefix express the relationships between tasks within the same package (e.g. \"A package's test and lint commands depend on its own build being completed first.\")\n\nDocumentation: https://turborepo.com/docs/reference/configuration#dependson",
          "default": []
        },
        "env": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnvWildcardV1"
          },
          "description": "A list of environment variables that this task depends on.\n\nNote: If you are migrating from a turbo version 1.5 or below, you may be used to prefixing your variables with a $. You no longer need to use the $ prefix. (e.g. $GITHUB_TOKEN → GITHUB_TOKEN)\n\nDocumentation: https://turborepo.com/docs/reference/configuration#env",
          "default": []
        },
        "passThroughEnv": {
          "anyOf": [
            {
              "type": "null"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/EnvWildcardV1"
              }
            }
          ],
          "description": "An allowlist of environment variables that should be made available in this task's environment, but should not contribute to the task's cache key, e.g. `AWS_SECRET_KEY`.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#passthroughenv",
          "default": null
        },
        "dotEnv": {
          "anyOf": [
            {
              "type": "null"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/AnchoredUnixPath"
              }
            }
          ],
          "description": "A priority-ordered (most-significant to least-significant) array of workspace-anchored Unix-style paths to `.env` files to include in the task hash.",
          "default": null
        },
        "outputs": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The set of glob patterns indicating a task's cacheable filesystem outputs.\n\nTurborepo captures task logs for all tasks. This enables us to cache tasks whose runs produce no artifacts other than logs (such as linters). Logs are always treated as a cacheable artifact and never need to be specified.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#outputs",
          "default": []
        },
        "cache": {
          "type": "boolean",
          "description": "Whether or not to cache the outputs of the task.\n\nSetting cache to false is useful for long-running \"watch\" or development mode tasks.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#cache",
          "default": true
        },
        "inputs": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The set of glob patterns to consider as inputs to this task.\n\nChanges to files covered by these globs will cause a cache miss and the task will be rerun.\n\nIf a file has been changed that is **not** included in the set of globs, it will not cause a cache miss.\n\nIf omitted or empty, all files in the package are considered as inputs.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#inputs",
          "default": []
        },
        "outputMode": {
          "$ref": "#/definitions/OutputModeV1",
          "description": "Output mode for the task.\n\n\"full\": Displays all output\n\n\"hash-only\": Show only the hashes of the tasks\n\n\"new-only\": Only show output from cache misses\n\n\"errors-only\": Only show output from task failures\n\n\"none\": Hides all task output\n\nDocumentation: https://turborepo.com/docs/reference/run#--output-logs-option",
          "default": "full"
        },
        "persistent": {
          "type": "boolean",
          "description": "Indicates whether the task exits or not. Setting `persistent` to `true` tells turbo that this is a long-running task and will ensure that other tasks cannot depend on it.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#persistent",
          "default": false
        },
        "interactive": {
          "type": "boolean",
          "description": "Mark a task as interactive allowing it to receive input from stdin. Interactive tasks must be marked with \"cache\": false as the input they receive from stdin can change the outcome of the task.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#interactive",
          "default": false
        }
      },
      "additionalProperties": false
    },
    "EnvWildcardV1": {
      "type": "string"
    },
    "AnchoredUnixPath": {
      "type": "string"
    },
    "OutputModeV1": {
      "type": "string",
      "enum": [
        "full",
        "hash-only",
        "new-only",
        "errors-only",
        "none"
      ]
    },
    "RootSchemaV1": {
      "type": "object",
      "properties": {
        "$schema": {
          "type": "string",
          "default": "https://turborepo.com/schema.v1.json"
        },
        "pipeline": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/PipelineV1",
            "description": "The name of a task that can be executed by turbo. If turbo finds a workspace package with a package.json scripts object with a matching key, it will apply the pipeline task configuration to that npm script during execution."
          },
          "description": "An object representing the task dependency graph of your project. turbo interprets these conventions to schedule, execute, and cache the outputs of tasks in your project.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#tasks",
          "default": {}
        },
        "globalDependencies": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.)\n\nDocumentation: https://turborepo.com/docs/reference/configuration#globaldependencies",
          "default": []
        },
        "globalEnv": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnvWildcardV1"
          },
          "description": "A list of environment variables for implicit global hash dependencies.\n\nThe variables included in this list will affect all task hashes.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#globalenv",
          "default": []
        },
        "globalPassThroughEnv": {
          "anyOf": [
            {
              "type": "null"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/EnvWildcardV1"
              }
            }
          ],
          "description": "An allowlist of environment variables that should be made to all tasks, but should not contribute to the task's cache key, e.g. `AWS_SECRET_KEY`.\n\nDocumentation: https://turborepo.com/docs/reference/configuration#globalpassthroughenv",
          "default": null
        },
        "globalDotEnv": {
          "anyOf": [
            {
              "type": "null"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/AnchoredUnixPath"
              }
            }
          ],
          "description": "A priority-ordered (most-significant to least-significant) array of project-anchored Unix-style paths to `.env` files to include in the global hash.",
          "default": null
        },
        "remoteCache": {
          "$ref": "#/definitions/RemoteCacheV1",
          "description": "Configuration options that control how turbo interfaces with the remote cache.\n\nDocumentation: https://turborepo.com/docs/core-concepts/remote-caching",
          "default": {}
        },
        "experimentalUI": {
          "type": "boolean",
          "description": "Enable use of the new UI for `turbo`\n\nDocumentation: https://turborepo.com/docs/reference/configuration#ui",
          "default": false
        }
      },
      "additionalProperties": false,
      "required": [
        "pipeline"
      ]
    },
    "RemoteCacheV1": {
      "type": "object",
      "properties": {
        "signature": {
          "type": "boolean",
          "description": "Indicates if signature verification is enabled for requests to the remote cache. When `true`, Turborepo will sign every uploaded artifact using the value of the environment variable `TURBO_REMOTE_CACHE_SIGNATURE_KEY`. Turborepo will reject any downloaded artifacts that have an invalid signature or are missing a signature.",
          "default": false
        },
        "enabled": {
          "type": "boolean",
          "description": "Indicates if the remote cache is enabled. When `false`, Turborepo will disable all remote cache operations, even if the repo has a valid token. If true, remote caching is enabled, but still requires the user to login and link their repo to a remote cache. Documentation: https://turborepo.com/docs/core-concepts/remote-caching",
          "default": true
        }
      },
      "additionalProperties": false
    }
  }
}