{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/MachineConfig",
  "title": "MachineConfig",
  "type": "object",
  "description": "Configuration for a Fly Machine.",
  "required": [
    "image"
  ],
  "properties": {
    "image": {
      "type": "string",
      "description": "The container registry path for the image that defines this Machine.",
      "example": "registry-1.docker.io/library/ubuntu:latest"
    },
    "guest": {
      "$ref": "#/components/schemas/MachineGuest"
    },
    "env": {
      "type": "object",
      "description": "Environment variables to inject into the Machine at runtime.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "services": {
      "type": "array",
      "description": "Network service definitions for exposing this Machine externally.",
      "items": {
        "$ref": "#/components/schemas/MachineService"
      }
    },
    "checks": {
      "type": "object",
      "description": "Named health check definitions. Keys are check names; values are check configuration objects.",
      "additionalProperties": {
        "$ref": "#/components/schemas/MachineCheck"
      }
    },
    "mounts": {
      "type": "array",
      "description": "Persistent volume mount definitions.",
      "items": {
        "$ref": "#/components/schemas/MachineMount"
      }
    },
    "init": {
      "$ref": "#/components/schemas/MachineInit"
    },
    "restart": {
      "$ref": "#/components/schemas/MachineRestart"
    },
    "schedule": {
      "type": "string",
      "description": "Run this Machine on a recurring schedule. Valid values are hourly, daily, weekly, and monthly.",
      "enum": [
        "hourly",
        "daily",
        "weekly",
        "monthly"
      ]
    },
    "auto_destroy": {
      "type": "boolean",
      "description": "When true, the Machine is automatically destroyed after it exits."
    },
    "metadata": {
      "type": "object",
      "description": "Arbitrary key-value metadata for internal routing and configuration.",
      "additionalProperties": {
        "type": "string"
      }
    }
  }
}