Does YAML's whitespace-sensitivity help or hurt the diff?
YAML is whitespace-sensitive, so a regular text diff is already useful: any indentation change is a structural change, and the diff catches it. The difference is presentation. The YAML mode highlights anchors, tags, block scalars, and flow collections with syntax colours, so you can tell at a glance whether a change is to a key, a string value, or a list item. The underlying diff algorithm is the same as our text diff tool.
Why is YAML so picky about indentation and spaces?
Because indentation is the only thing telling the parser which keys belong to which mapping. The YAML 1.2.2 spec defines the indentation level of a node by the count of leading spaces, and forbids tabs as indentation. A single extra space promotes a key into a sub-mapping. That strictness is the price for a format that does not need braces or commas, and it is why you see indentation bugs more often in YAML than in JSON.
What is the Norway problem?
YAML 1.1 implicit typing turns the unquoted token NO into the boolean false. So a list of country codes that includes NO for Norway silently becomes a list with one entry replaced by false. The same applies to YES, ON, OFF, and similar. StrictYAML documents this in detail. The fix is to quote the value ("NO") or use a parser that follows YAML 1.2, which only converts true, false, and null implicitly.
How do anchors, aliases and merge keys work?
An anchor (&name) marks a node so you can reference it later with an alias (*name), avoiding repetition in long files. The merge key (<<: *name) was a YAML 1.1 extension that copies all keys from the referenced mapping into the current one, useful for sharing common config across services. Merge keys are not part of YAML 1.2, but most parsers including js-yaml still support them for compatibility. The diff treats anchors and aliases as plain text, so a renamed anchor shows up cleanly.
Can I paste JSON into the YAML diff tool?
Yes. JSON is a strict subset of YAML 1.2, so any valid JSON document is also a valid YAML document. You can mix the two if you really want to, dropping a JSON-style flow collection into a block-style file. For pure JSON work, our JSON diff tool has format and validate buttons that are JSON-aware, including pretty-print and sort-keys.
Why does the parser reject my file when I use tabs?
Because the YAML spec forbids tabs as indentation. From the 1.2.2 spec: "To maintain portability, tab characters must not be used in indentation." Tabs are allowed inside scalar values (a string can contain a tab), just not at the start of a line where indentation is being measured. The fix is a quick find-and-replace from tab to two or four spaces, depending on the convention your file already uses.
Does this expand YAML anchors when comparing two files?
No. The diff is text-level, so an anchor like &base on one side and the inlined-equivalent mapping on the other will diff as different text even though a YAML parser would resolve both to the same node. The same applies to a *base alias versus its expanded form. If that's the comparison you actually want, pre-resolve anchors before pasting: pipe through yq with yq 'explode(.)' to expand anchors, or run the file through yq -P for canonical pretty-print on both sides.
How does this handle multi-document YAML with multiple --- separators?
Each --- starts a new document in the stream, per the YAML 1.2.2 spec. The diff sees the whole stream as one blob, so reordering documents will look like a wholesale change even when the set of objects is identical. This bites with Helm output, Kustomize builds, and Kubernetes kubectl apply -f bundles. The pragmatic move is to split on ---, sort the document blocks, and diff each pair separately, or run yq ea '[.] | sort_by(.kind, .metadata.name)' across all docs to canonicalise order before pasting.
Why does this flag explicit type tags (!!str, !!int) as different from implicit values?
Because the diff is text-level and value: no is not the same string as value: !!str no, even if a parser would treat them identically in some cases. The semantics also depend on YAML version. YAML 1.1 implicit typing turns no into false and country code NO into the boolean false: the Norway Problem. YAML 1.2 narrowed implicit booleans to just true and false. If you're comparing files round-tripped through Ruby psych (1.1 by default) and PyYAML's yaml.safe_load (1.2 via current libyaml), normalise both sides to explicit tags first and the surprise diffs go away.
Is it free, and do I need to sign up?
Yes, and no. It is free with no account, no trial, and no limit on how many files you compare. Paste your two YAML documents and the diff shows up right away. Nothing is gated behind a login, and the copy and download buttons on each pane give you clean output with no watermark or trailing junk added to your manifests.
How is this different from other online YAML diff tools?
The comparison runs entirely in your browser, so your YAML is never uploaded. Plenty of online diff tools POST it to a server first, which is a real concern for manifests holding secret refs or internal hostnames. The highlighting is character-level rather than whole-line, so a single flipped boolean or a one-space indentation change shows up exactly, instead of marking the whole line as changed.
Can it compare two YAML files I upload?
Yes. Click Upload on either pane to load a .yaml or .yml file straight from disk, rather than pasting. You can upload one side and paste the other, or upload both. Files are read locally in the browser and never sent anywhere. Since indentation is significant in YAML, uploading keeps the original spacing intact instead of risking a paste that mangles tabs.
Can I compare more than two YAML files at once?
Not in a single view. It is built for two sides, original and changed, which matches how manifests move through a pipeline. If you have three or more versions, compare them in pairs: v1 against v2, then v2 against v3. For multi-document YAML with several --- separators inside one file, the diff reads the whole stream as one blob, so split and sort the documents first if order is noise.
Is it safe to paste sensitive YAML like Kubernetes secrets or config?
It is safer than most tools, because nothing leaves your machine. The editor, syntax highlighter, and diff all run locally, with no upload, no logging of your input, and no cloud round-trip. You can confirm it yourself: open DevTools and watch the Network tab while you compare. That said, base64 values in a Secret are not encrypted, so use the same care you would with any plaintext.