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.
Remote $refs are never fetched
Strict JSON
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.