Helm Values Diff, Merge & Convert
Compare two values.yaml files key by key, preview the values Helm will actually use when you layer an override on a chart's defaults, and translate between values.yaml and --set / --set-string flags with correct escaping.
Private by design: anything you enter is processed in your browser only. It is never uploaded to or logged on our servers. Values files are compared and merged in your browser, so credentials in them stay on your device unless you create a share link, which stores the inputs in the link itself.
Keys that exist only on the left are listed as removed. To see what an override file actually produces on top of the defaults, use the Merge tab.
| Key path | Change | Left | Right |
|---|
About Helm values
A Helm chart ships a values.yaml with defaults, and every install or upgrade layers your own values on top: files passed with -f / --values and individual overrides passed with --set. The chart's templates read the combined result through .Values. Most "why didn't my setting apply?" problems come from how that combination works, so this tool shows it explicitly.
Diff compares two values files key by key and lists every added, removed and changed setting by its dotted path, e.g. image.tag or ingress.annotations.cert-manager\.io/cluster-issuer (dots inside a key are escaped, exactly as you would write them for --set). Use it to review an upgrade by diffing the old and new chart defaults, or to see what an environment's override actually changes.
Merge applies Helm's coalescing rules: maps are merged recursively, while lists and scalar values are replaced as a whole. Setting a key to null in an override deletes it from the defaults, which is the documented way to remove a default such as an annotation. The result is what helm get values --all would report for a release installed with these two files, minus any parent-chart or --set layers.
Convert turns a values file into --set flags for CI scripts and back again. It escapes dots in keys and commas in values, writes list items as name[0]=…, and switches to --set-string where plain --set would change a string's type, such as an image tag of "1234" or a label of "true". Pasting a full helm upgrade command into the reverse direction shows the YAML those flags produce. Validate the rendered manifests with the Kubernetes YAML linter, or convert values to JSON for --set-json with the data format converter.
Reference Guide
Value precedence, lowest to highest (later sources win):
| # | Source | Notes |
|---|---|---|
| 1 | Subchart's own values.yaml | Defaults of a dependency chart |
| 2 | Parent chart's values.yaml | Overrides a subchart under its key, e.g. postgresql.auth.database, or via global |
| 3 | -f / --values files | Applied left to right: in -f base.yaml -f prod.yaml, prod wins |
| 4 | --set, --set-string, --set-json, --set-file | Applied after all files, by kind: --set-json, then --set, then --set-string, then --set-file. Repeated flags of the same kind apply left to right, so the last one wins |
On helm upgrade, previous release values are not reused unless you pass --reuse-values (or --reset-then-reuse-values); otherwise the chart defaults plus the values on the current command line are used.
--set syntax:
| Flag | YAML result |
|---|---|
--set name=value | name: value |
--set a=b,c=d | a: b and c: d |
--set outer.inner=value | outer: { inner: value } |
--set name={a,b,c} | name: [a, b, c] (quote the argument in your shell) |
--set servers[0].port=80 | servers: [ { port: 80 } ] |
--set name=value1\,value2 | name: "value1,value2" |
--set 'nodeSelector.kubernetes\.io/role=master' | nodeSelector: { kubernetes.io/role: master } |
--set name=null | Removes name from the defaults |
--set port=8080 / --set debug=true | Integer / boolean. Floats such as 0.5 stay strings |
--set-string tag=1234 | tag: "1234" (always a string) |
--set-json 'resources={"limits":{"memory":"256Mi"}}' | Any JSON value, including floats, {} and [] |
--set-file config=./app.toml | config: set to the file's contents |
In templates, read values as {{ .Values.image.tag }}. For keys with dashes or dots use {{ index .Values.podAnnotations "prometheus.io/scrape" }}.
Useful commands:
helm show values bitnami/nginx > values.yaml: download a chart's defaults to start an override file.helm template my-release ./chart -f values-prod.yaml --set image.tag=1.4.2: render the manifests locally without installing.helm get values my-release: the user-supplied values of a release; add--allfor the full computed values and--revision Nfor an older revision.helm upgrade my-release ./chart -f values-prod.yaml --dry-run=server: see what an upgrade would apply.helm diff upgrade my-release ./chart -f values-prod.yaml: manifest-level diff (requires the helm-diff plugin).
Example input
# values.yaml (chart defaults)
replicaCount: 1
image:
repository: nginx
tag: "1.25.3"
ingress:
enabled: false
annotations:
kubernetes.io/ingress.class: nginx
# values-prod.yaml (override)
replicaCount: 3
image:
tag: "1.27.0"
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: null
cert-manager.io/cluster-issuer: letsencrypt
This sample loads automatically when you open the tool. Use Load Sample to bring it back.
Frequently Asked Questions
Maps are merged key by key, while lists and scalar values are replaced entirely by the later file. A key set to null removes it. Files passed with -f are applied left to right, then --set flags override everything.
Use dots for nesting and brackets for list items, for example --set image.tag=1.2.3 or --set ingress.hosts[0].host=example.com. Escape literal dots or commas in keys with a backslash.
Use it when a value looks like a number or boolean but must stay a string, such as a version 1.10 or a zip code with a leading zero.
Related Tools
All DevOps Tools →Log Analyzer
Parse Nginx/Apache access logs, JSON logs and plain applicat...
SLA & Uptime Calculator
Convert an SLA percentage such as 99.9% into allowed downtim...
Throughput Estimator
Estimate requests per second, peak load, bandwidth and the n...
JavaScript Beautifier & Formatter Online
Beautify and unminify JavaScript code online. Fix JS indenta...
JSON Beautifier & Pretty Printer Online
Prettify and format JSON data online with configurable inden...
XML Beautifier & Formatter Online
Format and prettify XML documents online with proper indenta...