JSON Schema Diff
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.
How to compare two JSON Schemas
- Paste the current schema on the left and the proposed one in the middle pane.
- The report lists every difference with its path, what changed, and whether it breaks existing data.
- Tick Show only breaking changes to get a review checklist — that is the list worth arguing about.
- 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.
- Breaking — removing a property; adding a required property; narrowing a type; introducing an
enum; removing enum values; tightening a bound (maxLengthdown,minimumup); adding a constraint that was absent; settingadditionalProperties: false. - Compatible — adding an optional property; making a required property optional; widening a type; adding enum values; loosening a bound; removing a constraint.
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.