Skip to main content
CuteJSON
↑↓ Navigate Enter Select Esc Close

JSON Schema Diff

Compare two JSON Schemas and see exactly what changed, with every change marked breaking or not.

Back to all tools

Keyboard shortcuts

These work wherever the matching action exists on this page.

Open the command palette
Ctrl/Cmd + K
Run the main action
Ctrl/Cmd + Enter
Format
Ctrl/Cmd + Shift + F
Minify
Ctrl/Cmd + Shift + M
Copy output
Ctrl/Cmd + Shift + C
Open file
Ctrl/Cmd + Shift + O
Download output
Ctrl/Cmd + S
Close this dialog
Esc
Open this dialog
F1 / ?

Local data

Everything below is stored only in this browser, on this device. None of it is ever sent anywhere, and closing this dialog is not required for that to stay true.

Unsaved drafts
Tools with remembered options

Recently opened files

    No files opened yet on this device.

    Share via link

    The content is packed into the part of the link after the # sign, which browsers never send to a server. Nothing here is uploaded to cutejson.com or anywhere else.

    Shares the first input on this page. On a tool with more than one, only that one is included.

    Nothing to share yet. Paste or type something first.

    Old schema

    Load from a URL

    Fetches the URL directly from your browser and loads whatever text it returns into this pane.

    New schema

    Load from a URL

    Fetches the URL directly from your browser and loads whatever text it returns into this pane.

    Changes

    Paste two schemas and press Compare.

      Runs entirely in your browser. Nothing you paste is uploaded, and you can confirm that in your browser Network tab.

      About this tool

      This is not the JSON Diff tool: that one compares two documents by value. This compares two schemas by what they would accept, so every change also says whether it is breaking, meaning a document that satisfied the old schema could now fail the new one. A property added to the schema is not breaking on its own, since existing data simply does not have it yet; a property removed is breaking only when the new schema also sets additionalProperties to false, since only then does carrying that property become a rejection. A field becoming required is breaking, since existing data may not have it; a field no longer required is not. A type narrowing, like a change from number to integer, is breaking; a type widening, like integer to number, is not, and that one subtype relationship is the only one this tool knows among the JSON Schema primitive types. An enum value removed is breaking, since data using it now fails; a value added is not. A tightened bound, a lower maximum or a higher minimum, is breaking; a loosened one is not. A pattern change is always treated as breaking, since comparing two regular expressions for which accepts more is not attempted, and treating an unknown effect as safe would be the wrong default. The subset covered is deliberately the one the site's own Schema Generator writes and the Schema Validator applies: schema-valued additionalProperties, tuple-form items, combinators and $ref are not walked into.

      How to use

      1. Paste the old schema into the left pane and the new one into the right, or load the sample.
      2. Press Compare.
      3. Read the breaking changes first: the summary line counts them separately, and the filter chips isolate just those rows.