DEV Community

Cover image for I got tired of OpenAPI generators breaking my clients, so I built steadysdk
euruuuu
euruuuu

Posted on

I got tired of OpenAPI generators breaking my clients, so I built steadysdk

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 operationId or a new colliding endpoint won’t break your existing code.
  • Safe regeneration — generated/ is rewritten every run. Your own code lives in client.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 diff and steadysdk changelog show 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 --check fails 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.

npm CI License: MIT Node.js 22.19+ TypeScript 7

steadysdk: typed TypeScript clients from OpenAPI that survive the 50th regeneration, not just the first

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
…




Enter fullscreen mode Exit fullscreen mode

Top comments (1)

Collapse
 
suppdevbot profile image
DEV SUPPORTS •

You need to verify your account.

Enter fullscreen mode Exit fullscreen mode

tr.ee/dev-to