All projects

Driftwatch

A breaking-change radar for the third-party APIs you depend on. It watches vendors' OpenAPI specs, diffs every release, and publishes only the changes that break callers to a free public feed, with JSON, RSS and an MCP server.

2026
Founder
Live
  • TypeScript
  • Next.js
  • PostgreSQL
  • Prisma
  • Cloudflare Workers
  • MCP
Driftwatch screenshot

Every OpenAPI diff tool is built for API owners: point it at your own spec, in your own CI, so you don’t break your customers. Driftwatch points the other way. It watches the specs you depend on (Stripe, OpenAI, Twilio, GitHub, Hetzner and more) and tells you when a vendor broke you.

acquire → normalize → diff → classify → render → publish

The pipeline runs end to end and the feed is live at driftwatch.et. Next is a GitHub App that finds the affected call sites in your repo and opens the fix PR.

An archive on day one

A spec kept in a public git repo hands over its own history. Driftwatch partially clones those repos and walks every revision, so the feed launched with nine years of Stripe changes before it had a single subscriber: 2,741 revisions across four providers.

Spec files move. Twilio’s core spec has lived at four different paths, so every revision carries the path it was written at; without that, every commit before a move fails to read.

Normalization is where the noise dies

One false BREAKING label and a subscriber is gone for good. Spec generators shuffle key order, parameter lists and enum values between releases, none of which changes the API. Specs are parsed, upgraded, bundled, canonicalized and hashed, with set-like arrays sorted, so a reshuffle never shows up as a change.

Diffing shared components once

Following $refs inline looked correct until it met real history. Stripe’s schemas nest through shared components, so one enum gaining a value was rediscovered along every path that reached it: one release produced 4,528 “breaking” changes. Walks now stop at each $ref, and components are diffed once and annotated with how many operations reach them. The same release yields 6 breaking changes, each a distinct real fact. Roughly a 750x reduction with no lost signal.

Breaking for the consumer, not the producer

Three rules invert on the calling end, and they are why anyone subscribes:

  • A response field becoming optional is safe for the producer and a null dereference for you
  • A response enum gaining a value breaks exhaustive switches, strict parsers and generated clients
  • A removed request parameter raises no error at all; your results just quietly change

Severity is a pure lookup in the ruleset, never a model’s guess, so the same pair of specs always gets the same verdict. Anything under 85 confidence never reaches the feed, and everything else waits behind a human review gate.

Built to be consumed by agents too

The feed ships as HTML, JSON and RSS, plus a stdio MCP server that reads the same published JSON a person sees, so an unpublished change can never leak through a side channel.

Ambulo Jointed creatures evolve to walk, climb stairs and chase a lure. Every limb runs its own neural network, a genetic algorithm scores thousands of them in a WebAssembly physics engine, and the whole thing runs in the browser with no server and no AI API.