{
  "title": "Compose file validator",
  "human_url": "https://happytails.ai/en/developer-tools/compose-file-validator/",
  "agent_url": "https://happytails.ai/agents/en/developer-tools/compose-file-validator/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/developer-tools/compose-file-validator.md",
  "content": "Compose file validator\nCheck a Docker Compose file and its override files for broken service, network, volume, secret and config references, unset variables and host port clashes. You get the line of each problem and the merged result.\nHow to use Compose file validator\nPaste compose.yaml. Add override files after it, each starting with a line of three dashes.\nOptionally paste the .env variables Compose would use.\nRun the check and review each finding with its file and line.\nDownload the JSON report, CSV, SARIF or the merged Compose file.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nUseful next steps\nContainer environment diff\nEnvironment file validator\nYAML validator\nWhat is checked\nHappytails.ai checks the keys and references described in the Compose Specification (github.com/compose-spec/compose-spec, Apache-2.0, read on 16 October 2026). It looks for services, networks, volumes, secrets and configs that are used but not declared, depends_on cycles, services without an image or build, and common type mistakes such as a list where a mapping belongs.\nVariables and override files\nValues are interpolated like Compose does: ${NAME}, ${NAME:-default}, ${NAME-default}, ${NAME:?error}, ${NAME:+value} and $$ for a literal dollar sign. Unset variables become empty text and are reported. Override files are merged in order: mappings merge, command and entrypoint are replaced, ports, volumes, secrets and configs merge by their target, and other lists are appended. Line numbers count from the top of the box, so a finding in an override file shows the line where you see it.\nCoverage and limits\nThe key lists are an authored subset written from the specification, not the full compose-spec JSON Schema, so an unknown key is a warning rather than a hard error. Port clashes are checked for fixed one-to-one mappings on overlapping addresses. Profiles, include files on disk, the !reset and !override tags and the image contents are not read.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "Container environment diff",
      "url": "https://happytails.ai/en/developer-tools/container-environment-diff/"
    },
    {
      "name": "Environment file validator",
      "url": "https://happytails.ai/en/developer-tools/environment-file-validator/"
    },
    {
      "name": "YAML validator",
      "url": "https://happytails.ai/en/developer-tools/yaml-validator/"
    }
  ],
  "tool": {
    "id": "compose-file-validator",
    "category": "developer-tools",
    "built": true,
    "requirements": "Up to 500,000 characters in total, 10 files and 100,000 characters of variables. Everything runs on your device in a background worker. Downloads: JSON report, CSV findings, SARIF 2.1.0 and the merged compose.resolved.yaml.",
    "implementation": {
      "fields": [
        {
          "key": "env",
          "label": "Variables (.env)",
          "value": "",
          "type": "textarea",
          "help": "Optional. One NAME=value per line, used for ${NAME} interpolation. Up to 100,000 characters."
        }
      ],
      "registrationFamily": "config-yaml-manifests",
      "inputMaxLength": 500000,
      "inputErrorCode": "CONFIG_YAML_MANIFESTS_TOO_LONG_COMPOSE",
      "note": "Checks Compose files on your device against an authored subset of the Compose Specification. Up to 500,000 characters and 10 files.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 500000,
        "inputMode": "text",
        "label": "Compose file and overrides",
        "placeholder": "services:\n  web:\n    image: nginx:1.27\n    ports:\n      - \"8080:80\"",
        "help": "Paste compose.yaml. Put each override file after a line of three dashes. Up to 500,000 characters. Review the settings before running.",
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# Compose file validator\n\n- Human page: https://happytails.ai/en/developer-tools/compose-file-validator/\n- Markdown: https://happytails.ai/en/developer-tools/compose-file-validator.md\n- Structured JSON: https://happytails.ai/agents/en/developer-tools/compose-file-validator/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `compose-file-validator` |\n| Category | developer-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nChecks Compose files on your device against an authored subset of the Compose Specification. Up to 500,000 characters and 10 files.\n\n### Inputs and settings\n\nText input: Compose file and overrides.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\nservices:\n  web:\n    image: nginx:1.27\n    ports:\n      - \"8080:80\"\n```\n\nPaste compose.yaml. Put each override file after a line of three dashes. Up to 500,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `env` | Variables (.env) | textarea | \"\" |  |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nUp to 500,000 characters in total, 10 files and 100,000 characters of variables. Everything runs on your device in a background worker. Downloads: JSON report, CSV findings, SARIF 2.1.0 and the merged compose.resolved.yaml.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"compose-file-validator\",\n  \"category\": \"developer-tools\",\n  \"built\": true,\n  \"requirements\": \"Up to 500,000 characters in total, 10 files and 100,000 characters of variables. Everything runs on your device in a background worker. Downloads: JSON report, CSV findings, SARIF 2.1.0 and the merged compose.resolved.yaml.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"env\",\n        \"label\": \"Variables (.env)\",\n        \"value\": \"\",\n        \"type\": \"textarea\",\n        \"help\": \"Optional. One NAME=value per line, used for ${NAME} interpolation. Up to 100,000 characters.\"\n      }\n    ],\n    \"registrationFamily\": \"config-yaml-manifests\",\n    \"inputMaxLength\": 500000,\n    \"inputErrorCode\": \"CONFIG_YAML_MANIFESTS_TOO_LONG_COMPOSE\",\n    \"note\": \"Checks Compose files on your device against an authored subset of the Compose Specification. Up to 500,000 characters and 10 files.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 500000,\n      \"inputMode\": \"text\",\n      \"label\": \"Compose file and overrides\",\n      \"placeholder\": \"services:\\n  web:\\n    image: nginx:1.27\\n    ports:\\n      - \\\"8080:80\\\"\",\n      \"help\": \"Paste compose.yaml. Put each override file after a line of three dashes. Up to 500,000 characters. Review the settings before running.\",\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nCheck a Docker Compose file and its override files for broken service, network, volume, secret and config references, unset variables and host port clashes. You get the line of each problem and the merged result.\n\n### How to use Compose file validator\n\n1. Paste compose.yaml. Add override files after it, each starting with a line of three dashes.\n2. Optionally paste the .env variables Compose would use.\n3. Run the check and review each finding with its file and line.\n4. Download the JSON report, CSV, SARIF or the merged Compose file.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n## Useful next steps\n\n- [Container environment diff](https://happytails.ai/en/developer-tools/container-environment-diff/) ([Markdown](https://happytails.ai/en/developer-tools/container-environment-diff.md))\n\n- [Environment file validator](https://happytails.ai/en/developer-tools/environment-file-validator/) ([Markdown](https://happytails.ai/en/developer-tools/environment-file-validator.md))\n\n- [YAML validator](https://happytails.ai/en/developer-tools/yaml-validator/) ([Markdown](https://happytails.ai/en/developer-tools/yaml-validator.md))\n\n## What is checked\n\nHappytails.ai checks the keys and references described in the Compose Specification (github.com/compose-spec/compose-spec, Apache-2.0, read on 16 October 2026). It looks for services, networks, volumes, secrets and configs that are used but not declared, depends\\_on cycles, services without an image or build, and common type mistakes such as a list where a mapping belongs.\n\n### Variables and override files\n\nValues are interpolated like Compose does: ${NAME}, ${NAME:-default}, ${NAME-default}, ${NAME:?error}, ${NAME:+value} and $$ for a literal dollar sign. Unset variables become empty text and are reported. Override files are merged in order: mappings merge, command and entrypoint are replaced, ports, volumes, secrets and configs merge by their target, and other lists are appended. Line numbers count from the top of the box, so a finding in an override file shows the line where you see it.\n\n### Coverage and limits\n\nThe key lists are an authored subset written from the specification, not the full compose-spec JSON Schema, so an unknown key is a warning rather than a hard error. Port clashes are checked for fixed one-to-one mappings on overlapping addresses. Profiles, include files on disk, the !reset and !override tags and the image contents are not read.\n"
}