Validate YAML against JSON Schema

Attach a local schema or a bundled pack. Before running you see which keywords the engine actually evaluates; afterwards every error points to the exact YAML node — even through aliases.

true/false only are booleans; 0o17 is octal; yes/no/on/off are strings.

503 chars · 31 lines · rev 1Not saved yet

Tab inserts two spaces (press Esc then Tab to leave the editor). Drop a file to open it. Positions are line:column in UTF-16 code units.

Paste YAML or open a file to validate

rev 1 · YAML 1.2 · core schema · Kubernetes Deployment apps/v1 (subset) v0.1.0

  1. —

  2. —

  3. No schema selected

  4. —

Kubernetes Deployment apps/v1 (subset) v0.1.0, 2026-10-30. Self-authored from the public Kubernetes API reference, Oct 2026. Not generated from the OpenAPI spec. Scope: apiVersion apps/v1, kind Deployment, metadata.name (DNS-1123 subdomain), spec.selector.matchLabels, spec.template with labels and at least one container (name + image), container ports 1–65535, replicas ≥ 0. Exclusions.

YAML → JSON projection

Always stopped, never altered: .nan/.inf, cyclic aliases, complex keys, keys that collide after projection.

Capability report (computed before running)

Dialect
2020-12 supported
Keywords used
$defs$id$ref$schemaadditionalPropertiesconstenumitemsmaxLengthmaximumminItemsminLengthminimumpatternpropertiesrequiredtitletype
References
2 of 2 resolved locally
Supported vocabulary (published)

Evaluated: $ref, $recursiveRef, $recursiveAnchor, type, const, enum, required, not, anyOf, allOf, oneOf, if, then, else, format, properties, patternProperties, additionalProperties, unevaluatedProperties, minProperties, maxProperties, propertyNames, dependentRequired, dependentSchemas, dependencies, prefixItems, items, additionalItems, unevaluatedItems, contains, minContains, maxContains, minItems, maxItems, uniqueItems, minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, minLength, maxLength, pattern.

Understood annotations/identifiers: $schema, $id, id, $anchor, $defs, definitions, $comment, $vocabulary, title, description, default, examples, deprecated, readOnly, writeOnly, contentEncoding, contentMediaType, contentSchema.

Not evaluated (result becomes incomplete): $dynamicRef, $dynamicAnchor; any unknown keyword when the strict option is on.

Formats asserted: date, time, date-time, duration, uri, uri-reference, uri-template, url, email, hostname, ipv4, ipv6, regex, uuid, json-pointer, json-pointer-uri-fragment, relative-json-pointer. Regular expressions use ECMAScript with the u flag, not ECMA-262-with-PCRE extensions.

Engine: @cfworker/json-schema 4.1.3 (interpreter; no eval or code generation). Dialects: 2020-12, 2019-09, draft-07, draft-06 (via draft-07 rules), draft-04.

From YAML to JSON, without silent loss

JSON Schema validates JSON values, so YAML must be projected first. ValidateYAML makes every lossy step explicit: non-string keys (200: OK) are either converted to strings with a recorded mapping or the layer stops; .nan/.inf, cyclic aliases, complex keys and colliding keys stop the schema layer for that document instead of validating altered data.

Merge keys (<<) are applied only when your profile enables them. Findings reached through an alias point at the alias and link to the anchor that defines the value.

Honest capability report

The engine (@cfworker/json-schema, an interpreter with no eval) evaluates the standard assertion vocabularies. $dynamicRef/$dynamicAnchor are not evaluated, so any schema using them yields “incomplete”. Unknown keywords (often typos such as “requried”) are listed with suggestions and, by default, also make the result incomplete.

Questions

Can I validate a docker-compose or GitHub Actions file?

Yes, with the bundled packs. They are small, self-authored subsets (version 0.1.0, dated 30 Oct 2026) — not the official schemas — and their coverage and exclusions are listed on the Offline packs page. Passing a pack does not mean Docker or GitHub will accept the file.

What happens with $ref to a URL?

Nothing is fetched. The schema layer shows “not run: reference unresolved” with the exact URIs, and you can map each one to a schema you paste or open locally.

Is format (email, date-time, uri) checked?

The engine asserts the formats it implements (date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, url, uuid, regex, json-pointer, relative-json-pointer). Other format values are listed as not asserted.