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
…



