How to use
Paste the old definition on the left and the new one on the right, or open files with “Open file” (YAML or JSON; OpenAPI 3.0 or 3.1; Swagger 2.0). “Try a sample” also works.
Press “Compare” (or Ctrl / ⌘ + Enter). The counts for breaking, caution and non-breaking changes and a one-line verdict appear. If there is a breaking change, the verdict is equivalent to exit code 1.
Filter the list by level. Each row shows the path, method, location, detail and the reason for its level. The rules are listed below the results.
Use “Copy Markdown” to paste a table into a pull request description, or “Save JSON” to keep the verdict, counts and changes in a form a program can read.
What it does
Sorts breaking changes
Removed paths and operations, newly required fields, type changes and removed response properties are grouped as breaking. Caution and non-breaking changes are shown separately.
A reason on every row
Each row says, in English, which rule put it in its level. The full rule list is on the page, so the basis of a verdict can be used directly in a review.
Resolves $ref before comparing
Follows $ref inside the same definition (#/components/... or #/definitions/...) and compares the schema contents. A circular definition still stops.
Markdown and JSON export
Save a Markdown table for a pull request, or JSON that a program can read. The verdict is also shown as one line, like an exit code.
Runs only in your browser
The definitions are compared in a Web Worker inside your browser. Nothing is sent, and external $ref values are not fetched.
Use cases
- Check whether an API revision breaks existing clients before opening a pull request
- Find added required fields and removed paths before a review
- Compare internal API definitions without sending them outside
- Get just the one-line verdict on whether a change is breaking
Supported formats
Input
Output
Capability matrix
| Feature | Support | Notes |
|---|---|---|
| Comparing two OpenAPI 3.0, 3.1 or Swagger 2.0 definitions | Supported | — |
| Added and removed paths and operations | Supported | — |
| Parameter changes: required, removed, location (in), type, format and enum | Supported | — |
| Request and response schemas: properties, types, required and enum | Supported | Nesting is followed to depth 12. Deeper parts are not compared and are noted |
| $ref inside the same definition (#/components/... and #/definitions/...) | Supported | — |
| Fetching $ref in other files or at URLs | Not supported | Nothing is fetched, because the tool does not connect to the network. They are shown as unresolved |
| Impact on real clients (which callers would break) | Not supported | Actual usage is unknown, so the verdict follows general compatibility practice |
| Changing the verdict to match an API policy | Not supported | The rules can be read on the page, but there is no setting that changes the levels |
| Mixed comparison of Swagger 2.0 and OpenAPI 3.x | Partial | Only matching items are compared. A change that cannot be matched may not appear in the verdict |
| Per-candidate judgement of oneOf and anyOf | Partial | Only the addition or removal of candidates is shown, as caution |
| Calling the API to check its real behaviour | Not supported | — |
| Offline use | Supported | Works without a connection once the page has loaded |
Limits & notes
- Up to 2 million characters and 3,000 operations per definition. Files up to 5 MB.
- Up to 1,000 changes are listed and exported. The counts cover every change.
- Schemas are followed to depth 12, and up to 20,000 schema comparisons are made. The rest is not compared and is noted.
- When comparing Swagger 2.0 with OpenAPI 3.x, some matching items may not be found.
- The verdict follows general compatibility practice. Each API may have its own policy.
Privacy & safety
Definitions are compared only inside your browser. Nothing is sent or stored, and external $ref values are not fetched. Closing the page discards the content. Analytics only record that a run happened, with no content or counts.
FAQ
What is a breaking change in OpenAPI?
Is the breaking verdict accurate?
Can it compare Swagger 2.0 with OpenAPI 3.0?
Are $ref values in other files compared?
How do I paste the result into a pull request?
Related tools
OpenAPI Studio — Viewer & Validator
Paste an OpenAPI 3.0 / 3.1 or Swagger 2.0 definition to browse endpoints by tag and schemas as trees, and to check it against the official schemas with line and column. It never calls the API or fetches external files, and nothing leaves your device.
Diff Tool — Text & Code Compare
Paste or drop two versions and see added and removed lines, plus the exact words that changed inside each line. Copy or save the result as a unified patch. Nothing leaves your browser.
JSON Studio — Formatter & Validator
Paste JSON to format, minify or validate it instantly. Errors are shown with the exact line, column and cause, and comments or trailing commas can be auto-repaired. Your data never leaves your device.
UUID / ULID / NanoID / Token Generator
A UUID is ready the moment the page opens. Switch to UUID v7, ULID, NanoID or a random token, generate up to 10,000 at once and save them as .txt, .csv or .json. Paste an existing UUID or ULID to read its embedded time and version.
Regex Tester
Type a pattern and matches light up in the test string instantly. Capture groups, replacement output and what each part of the pattern means are all on one screen — and patterns that would freeze your browser are stopped after one second.
Code Formatter — Format & Minify
Paste code to format it with the language auto-detected. Choose indent, line width, semicolons, quotes and trailing commas; JavaScript, CSS and HTML can also be minified with before/after size and reduction. Your code never leaves the browser.
Last updated: