
diffyml (v1.6.2, 51★, Go, MIT) replaces the noisy line-by-line output of `kubectl diff` with structured, key-path-grouped YAML comparisons. It identifies Kubernetes resources by identity (apiVersion + kind + metadata.name), detects renames, and fits natively into KUBECTL_EXTERNAL_DIFF — making it a one-export-away upgrade for any cluster change review workflow.
kubectl diff -f updated.yaml to check what's changing. What you get back is a wall of + and - lines — same as git diff, but on serialized YAML. Two list entries swapped? The diff shows thirty lines of churn. A key was renamed and the value stayed the same? Good luck spotting it.diffyml takes a different approach: it parses both YAML files as trees, matches nodes by key path, and reports changes by what moved rather than where lines fell. 1 The output is a flat list of semantic changes — spec.replicas: 2 → 3, spec.template.spec.containers.web-api.image: 1.4.2 → 2.0.0 — not a line-by-line text patch. For Kubernetes manifests specifically, it identifies resources by apiVersion + kind + metadata.name and can detect renames when two resources share more than 60% of their content. 1gopkg.in/yaml.v3) and uses the Go standard library for everything else. 3brew install szhekpisov/diffyml/diffymlgo install github.com/szhekpisov/diffyml@latestcurl -sSfL https://raw.githubusercontent.com/szhekpisov/diffyml/main/install.sh | shdocker run --rm -v $(pwd):/work ghcr.io/szhekpisov/diffyml:latest old.yaml new.yamlgo build. All paths produce the same single static binary.kubectl applydiffyml at the two files directly:diffyml current-deployment.yaml updated-deployment.yamlspec.replicas (apps/v1/Deployment/production/web-api)
± value change
- 2
+ 3
spec.template.spec.containers.web-api.image (apps/v1/Deployment/production/web-api)
± value change
- registry.example.com/web-api:1.4.2
+ registry.example.com/web-api:2.0.0
spec.template.spec.containers.web-api.env (apps/v1/Deployment/production/web-api)
+ one list entry added:
- name: ENABLE_METRICS
value: truediffyml directly into kubectl as an external diff driver:export KUBECTL_EXTERNAL_DIFF="diffyml --omit-header --set-exit-code"
kubectl diff -f updated-deployment.yamlkubectl diff uses diffyml's output format instead of the default unified diff. The --set-exit-code flag makes it exit non-zero when differences are found, so it plays cleanly with CI pipelines that gate on kubectl diff.
kubectl diff with KUBECTL_EXTERNAL_DIFF="diffyml --omit-header --set-exit-code"1diffyml ./old-configs/ ./new-configs/) and on remote URLs, so comparing a local override against a fetched upstream chart is a one-liner.gopkg.in/yaml.v3 plus Go's standard library — no SDK sprawl, easy to audit. 3 The author's framing in the README is accurate: "One dependency, zero surprises." 1detailed, compact, brief, json, and three CI-native formats: github (GitHub Actions annotations), gitlab, and gitea. Pass --format github and the diff lands in the Annotations panel of your Actions run, not buried in logs. 1--ignore-api-version flag lets you diff across extensions/v1beta1 → apps/v1 migrations without false positives on the apiVersion field itself. 1--summary, requires ANTHROPIC_API_KEY) is fully optional. If the API call fails, the tool prints a warning to stderr and returns the normal diff output — exit code unaffected. 4dyff on files between 5K and 50K lines. 1 The methodology document (PERFORMANCE.md) was not accessible during research, so that number can't be independently verified at this time.dyff is the obvious comparison. dyff (humio/dyff) is the incumbent Go-based YAML diff tool with a larger community. If you're already using it and it's working, diffyml offers Kubernetes-aware resource matching and CI output formats as concrete reasons to switch — not just a different implementation of the same idea. If you're starting fresh, diffyml's install story is marginally simpler.brew install szhekpisov/diffyml/diffyml or go install github.com/szhekpisov/diffyml@latestgithub.com
terminaltrove.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.