Your files stay on your device

Validate JSON against a JSON Schema

Paste a schema and a document. Ajv compiles the schema in a disposable worker (drafts 2020-12, 2019-09, and draft-07), and nothing is ever fetched to resolve a reference. Every surprise in your input is reported, never silent.

Schema in
Paste a JSON Schema
Instance in
Paste the JSON document to validate

Paste both sides: the schema and the document. The rules panel below states every mapping before anything runs.

Paste, drop, or type to begin. Everything stays on this device.

How draft 2020-12 validates

Draft 2020-12 rules (Ajv2020)

  • Arrays validate per item: prefixItems applies by position, then items applies to the rest of the array.
  • $dynamicRef/$dynamicAnchor resolve recursively; $defs is the canonical definitions home (definitions still reads).
  • items alone (no prefixItems) applies to every element; items: false means no extra elements.
  • Unevaluated properties/items account for everything adjacent keywords already validated.

Rules for every draft

  • Numbers validate as IEEE-754 doubles: a spelling that does not round-trip (1e400, 30-digit integers) is flagged as a note, never silently trusted.
  • Remote references ($ref to another document) are NEVER fetched; inline the schema or use $defs. Compilation happens in a disposable worker that is terminated on timeout.
  • Standard formats (date-time, email, uuid…) validate through ajv-formats; an unknown format is a compile error, not a pass.
  • Duplicate keys follow the family rule: last value wins, and the run reports it.

A `$schema` declaration in the schema overrides the draft selector: the run says which draft it used and why. Compilation happens in a disposable worker that is terminated on timeout, so a hostile schema cannot outlive its own run.