jsontoolskit.org
JSON and JSON Schema utilities, in the browser
Say hi →

Migrate JSON Schema Draft

draft-04 / 06 / 07 → 2020-12 · with a change log · updated 28 July 2026

Upgrade an older JSON Schema to draft 2020-12. definitions becomes $defs with $refs repointed, boolean exclusiveMinimum becomes numeric, tuple items arrays become prefixItems, and dependencies splits into dependentRequired and dependentSchemas. Every change is listed in the status bar.

Paste input to start.

How to migrate a JSON Schema to draft 2020-12

  1. Paste your existing schema. The declared $schema is reported so you can confirm what you started from.
  2. Pick the target draft — 2020-12 unless a tool in your stack is pinned to 2019-09.
  3. Read the change list in the status bar. Every rewrite is named with the path it happened at.
  4. Validate a known-good document against the migrated schema with Schema validator before replacing the original.
  5. Copy or download the migrated schema.

Every rewrite it performs

What you still have to check by hand

Two 2020-12 changes are behavioural rather than syntactic, so no tool can fix them for you:

Test with real documents. A migrated schema that parses is not necessarily a schema that means the same thing.

Privacy

Nothing is uploaded. The conversion runs in this tab using your own browser's JavaScript engine — no server sees your data, and the page keeps working with the network disconnected.

FAQ

Can it migrate downwards, 2020-12 to draft-07?

No. Downgrading loses expressiveness — there is no draft-07 equivalent for prefixItems with a separate items, or for the unevaluated keywords. If a tool needs draft-07, keep a hand-maintained version.

Which validators support 2020-12?

Ajv 8 (with the 2020 entry point), python-jsonschema 4+, and most actively maintained libraries. Ajv 6 and older are draft-07 only. Our Schema validator handles 04 through 2020-12.

Does it change my validation logic?

It aims not to, and every rewrite it makes is a like-for-like translation. The two behavioural changes above are the exception, which is why they are called out rather than silently patched.