Skmtc

When an API changes, your code gets a pull request

Skmtc generates production-grade clients, servers, forms and docs from any OpenAPI schema — and when the schema changes, it regenerates the code and opens the PR.

OpenAPI schemas
8,828
API providers
4,785
archived and diffed
Every version

The APIs you build on

8,828 OpenAPI schemas from 4,785 providers, each one versioned, diffed and ready to generate against.

SchemaOperationsModelsSpec sizeActions
GitHub REST APIRepos, issues, pulls, actions
1,21196512.8 MB
OpenAI APIChat, embeddings, images, audio
2871,3862.8 MB
PlaidBank accounts, transactions, identity
3352,3123.0 MB
Slack Web APIChannels, messages, users
174481.2 MB
Spotify Web APITracks, playlists, search, player
9687290 KB
Twilio MessagingSMS, senders, campaigns
5840493 KB
AsanaTasks, projects, workspaces
2492783.1 MB
ResendTransactional email
97175197 KB
Swagger PetstoreThe classic example schema
19617 KB

…and 8,819 more, growing daily — harvested from public spec repositories, docs platforms and API aggregators, then deduplicated and verified.

One schema, any stack you can build

A stack is a set of generators you compose and deploy — these four are examples. Pick a schema and run it through one: everything below is real generator output, not mockups.

TypeScript models, Zod schemas, a Hono API server and TanStack Query hooks — a working client-server pair from one contract.

2,238 files · 6.0 MB of code · generated from GitHub REST API’s 12.8 MB spec in 1.3 s

gen-typescriptgen-zodgen-hono-apigen-react-query-zod

Read the change, not the diff

Every new version of every schema is fetched, archived and diffed. Instead of a wall of JSON, you get each change in plain language, classified by severity — breaking, warning or info — down to the operation and property it touches.

versions of the Cloudflare API tracked
20
changes classified
17,357
of them breaking
1,502

The panel on the right is the real changelog for one Cloudflare API version pair — filter it, expand a path, read what actually changed.

Change detail

May 26May 28 · 361 changes across 89 paths

Changes become pull requests

Breaking changes ship with little warning, and changelogs don’t get read. So we stopped writing them to be read.

  1. 1

    Subscribe

    Pick a schema from the catalog and a stack to run it through. Point the subscription at your repository.

  2. 2

    We watch the contract

    Every push and refetch becomes a new version — archived, diffed and classified as breaking, warning or info.

  3. 3

    You review a pull request

    The stack regenerates, output is formatted to match your repo, and a PR opens with the classified changelog attached.

regenerate: plaid 2026-06-30 → 2026-07-28

▲ 3 breaking · 12 files changed · +214 −87

Changelog attached · output formatted with your repo’s prettier config

Agents that scan a codebase have to rediscover every call-site. Generated code knows its call-sites by construction — the contract diff is the change plan. That’s what makes the PR trustworthy enough to merge.

Subscribe your repo

Stacks are generator sets you can deploy

A stack composes generators into one deployable unit with a public generate endpoint.

Full-stack

up to 2,762 files from one schema

Types, validation, server, hooks

TypeScript models, Zod schemas, a Hono API server and TanStack Query hooks — a working client-server pair from one contract.

gen-typescriptgen-zodgen-hono-apigen-react-query-zod

Valibot

up to 2,312 files from one schema

Lean runtime validation

Valibot models for every schema in the contract — tree-shakeable validators at a fraction of the bundle weight.

Markdown docs

up to 1,260 files from one schema

Readable API reference

A Markdown reference for every operation and model — documentation that regenerates when the API changes.

Stacks compose from stock generators — gen-typescript, gen-zod, gen-valibot, gen-arktype, gen-tanstack-query-fetch-zod, gen-shadcn-form, gen-shadcn-table, gen-msw, gen-express, gen-supabase-hono, gen-md-docs and more on JSR. Outgrow them and you clone, customize and publish your own — generators compose, so you extend rather than fork.

Or run it locally, right now

The same generators run from the CLI against any schema. Five commands to generated code.

1

Install the CLI

curl -fsSL https://skm.tc/install | sh
2

Scaffold a project and choose where generated code lands in your app

skmtc init petstore src/generated
3

Add generators from the registry

skmtc install @skmtc/gen-zod petstore
4

Bundle the generator set

skmtc bundle petstore
5

Point it at your OpenAPI schema — a URL or a local file

skmtc generate petstore https://petstore3.swagger.io/api/v3/openapi.json

Ready when you are

Generate from any of 8,828 schemas in the catalog, or install the CLI and run it against your own.

curl -fsSL https://skm.tc/install | sh

The CLI runs on Deno; generated code drops into your ordinary npm, Vite or Next.js project.