Start a project

Tool 125 of 194 · APIs

OpenAPI Linter and Breaking Change Diff

Paste the old and new versions of your OpenAPI spec and see which changes would break existing clients, before you ship them.

OpenAPI Linter and Breaking Change Diff at a glanceIllustration: 1, Two specs; 2, processed in your browser; 3, Breaking changes.OpenAPI Linter and Breaking Change DiffGET/ordersPOST/orders1Two specs−++3Breaking changes2In yourbrowser
1 Two specs 2 processed on your device 3 Breaking changes

OpenAPI Linter and Breaking Change Diff

Two versions of your API

    What changed for clients

    SeverityWhereChange

    Changelog

    Changelog (Markdown)

    Changes by severity

    Lint: the new spec

    LevelWhereIssue

    01

    What it does

    Compares two versions of an OpenAPI spec, sorts every change into breaking, to check and safe, lints the new spec and writes a changelog.

    • OpenAPI 3.0, 3.1 and Swagger 2.0, in YAML or JSON
    • Endpoints matched even when a path parameter is renamed
    • Direction-aware rules: requests may only get looser, responses only stricter
    • Parameters, request bodies, responses, enums, types, limits and required fields

    02

    Private by design

    Everything happens in your browser. Nothing you type, paste or upload is sent anywhere, and it keeps working offline once the page has loaded.

    03

    What you get

    Breaking changes, lint findings and a Markdown changelog, with a Copy and a Download button on every result.

    • OpenAPI
    • Swagger
    • APIs
    • Versioning

    Why it matters

    Most API breakages aren't deliberate. Someone tightens a maximum, adds a required field, drops a property nobody seemed to use or adds a new enum value, and a mobile app that can't be updated overnight starts failing. Whether a change breaks clients depends on which way the data flows: a new required field is fine in a response but breaks every client in a request; a new enum value is harmless in a request but can crash a client that switches on it in a response.

    This tool reads both specs, matches endpoints by method and path (so renaming {id} to {productId} isn't a removal), and walks every parameter, request body and response schema, following $refs, with those direction rules. Each change is marked breaking, to check or safe, with the reason. It also lints the new spec with the same rules as the OpenAPI viewer, validates its examples against their schemas, checks the version number says what the changes say, and writes a changelog you can paste into a pull request. Nothing is uploaded.

    How it works

    1. InputThe old and new OpenAPI specs
    2. In your browserRequests and responses compared in the right direction
    3. OutputBreaking changes, lint and a changelog

    Where it fits in a designer's workflow

    1. Plan
    2. Design
    3. Build
    4. Test
    5. Launch
    Releasing an API change without breaking clients.

    By the numbers

    Changes between the two sample spec versionsBreaking: 9 changes; To check: 4 changes; Non-breaking: 4 changesBreaking9 changesTo check4 changesNon-breaking4 changes
    Sorted by this tool from its sample specs (a minor version bump, 1.4.0 to 1.5.0): 17 changes, 9 of them breaking, which under semantic versioning calls for 2.0.0. Lint found 3 issues in the new spec, including its one example failing its schema check. Source: OpenAPI Specification 3.1; Semantic Versioning 2.0.0.
    Show the numbers as a table
    SeverityChanges
    Breaking9
    To check4
    Non-breaking4

    How to use it

    1. Paste the spec as it is now (old) and the version you're about to ship (new).
    2. Read the breaking changes first, then the ones to check.
    3. Fix the lint errors in the new spec, starting with examples that don't match.
    4. Copy or download the Markdown changelog for your release notes or pull request.

    FAQ

    What counts as a breaking change?

    Anything that can make a request that worked before fail, or a response a client relied on look different: removed endpoints, new required parameters or fields, tighter limits on what clients send, removed enum values in requests, and removed or no-longer-guaranteed fields or changed types in responses.

    Why is a new enum value only a warning?

    In a response it's a change clients may not handle: code that switches on status and has no default branch will fail on refunded. Many APIs document that new values can appear, so it's flagged to check rather than as breaking.

    Why isn't renaming a path parameter breaking?

    Clients only see the URL, not the parameter's name in the spec, so /products/{id} and /products/{productId} are the same endpoint. Generated client code can change, so check your SDKs.

    Does it follow $refs?

    Yes, local references (#/components/... and #/definitions/...), including recursive schemas. External files aren't fetched; bundle the spec first.

    How does this compare with oasdiff or openapi-diff?

    It covers the common rules those command-line tools check, without installing anything, and explains each one in plain English. For CI, a command-line tool is still the right choice.

    Work with me

    Want a site that gets these right?

    I build fast, accessible websites and web apps that pass these checks from day one. Tell me about your project and I'll reply personally with honest next steps.

    All developer tools · Back to leej.uk