Everything runs in your browser. We never see your config. How we prove it →
YAML Diff — Compare YAML Files Online
Drop two configs in. Anchors are expanded, indentation is understood, and the answer comes back as a list of keys that actually moved.
How YAML files are compared here
Two YAML files can look nothing alike and still mean the same thing. An anchor declared as `&defaults`, referenced later with `*defaults` or folded in through a merge key `<<:`, is expanded while the document loads — so a manifest that spells out every field and one that hides half of them behind an alias resolve to the same tree, and no difference is reported. Indentation is not decoration here: two spaces against four changes nothing, but shifting a block one level in or out re-parents it, and that counts as a structural edit. Quoting has its own trap. Under YAML 1.1 the bare words `yes`, `no`, `on` and `off` load as booleans, so rewriting `enabled: no` to `enabled: "no"` turns a boolean into a string — the comparison names that type change rather than showing you two extra quote marks.
Once loaded, each side becomes a tree and the two are walked key by key, giving entries addressed like `$.spec.template.spec.containers[0].image`. Documents separated by `---` are treated as a sequence and compared in order. Reordered mapping keys never register, because the canonical view underneath re-emits both files with stable ordering and uniform indentation before any line diff runs. All of it executes in a Web Worker on your machine, and a tab character where YAML forbids one drops you to a text comparison with a notice instead of throwing. For the flat `KEY=value` files that usually live alongside these configs, Env File Diff fits better.
Configs and secrets never leave the tab
A Kubernetes Secret is base64, not encryption. Paste one into a hosted comparison service and you have handed over a database password in a form anyone can decode in a second — the same goes for CI files holding deploy tokens, registry credentials or a cloud role ARN that maps your whole account layout. Nothing here travels: the loader, the comparator and the renderer are JavaScript in your browser, there is no ingestion endpoint, no sign-in, and no record of the session afterwards. Open your browser's network tab while you use this tool — you'll see no request carries your content. Check it against our published method.
Typical config comparisons
- A platform engineer promoting a Helm release sets the staging values file against production before running the upgrade, and confirms that only `$.resources.limits.memory` and the replica count differ between environments — no stray image tag left over from a hotfix.
- An SRE reconstructing a bad rollout saves the live deployment YAML, applies the change, saves it again, and reads the two side by side. Cluster-injected defaults sit at stable keys, so the one field the controller actually mutated is obvious on sight.
- A build engineer reviewing a dependency bot checks what a pull request did to a workflow file. Reindented job blocks produce no noise, leaving the added `permissions:` entry as the only real finding.
- A consultant taking over an Ansible tree compares group variables for two customer sites to learn which settings are genuinely site-specific and which were copied wholesale from the first deployment years ago and never revisited.
Frequently asked questions
Are anchors and aliases expanded before comparing?
Yes. Aliases, anchors and merge keys are resolved as the document loads, so the comparison sees the finished value at every key. A file refactored to share a block through `&common` shows no differences against the verbose original, which is usually the confirmation you wanted.
Does changing indentation width count as a change?
No. Reformatting from two-space to four-space nesting leaves the loaded tree identical, so the change list stays empty. What does count is moving a key to a different depth, because that changes its parent. Comment lines are also dropped by the loader; if comments matter to your review, read the text view underneath.
Is there a size limit on the files?
Live comparison runs to about 1 MB combined, after which you trigger it manually. Files up to roughly 10 MB a side are fine, 50 MB is the absolute ceiling. A hundred small manifests in one stream behave like one large document.
Can I safely paste a manifest containing secrets?
Nothing you paste is transmitted, stored or logged, because there is no backend to receive it. Sharing is the one thing to watch: a share link packs the inputs into the URL fragment, which your browser never sends to a server but which anyone holding the link can read. Treat a share link like the secret itself.
Will it validate my YAML against a schema?
No — this compares two documents, it does not judge either against a CRD or a JSON Schema. It will tell you when a file cannot be parsed at all, and where, which catches the ordinary failures: a tab, a stray colon inside an unquoted string, or a list item indented under the wrong parent.
Related tools
- JSON DiffThe structural comparator applied to API bodies and JSON config.
- ENV File DiffDotenv files lined up variable by variable, order and comments ignored.
- XML DiffTag trees compared with namespaces resolved and attributes normalized.
- Text CompareStraight line-by-line text comparison for anything without structure.