What this tool does
Paste an old and a new version of a GraphQL SDL schema and get back every difference between them, classified the way the GraphQL ecosystem itself classifies schema changes: breaking (an existing client can start failing), dangerous (safe for most clients, but worth a second look — an enum value or union member added, for example), and safe (a pure addition, like a new type or a new field). The breaking and dangerous checks run through graphql.js's own findBreakingChanges and findDangerousChanges, the same reference logic tools like graphql-inspector and Apollo's schema checks are built on — not a reimplementation of the rules.
Why this matters before shipping a schema change
A GraphQL schema is a contract between a server and every client already built against it. Removing a field, narrowing a type, or adding a required argument can break clients you don't control — mobile apps already in the wild, a partner's integration, a cached persisted query. Catching that before merging is cheaper than finding out from a support ticket.
FAQ
What counts as a "dangerous" change?
Something that doesn't break the contract on its own, but changes behavior a client might not expect: a new enum value that an old client's exhaustive switch doesn't handle, a new type added to a union, a new optional argument, or a default value changing.
Why is a newly required input field reported as breaking, not safe?
Because an existing client sending that input type without the new field will now fail server-side validation — the field being on an input type (something clients send) rather than an output type (something the server returns) is exactly what makes it breaking.
Is my schema uploaded anywhere?
No — everything happens entirely in your browser. Nothing is sent to a server.
Try it yourself
Validating a query against one of these schemas? Try the GraphQL Query Validator. Need the schema tidied up first? GraphQL Formatter reprints it with consistent indentation.