Skip to content

Helm Values Diff

Diff Helm values.yaml for dev, staging and prod side by side as dotted paths, with added, removed and changed keys and which environments set each.

Helm Values Diff

Paste your values.yaml for each environment to see added, removed, and changed keys side-by-side. Pure deep-diff, no chart rendering required.

3 match 10 differ 3 missing
KeyStatusDevStagingProdPresent in
features.experimentalpartialtruetruefalseDev + Staging + Prod
features.newDashboardpartialtruefalsefalseDev + Staging + Prod
image.pullPolicypartial"Always""IfNotPresent""IfNotPresent"Dev + Staging + Prod
image.tagall differ"dev-latest""1.4.2-rc.1""1.4.1"Dev + Staging + Prod
ingress.enabledpartialfalsetruetrueDev + Staging + Prod
replicaCountall differ126Dev + Staging + Prod
resources.limits.cpuall differ"500m""1000m""2000m"Dev + Staging + Prod
resources.limits.memoryall differ"512Mi""1Gi""2Gi"Dev + Staging + Prod
resources.requests.cpuall differ"100m""250m""500m"Dev + Staging + Prod
resources.requests.memoryall differ"128Mi""256Mi""512Mi"Dev + Staging + Prod
Dev merged effective
{
  "replicaCount": 1,
  "image": {
    "repository": "my-app",
    "tag": "dev-latest",
    "pullPolicy": "Always"
  },
  "service": {
    "type": "ClusterIP",
    "port": 8080
  },
  "resources": {
    "limits": {
      "cpu": "500m",
      "memory": "512Mi"
    },
    "requests": {
      "cpu": "100m",
      "memory": "128Mi"
    }
  },
  "ingress": {
    "enabled": false
  },
  "debug": true,
  "features": {
    "experimental": true,
    "newDashboard": true
  }
}
Staging merged effective
{
  "replicaCount": 2,
  "image": {
    "repository": "my-app",
    "tag": "1.4.2-rc.1",
    "pullPolicy": "IfNotPresent"
  },
  "service": {
    "type": "ClusterIP",
    "port": 8080
  },
  "resources": {
    "limits": {
      "cpu": "1000m",
      "memory": "1Gi"
    },
    "requests": {
      "cpu": "250m",
      "memory": "256Mi"
    }
  },
  "ingress": {
    "enabled": true,
    "host": "staging.example.com"
  },
  "debug": true,
  "features": {
    "experimental": true,
    "newDashboard": false
  }
}
Prod merged effective
{
  "replicaCount": 6,
  "image": {
    "repository": "my-app",
    "tag": "1.4.1",
    "pullPolicy": "IfNotPresent"
  },
  "service": {
    "type": "ClusterIP",
    "port": 8080
  },
  "resources": {
    "limits": {
      "cpu": "2000m",
      "memory": "2Gi"
    },
    "requests": {
      "cpu": "500m",
      "memory": "512Mi"
    }
  },
  "ingress": {
    "enabled": true,
    "host": "example.com",
    "tls": true
  },
  "features": {
    "experimental": false,
    "newDashboard": false
  }
}

Updated . Provided as is. Check the output before you rely on it in production.

How to use Helm Values Diff

  1. 1

    Paste each environment

    Drop your dev, staging, and prod values.yaml files into the three editor panes. Each is parsed independently and any YAML errors surface inline so you can fix typos before diffing.

  2. 2

    Read the status badges

    Each key shows match (same in all envs), partial (some envs differ), all differ (every env unique), or missing (key only exists in some envs). Filter the table to focus on what matters.

  3. 3

    Trace override sources

    The Override Source column shows which environments declare a key. A key marked dev + prod but missing in staging is exactly the kind of drift that breaks deploys.

  4. 4

    Inspect merged effective values

    The bottom pane shows the parsed JSON tree per environment so you can spot deeply nested differences the flat diff misses, like a single field changed inside a large block.

  5. 5

    Sync your environments

    Use the diff to drive a values cleanup PR: add missing keys, normalize accidental drift, and document intentional differences in chart README so future you knows what is on purpose.

Questions and answers

What is Helm Values Diff?
A Helm values.yaml supplies the settings a chart renders with, and teams usually keep one per environment, which drift apart. This tool flattens the dev, staging and prod files to dotted paths such as image.tag and lists every added, removed or changed key with its value per environment and the files that declare it.
How does the diff handle nested keys?
All values are flattened to dotted paths (image.tag, resources.limits.cpu) before comparing. This means a deeply nested change is as visible as a top-level key change, with no hierarchy noise.
What does the Override Source column mean?
It lists which environments declare the key. A key declared only in prod is a prod-only override. A key declared in dev and staging but missing in prod often indicates a forgotten promotion.
Does it send my data to a server?
No. Parsing and diffing happen in your browser. Your values files, including any embedded secrets or registry paths, never leave your device.
Can I diff more than three environments?
The current build supports dev, staging, and prod side by side. For ad-hoc diffs of two arbitrary files, leave the third pane empty and ignore the missing markers in that column.
For AI agents: how to call this tool

Machine-readable contract, endpoints and examples. Humans can ignore this section.

Best Path For Builders

Browser workflow

Runs instantly in the browser with private local processing and copy/export-ready output.

Browser Workflow

This tool is optimized for instant in-browser execution with local data handling. Run it here and copy/export the output directly.

/helm-values-diff/

For automation planning, fetch the canonical contract at /api/tool/helm-values-diff.json.