Contract checks for every pull request

Catch the API break
before you deploy.

Compare JSON contracts, surface breaking changes, and give your CI a reason to stop the build. No surprises for the clients downstream.

No account · Runs locally · JSON never leaves your browser

Contract playground LOCAL
BASELINEVALID JSON
CANDIDATEVALID JSON

3 contract changes

2 breaking changes would fail CI

EXIT 1
CHANGEDresponse.name
BEFORE"Jordan"
AFTERnull
BREAKING
REMOVEDresponse.role
BEFORE"member"
AFTERNot present
BREAKING
ADDEDresponse.avatar_url
BEFORENot present
AFTER"https://cdn.example.com/jordan.jp…
SAFE

Small contract changes.
Very large consequences.

Removed field

response.user.roleBREAKING

Changed type

number → stringBREAKING
+

Added field

response.avatar_urlSAFE

Nullable value

string → nullBREAKING

The feedback loop
API teams have always wanted.

It turns an invisible contract change into something the whole PR can reason about.
Maya ChenPlatform engineer
Seeing the exact JSON path means I know which generated clients need attention immediately.
Alex RiveraSDK maintainer
The exit code is the right primitive: simple locally, enforceable in CI.
Sam KimBackend lead
It turns an invisible contract change into something the whole PR can reason about.
Maya ChenPlatform engineer
Seeing the exact JSON path means I know which generated clients need attention immediately.
Alex RiveraSDK maintainer
The exit code is the right primitive: simple locally, enforceable in CI.
Sam KimBackend lead
It turns an invisible contract change into something the whole PR can reason about.
Maya ChenPlatform engineer
Seeing the exact JSON path means I know which generated clients need attention immediately.
Alex RiveraSDK maintainer
The exit code is the right primitive: simple locally, enforceable in CI.
Sam KimBackend lead
It turns an invisible contract change into something the whole PR can reason about.
Maya ChenPlatform engineer
Seeing the exact JSON path means I know which generated clients need attention immediately.
Alex RiveraSDK maintainer
The exit code is the right primitive: simple locally, enforceable in CI.
Sam KimBackend lead
This is the kind of check that keeps a harmless-looking refactor from becoming an incident.
Jordan LeeDeveloper experience
A clear line between additive and breaking changes is exactly what our reviews are missing.
Nina PatelAPI architect
I would rather learn about a removed field in the PR than from Sentry after the deploy.
Theo WrightFrontend lead
This is the kind of check that keeps a harmless-looking refactor from becoming an incident.
Jordan LeeDeveloper experience
A clear line between additive and breaking changes is exactly what our reviews are missing.
Nina PatelAPI architect
I would rather learn about a removed field in the PR than from Sentry after the deploy.
Theo WrightFrontend lead
This is the kind of check that keeps a harmless-looking refactor from becoming an incident.
Jordan LeeDeveloper experience
A clear line between additive and breaking changes is exactly what our reviews are missing.
Nina PatelAPI architect
I would rather learn about a removed field in the PR than from Sentry after the deploy.
Theo WrightFrontend lead
This is the kind of check that keeps a harmless-looking refactor from becoming an incident.
Jordan LeeDeveloper experience
A clear line between additive and breaking changes is exactly what our reviews are missing.
Nina PatelAPI architect
I would rather learn about a removed field in the PR than from Sentry after the deploy.
Theo WrightFrontend lead
GITHUB CHECK · PR #184API CONTRACT
↳ Loading baseline from contracts/main.json
✓ Candidate contract generated
Scanning 24 endpoints · 186 fields
± response.user.name string → null
− response.user.role field removed
+ response.avatar_url field added
✕ Process completed with exit code 1

One check to protect every client.

Run Rail on every pull request. Safe additions pass; removed fields and type changes stop the merge before production.

One check on every pull request
Exact JSON paths for every break
Works with branch protection
No hosted service required to start

The road to a hosted contract layer.

Start with a useful local engine. Add the GitHub surface when teams are ready to make API contracts a shared habit.

01NOW

Browser playground

Compare payloads locally with zero setup.

02NEXT

CLI + Action

Version contracts and gate every pull request.

03LATER

Hosted GitHub App

PR comments, baselines, history, and team policies.

Find the break before your users do.

Paste two responses and see exactly what your next deploy changes.

Open the playground