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

JSON Schema Diff

compare two schemas · flags breaking changes · updated 28 July 2026

Compare two JSON Schemas and get a per-path report of what changed — types, required, properties, enum values, and every numeric or string constraint. Each difference is labelled BREAKING or compatible, so a schema change can be reviewed like any other API change.

Paste input to start.

How to compare two JSON Schemas

  1. Paste the current schema on the left and the proposed one in the middle pane.
  2. The report lists every difference with its path, what changed, and whether it breaks existing data.
  3. Tick Show only breaking changes to get a review checklist — that is the list worth arguing about.
  4. Copy the report into your pull request so reviewers can see the impact without reading both schemas.

What counts as breaking

"Breaking" here means: data that validated against the old schema might fail against the new one. That is the producer's risk — a client sending the old shape starts getting rejected.

Read it the other way round if you are the consumer: a widened type is breaking for code that assumed the narrow one. The report gives you the facts; which direction matters depends on which side of the contract you own.

What it does not compare

The diff walks properties, items, required, type, enum, additionalProperties and the standard validation constraints. It does not reason about the combinators — oneOf, anyOf, allOf, if/then, $ref indirection. Deciding whether one union is a subset of another is genuinely hard, and a confident wrong answer would be worse than none.

So: for schemas built mostly from combinators, treat the output as a starting point. Inline your $refs first with Bundle $refs so the diff can see the real structure, and validate real payloads against both schemas with Schema validator as a cross-check.

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

Why is making a field optional flagged compatible?

Because every document that validated before still validates — the constraint got looser. It may well break your consumers, who now have to handle a missing field, but it does not break data validation.

It says no differences, but the files are not identical.

The diff compares meaning, not text. Key order, whitespace, title and description changes do not affect validation. Use JSON diff for a literal structural comparison.

Does it follow $ref?

No — refs are compared as strings. Run both schemas through Bundle $refs first if the interesting structure lives behind references.