Running on your device · 0 bytes uploaded 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. Nothing in yet 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. Next door in JSON - 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