{
  "title": "Kubernetes manifest diff",
  "human_url": "https://happytails.ai/en/developer-tools/kubernetes-manifest-diff/",
  "agent_url": "https://happytails.ai/agents/en/developer-tools/kubernetes-manifest-diff/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/developer-tools/kubernetes-manifest-diff.md",
  "content": "Kubernetes manifest diff\nCompare two sets of Kubernetes manifests by resource, see which fields changed with their lines on both sides, and find the changes that start a new rollout.\nHow to use Kubernetes manifest diff\nPaste the current manifests in the main box.\nPaste the changed manifests in the After box.\nSet the namespace used for objects without one.\nRun the comparison and download the diff, JSON report or CSV.\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\nJSON diff\nYAML validator\nYAML document splitter\nHow resources are matched\nHappytails.ai matches objects by API group, kind, namespace and name, so reordering documents or changing the API version does not count as a change. Lists such as containers, env, ports and volumes are matched by their merge key, for example the container name, like kubectl does with strategic merge patches.\nWhat the output shows\nThe unified diff shows each added, removed or changed resource as clean YAML. The JSON report lists every changed field with its line in the before and after text. A change inside a pod template is marked as a rollout, because Deployments, StatefulSets, DaemonSets, ReplicaSets and Jobs start new pods for it.\nLimits\nServer-managed fields such as status, managedFields, resourceVersion, uid and the last-applied annotation are ignored. Defaults that the API server would add are not filled in, so a field you omit and a field set to its default show as different.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "JSON diff",
      "url": "https://happytails.ai/en/developer-tools/json-diff/"
    },
    {
      "name": "YAML validator",
      "url": "https://happytails.ai/en/developer-tools/yaml-validator/"
    },
    {
      "name": "YAML document splitter",
      "url": "https://happytails.ai/en/data-tools/yaml-document-splitter/"
    }
  ],
  "tool": {
    "id": "kubernetes-manifest-diff",
    "category": "developer-tools",
    "built": true,
    "requirements": "Up to 1,000,000 characters on each side, 100 documents and 5,000 objects per side. Everything runs on your device in a background worker. Downloads: unified diff, JSON report and CSV of changed fields.",
    "implementation": {
      "fields": [
        {
          "key": "after",
          "label": "After (changed manifests)",
          "value": "",
          "type": "textarea",
          "help": "Paste the new version of the manifests. Up to 1,000,000 characters."
        },
        {
          "key": "defaultNamespace",
          "label": "Default namespace",
          "value": "default",
          "type": "text",
          "help": "Used for namespaced objects without metadata.namespace."
        }
      ],
      "registrationFamily": "config-yaml-manifests",
      "inputMaxLength": 1000000,
      "inputErrorCode": "CONFIG_YAML_MANIFESTS_TOO_LONG_DIFF",
      "note": "Compares Kubernetes manifests on your device by resource identity. Up to 1,000,000 characters on each side.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "Before manifests",
        "placeholder": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: web",
        "help": "Paste the current manifests. Separate documents with ---. Up to 1,000,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": "# Kubernetes manifest diff\n\n- Human page: https://happytails.ai/en/developer-tools/kubernetes-manifest-diff/\n- Markdown: https://happytails.ai/en/developer-tools/kubernetes-manifest-diff.md\n- Structured JSON: https://happytails.ai/agents/en/developer-tools/kubernetes-manifest-diff/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `kubernetes-manifest-diff` |\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\nCompares Kubernetes manifests on your device by resource identity. Up to 1,000,000 characters on each side.\n\n### Inputs and settings\n\nText input: Before manifests.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: web\n```\n\nPaste the current manifests. Separate documents with ---. Up to 1,000,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `after` | After (changed manifests) | textarea | \"\" |  |\n| `defaultNamespace` | Default namespace | text | \"default\" |  |\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 1,000,000 characters on each side, 100 documents and 5,000 objects per side. Everything runs on your device in a background worker. Downloads: unified diff, JSON report and CSV of changed fields.\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\": \"kubernetes-manifest-diff\",\n  \"category\": \"developer-tools\",\n  \"built\": true,\n  \"requirements\": \"Up to 1,000,000 characters on each side, 100 documents and 5,000 objects per side. Everything runs on your device in a background worker. Downloads: unified diff, JSON report and CSV of changed fields.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"after\",\n        \"label\": \"After (changed manifests)\",\n        \"value\": \"\",\n        \"type\": \"textarea\",\n        \"help\": \"Paste the new version of the manifests. Up to 1,000,000 characters.\"\n      },\n      {\n        \"key\": \"defaultNamespace\",\n        \"label\": \"Default namespace\",\n        \"value\": \"default\",\n        \"type\": \"text\",\n        \"help\": \"Used for namespaced objects without metadata.namespace.\"\n      }\n    ],\n    \"registrationFamily\": \"config-yaml-manifests\",\n    \"inputMaxLength\": 1000000,\n    \"inputErrorCode\": \"CONFIG_YAML_MANIFESTS_TOO_LONG_DIFF\",\n    \"note\": \"Compares Kubernetes manifests on your device by resource identity. Up to 1,000,000 characters on each side.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Before manifests\",\n      \"placeholder\": \"apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n  name: web\",\n      \"help\": \"Paste the current manifests. Separate documents with ---. Up to 1,000,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\nCompare two sets of Kubernetes manifests by resource, see which fields changed with their lines on both sides, and find the changes that start a new rollout.\n\n### How to use Kubernetes manifest diff\n\n1. Paste the current manifests in the main box.\n2. Paste the changed manifests in the After box.\n3. Set the namespace used for objects without one.\n4. Run the comparison and download the diff, JSON report or CSV.\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- [JSON diff](https://happytails.ai/en/developer-tools/json-diff/) ([Markdown](https://happytails.ai/en/developer-tools/json-diff.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- [YAML document splitter](https://happytails.ai/en/data-tools/yaml-document-splitter/) ([Markdown](https://happytails.ai/en/data-tools/yaml-document-splitter.md))\n\n## How resources are matched\n\nHappytails.ai matches objects by API group, kind, namespace and name, so reordering documents or changing the API version does not count as a change. Lists such as containers, env, ports and volumes are matched by their merge key, for example the container name, like kubectl does with strategic merge patches.\n\n### What the output shows\n\nThe unified diff shows each added, removed or changed resource as clean YAML. The JSON report lists every changed field with its line in the before and after text. A change inside a pod template is marked as a rollout, because Deployments, StatefulSets, DaemonSets, ReplicaSets and Jobs start new pods for it.\n\n### Limits\n\nServer-managed fields such as status, managedFields, resourceVersion, uid and the last-applied annotation are ignored. Defaults that the API server would add are not filled in, so a field you omit and a field set to its default show as different.\n"
}