{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/dagger/dagger/core/workspace/config",
  "$ref": "#/$defs/Config",
  "$defs": {
    "Config": {
      "properties": {
        "modules": {
          "additionalProperties": {
            "$ref": "#/$defs/ModuleEntry"
          },
          "type": "object"
        },
        "ignore": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "defaults_from_dotenv": {
          "type": "boolean"
        },
        "check-generated": {
          "type": "boolean",
          "description": "CheckGenerated controls whether `dagger check` runs generate-as-checks, which fail when generated files are stale. Defaults to true; set false to skip them (like --no-generate). CLI flags override it."
        },
        "env": {
          "additionalProperties": {
            "$ref": "#/$defs/EnvOverlay"
          },
          "type": "object"
        },
        "ports": {
          "additionalProperties": {
            "$ref": "#/$defs/PortMapping"
          },
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "description": "Config represents a parsed dagger.toml workspace configuration."
    },
    "EnvModuleOverlay": {
      "properties": {
        "settings": {
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "description": "EnvModuleOverlay is the environment-specific overlay for one installed module."
    },
    "EnvOverlay": {
      "properties": {
        "modules": {
          "additionalProperties": {
            "$ref": "#/$defs/EnvModuleOverlay"
          },
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "description": "EnvOverlay is a named workspace environment overlay."
    },
    "ModuleAsSDK": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Name is the user-facing SDK name used by `dagger module init \u003csdk\u003e` and `dagger api client init \u003csdk\u003e`. When empty, the module entry name is used."
        },
        "modules": {
          "items": {
            "$ref": "#/$defs/SDKManagedModule"
          },
          "type": "array",
          "description": "Modules lists the workspace-local modules this SDK authors and manages. Each entry becomes a [[modules.\u003cname\u003e.as-sdk.modules]] block."
        },
        "clients": {
          "items": {
            "$ref": "#/$defs/SDKManagedClient"
          },
          "type": "array",
          "description": "Clients lists generated typed bindings this SDK produces in the workspace. Each entry becomes a [[modules.\u003cname\u003e.as-sdk.clients]] block. Shape is intentionally minimal until concrete client SDKs (TypeScript, Go) take shape."
        }
      },
      "additionalProperties": false,
      "type": "object",
      "description": "ModuleAsSDK carries the per-module SDK-role data: which authored modules and clients this SDK manages in the workspace."
    },
    "ModuleEntry": {
      "properties": {
        "source": {
          "type": "string"
        },
        "pin": {
          "type": "string"
        },
        "settings": {
          "type": "object"
        },
        "entrypoint": {
          "type": "boolean"
        },
        "legacy-default-path": {
          "type": "boolean"
        },
        "up": {
          "$ref": "#/$defs/ModuleSkip"
        },
        "generate": {
          "$ref": "#/$defs/ModuleSkip"
        },
        "check": {
          "$ref": "#/$defs/ModuleSkip"
        },
        "as-sdk": {
          "$ref": "#/$defs/ModuleAsSDK",
          "description": "AsSDK is the SDK-role data for module entries that serve as SDKs in this workspace. Its presence (any populated sub-field) marks the module as installed *as* an SDK; absence means it's a plain installed module. The role data — which authored modules and generated clients this SDK manages locally — lives nested rather than in a parallel top-level section so settings, install, and SDK metadata all converge on a single [modules.\u003cname\u003e.*] entry."
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "source"
      ],
      "description": "ModuleEntry represents a single module entry in the workspace config."
    },
    "ModuleSkip": {
      "properties": {
        "skip": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "description": "ModuleSkip carries the per-action skip patterns for a module entry."
    },
    "PortMapping": {
      "properties": {
        "backendService": {
          "type": "string"
        },
        "backendPort": {
          "type": "integer"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "backendService",
        "backendPort"
      ],
      "description": "PortMapping declares a host port that forwards to a workspace service."
    },
    "SDKManagedClient": {
      "properties": {
        "path": {
          "type": "string"
        },
        "module": {
          "type": "string"
        },
        "pin": {
          "type": "string"
        },
        "options": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "path",
        "module"
      ],
      "description": "SDKManagedClient is a workspace-relative path to a generated client produced by an SDK, bound to one module."
    },
    "SDKManagedModule": {
      "properties": {
        "path": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "path"
      ],
      "description": "SDKManagedModule is a workspace-relative path to a module that an SDK authors and manages here."
    }
  }
}
