How to use
Paste a YAML document on the left, and the right pane shows Valid or Invalid with a list of every error and warning — each pinned to a line and column. Multi-document files separated by `---` are supported; the panel reports how many documents parsed. Warnings cover non-fatal issues like duplicate map keys that the parser auto-resolves.
This is a syntax validator, not a schema validator. It catches "your YAML is malformed" — wrong indentation, unclosed quotes, mixed tabs, invalid anchor references. It does *not* check "your Kubernetes manifest needs a `metadata.name`" or "your GitHub Actions workflow has an unknown step". For schema validation against k8s, GitHub Actions, or your own JSON Schema, pair this with `kubeval`, `actionlint`, or `ajv`. Everything runs in the browser using the `yaml` parser, so secrets pasted from a config stay on your machine.
FAQ
YAML 1.1 vs 1.2 — which version does this tool use?
The underlying `yaml` package defaults to YAML 1.2. The biggest practical difference: 1.1 treats `yes/no/on/off/y/n/Y/N` and their cases as booleans (the "Norway problem"), 1.2 narrows booleans to `true/false`. 1.2 also fixed the octal literal mess. If your deployment target uses a 1.1 parser (most Ansible runs, older PyYAML), validate locally with both — files that pass here may behave differently there.
Why does it reject my file when the indentation looks right?
The most common cause is mixed tabs and spaces — YAML forbids tabs at indent positions and many editors render tabs as a 4- or 8-space gap that looks identical to indented spaces. Open the file in a hex view or with `cat -A` to spot the `\t` bytes. Other quiet killers: a non-breaking space (U+00A0) pasted from a doc, a stray BOM at the file start, or a control character inside a "plain" scalar.
Does this validate Kubernetes / GitHub Actions schemas too?
No — it validates YAML *syntax* only. Schema rules ("a `Deployment` needs `spec.template.spec.containers`", "a workflow `run:` cannot have a sibling `uses:`") need schema-aware tools: `kubeval` and `kubeconform` for Kubernetes, `actionlint` for GitHub Actions, `ajv-cli` for arbitrary JSON Schema. Run those after this validator passes, since they expect well-formed YAML as input.
My file has multiple resources separated by `---`. Will it parse?
Yes. Multi-document streams are standard YAML and the validator reports the document count. Each document is validated independently — an error in document 2 does not skip document 3. `kubectl apply -f manifest.yaml` accepts the same multi-doc form, which is why most Helm chart outputs and `kustomize build` results look this way.
Why is duplicate keys a warning, not an error?
YAML 1.2 §6.7 says duplicate keys are an error, but most real-world parsers (PyYAML, libyaml, snakeyaml in lenient mode) accept the file and keep the last value silently. The `yaml` library treats it as a recoverable warning to match that real-world behavior — the document still parses, but the warning surfaces the ambiguity so it doesn't hide a bug.
Can I convert valid YAML to JSON here?
Not from this tool — it only validates. For round-trip conversion use the JSON ↔ YAML converter on this site. Note that YAML supports types JSON does not (dates, sets, multi-line strings with preserved newlines, references via anchors); a one-way YAML → JSON pass either drops or stringifies those.
Related concepts
YAML (YAML Ain't Markup Language) is a data serialization language optimized for human editing, designed by Clark Evans, Ingy döt Net, and Oren Ben-Kiki and first released in 2001. The current revision is YAML 1.2.2 (October 2021). The core data model is the same JSON-compatible tree of scalars, sequences, and mappings — anything valid in JSON parses as YAML, but YAML adds indentation-based structure, comments, anchors / aliases, multi-document streams, and richer scalar types.
The surface syntax is what bites people. Indentation must be spaces; tab characters are forbidden at indent positions. Strings can be plain (unquoted), single-quoted (literal except for `''`), double-quoted (with escape sequences), or block (`|` preserves newlines, `>` folds them). Unquoted scalars can be auto-typed to booleans (`true`, `false`), integers, floats, null (`null`, `~`, empty), or strings — leading to the infamous Norway problem in YAML 1.1, where `no`, `false`, `off` all became boolean false. Quoting eliminates ambiguity for any scalar that resembles a typed literal.
Adjacent serializers each cover different ground. **JSON** is YAML 1.2's strict subset, machine-friendly but verbose for human editing. **TOML** targets configuration files with a flatter, less ambiguous syntax — common in Rust's `Cargo.toml` and Python's `pyproject.toml`. **HCL** (HashiCorp Configuration Language) backs Terraform configs with a block-oriented, expression-aware syntax. YAML's niche stays in Kubernetes manifests, GitHub Actions workflows, CI / CD pipelines, and Ansible playbooks where multi-document support, anchors, and human comments are worth the indentation discipline cost.