Ship GraphQL schema changes
with confidence.
Nitro's schema checks test a proposed change against the operations your clients rely on in production. Breaking change detection shows what would break, so you can fix it before it reaches users.
Removing Order.total breaks queries that still select it. Queries and mutations from 3 client versions published to this stage are affected. Deprecate it, then remove it after those versions are retired or unpublished from the stage.
Breaking changes fail the pull request.
Nitro fails the pull request when a proposed change would break an operation your clients have published. The problem shows up as a red status on the PR, not as an incident after release. Mark it as required and the merge button stays locked until the schema is safe.
See which clients a change would break.
Validation runs against the set of operations your client versions have published to that environment. Each client gets its own result: a change that is safe for web can still break mobile, and you see that before you merge.
| client | operations passing | status |
|---|---|---|
web production | 5/5 | OK |
mobile production | 3/5 | at risk |
partner sandbox | none published | outside result |
internal-admin staging | 6/6 | OK |
Every environment is its own gate.
Development, staging, and production each hold their own published operations, so the same change is validated against what actually runs in each of them. A change that passes staging can still fail production, because different client versions are published there.
Run the checks in the CI you already have.
The validate, upload, and publish steps ship as ready-made GitHub Actions and Azure Pipelines tasks, both wrapping the Nitro CLI.
GitHub Actions
Azure Pipelines
Any other CI
Keep the full history of your schema.
Every upload and publish adds a version to the registry, giving you a browsable record of how the API evolved: what changed in each version, how severe it was, and when a blocked removal finally cleared. Answering 'when did this field change and why' no longer means digging through merge commits.
- v12add Cart.discountSAFE
- v13deprecate Order.placedAtDANGEROUS
- v14remove Order.total — blockedBREAKING
- v14add Order.totalAmountSAFE
- v15drop Order.total — usage clearedDANGEROUS
Know what breaks before your users do.
Publish the operations each client uses, validate proposed schemas against the environment you plan to update, and merge with the answer in hand.