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. 2020-122019-09Draft-07Insert sample pairClearJSONC schema (comments + trailing commas) Remote $refs are never fetched JSONC instance (comments + trailing commas) 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. More JSON tools - JSON validator (/json/validator) - JSON to code (/json/codegen) - JSON converter (/json/convert) All JSON tools (/json) Canonical HTML: https://nutter.tools/json/schema/ Markdown version: https://nutter.tools/json/schema/index.md Plain-text version: https://nutter.tools/json/schema/index.txt Agent index: https://nutter.tools/llms.txt