GraphQL Schema Check and Breaking Changes

Paste a GraphQL SDL schema (schema.graphql) to list its types, fields and arguments, with issues such as undefined types by line number. Paste an old and a new schema to see breaking change candidates, such as removed fields or newly required arguments, apart from safe changes. Nothing leaves your browser.

On-device・No uploadMobile friendlyWorks offline

Your files and input are processed only inside your browser on this device and are never uploaded to our servers.

Before (old schema)
0 / 300,000
After (new schema)
0 / 300,000
Up to 300,000 characters per SDL. Press Ctrl (⌘) + Enter to compare.
Paste an SDL and press “Check schema” or “Compare” to see the result here.
Rules
  • Breaking change candidate A change that may stop existing clients from working as before (a candidate).
  • Safe change A change that existing clients keep working with.

How to use

  1. Paste the old SDL in “Before (old schema)” and the new one in “After (new schema)”, or open a schema.graphql file with “Open file”. “Try a sample” also works.

  2. To check a single schema, press “Check schema” (it reads the left pane). To compare two, press “Compare” (or Ctrl / ⌘ + Enter).

  3. The check shows the list of types, the tree of types reachable from the roots, and issues with line numbers. The comparison shows the breaking change candidates and the safe changes.

  4. Use “Copy Markdown” to paste a table into a pull request description, or “Save JSON” to keep the verdict, counts and changes.

What it does

Type list and tree from the roots

Reads type, interface, union, enum, input, scalar, schema and extend, and shows the types reachable from Query, Mutation and Subscription as a tree.

Issues by line number

Shows undefined types, duplicate names, missing interface fields, empty enums and output types used in input, each with its line number.

Breaking change candidates

Removed fields and types, newly required arguments, nullable-to-non-null changes and removed enum values are shown as candidates, apart from safe changes such as additions.

A reason on every row

Each row says which rule put it in its group. The rules are listed on the page, so the basis can be used in a review.

Runs only in your browser

The SDL is not sent anywhere and is analysed inside your browser. The tool never fetches a schema from a URL.

Use cases

  • Check whether a schema.graphql change in a pull request breaks existing clients
  • Find undefined types and duplicate names by line before running the code
  • List the types reachable from Query and Mutation to get an overview of a schema
  • Compare internal GraphQL schemas without sending them outside

Supported formats

Input

SDL (the schema.graphql form).graphql / .gql / .txtUTF-8 (with or without BOM)

Output

On-screen lists (types, issues, changes)Markdown (table for a pull request)JSON (verdict, counts and changes)

Capability matrix

FeatureSupportNotes
Reading SDL: type, interface, union, enum, input, scalar, schema and extendSupported—
Fields, arguments, types (with ! and [ ]), descriptions ("..." and """...""") and @deprecatedSupported—
Tree of types reachable from Query, Mutation and SubscriptionSupported—
Issues: undefined types, duplicate names, missing interface fields, empty enums, output types in inputSupportedNot every rule in the specification is checked. These are the issues this tool reads
Comparing two schemas, sorting breaking change candidates and safe changesSupportedThese are candidates. Your API policy and actual usage are unknown, so general rules are used
Syntax that cannot be readPartialThe line is shown by number and its definition is skipped. The result uses only the parts that could be read
Comparing directive definitionsNot supportedNot compared
Converting an introspection result (JSON) to SDLNot supportedNot supported. Paste the SDL instead
Running or validating queries, connecting to a serverNot supportedNo network access
Importing or fetching other files or URLsNot supportedNot fetched. Shown as an unresolved reference
Settings that change the rulesNot supportedThe rules can be read on the page, but no setting changes the groups
Offline useSupportedWorks without a connection once the page has loaded

Limits & notes

  • Up to 300,000 characters per SDL. Files up to 1 MB.
  • The type tree goes to depth 12 and up to 2,000 entries. The rest is shown as omitted.
  • The issue and change lists count every item, then show them on the screen.
  • The verdict follows general rules. Each API may have its own policy.

Privacy & safety

SDL is analysed only inside your browser. Nothing is sent or stored, and closing the page discards it. Analytics only record that a run happened, with no content or counts.

FAQ

What is a breaking change in GraphQL?
A change after which existing clients stop working as before. Removing a field or type, making an argument required (nullable to non-null) and changing an output field from non-null to nullable are examples. This tool shows candidates by the GraphQL specification’s rules.
Can I paste an introspection result (JSON)?
Not yet. The tool reads SDL (the schema.graphql form). It does not convert introspection JSON to SDL and does not connect to a server.
Can it fully validate a schema?
No. It is a light check for undefined types, duplicate names and missing interface fields. It does not run every rule of the specification, so use a GraphQL tool for a final check as well.
How is this different from the OpenAPI diff tool?
For a REST API definition, use the OpenAPI diff tool. This tool compares GraphQL type definitions (SDL). OpenAPI describes HTTP operations, while GraphQL describes types.
Where do I get the SDL?
Paste the SDL that your server library prints, or the schema.graphql in your repository. “Open file” also reads it.

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.

No upload

Schema Codegen — JSON to Types & Schema

Paste sample JSON, a JSON Schema or an OpenAPI document to get type definitions in 10 formats. Put several samples in a row to infer optional keys and unions. Your data never leaves your device.

No upload

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.

No upload

AsyncAPI Check and Event API Diff

Paste AsyncAPI YAML or JSON to list its servers, channels, operations and messages, with issues such as unresolved $ref and unused components by line number. Paste an old and a new version to see candidates such as removed channels or operations, and removed or newly required payload properties. Nothing leaves your browser.

No upload

Protobuf .proto Check and Compatibility

Paste a .proto to list its messages, field numbers, types, labels, enums and rpcs, with issues such as duplicate or out-of-range numbers by line number. Paste an old and a new version to see changes that may break compatibility, such as a changed field number or type, apart from cautions and safe changes. Nothing leaves your browser.

No upload

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.

No upload

Last updated: