Most OpenAPI generators are "generate once and forget."
You run them the first time and everything looks great. Then the backend changes an operationId, adds an endpoint, or renames a field… and suddenly:
- Your custom helpers get overwritten
- Method names silently change
- You have to re-check the entire generated client
- CI either breaks or you stop regenerating altogether
I got tired of this cycle, so I built steadysdk.
What makes it different
steadysdk is a TypeScript OpenAPI client generator designed for the second, tenth, and hundredth generation:
-
Name locking — every method name is recorded in a lock file. A renamed
operationIdor a new colliding endpoint won’t break your existing code. -
Safe regeneration —
generated/is rewritten every run. Your own code lives inclient.ts(created once) or inside// <steadysdk:custom>regions and is preserved. - Hand-edit detection — if someone edits a generated file outside the custom regions, regeneration stops and tells you instead of silently overwriting.
-
API changelog —
steadysdk diffandsteadysdk changelogshow exactly what changed between two versions of the spec and mark breaking changes. -
Zero runtime dependencies — the generated client only uses
fetch. -
CI-friendly —
steadysdk generate --checkfails when the committed SDK is out of date.
Quick start
bash
npm install --save-dev @steadysdk/cli
npx steadysdk init
npx steadysdk generate
steadysdk
Generate typed API clients from OpenAPI, and keep them maintainable as the API evolves.
Most OpenAPI generators are "generate once and forget": re-running them overwrites everything, wipes out
hand-written helpers, and silently renames methods when the spec shifts. steadysdk is built for the second
tenth and hundredth generation.
Situation
Typical generator
steadysdk
First generation
Works
Works
API adds an endpoint
Rewrites everything
Adds the new method; every other file is untouched
You wrote a custom helper
Gets deleted
Lives in your own file or a custom region; kept on every run
Someone hand-edits generated code
Silently overwritten
Detected; regeneration stops and tells you
An operationId is renamed upstream
Your method is renamed (breaking)
Name pinned by the lock file until you opt in
The API changes
You diff the YAML by hand
steadysdk diff lists every change and marks the breaking ones
Release notes
Written by hand
steadysdk changelog
…

Top comments (1)
tr.ee/dev-to