For teams with existing Stainless TypeScript SDKs.

Keep your Stainless TypeScript SDK alive.

Opensteel generates Stainless-compatible TypeScript SDKs from your OpenAPI spec and stainless.yml-style config. For supported SDK shapes, it targets near byte-identical output so teams can keep shipping after the hosted Stainless generator is no longer available.

terminal
$ npx opensteel generate \
  --openapi openapi.yaml \
  --config stainless.yml \
  --out ./my-sdk

# emits a Stainless-compatible TypeScript SDK
./my-sdk/src/client.ts
./my-sdk/src/resources/
./my-sdk/src/internal/

$ npx opensteel init \
  --config stainless.yml \
  --out ./my-sdk

# adds the publishable wrapper
package.json
release-please-config.json
.github/workflows/generate.yml
289
reference SDKs measured
89.5%
of their code reproduced exactly
57
reproduced in full
Near byte-identical output Existing Stainless SDKs OpenAPI 3.x stainless.yml TypeScript Clean-room generator MIT-licensed references GitHub Actions

Stainless continuity

A path forward for existing Stainless SDKs.

If you already have a Stainless-generated TypeScript SDK, Opensteel is designed to keep that shape stable. Your spec, config, generated source, build scripts, and release workflow can all live in Git.

01

Start from your inputs

Use the OpenAPI spec and Stainless-style config that already define your SDK.

02

Generate compatible output

Target the same TypeScript project shape, resources, runtime layout, and exported types.

03

Diff the result

Measure byte-level drift against known Stainless output and drive it down fixture by fixture.

04

Publish normally

Ship with standard npm, release-please, and GitHub Actions tooling.

Why Opensteel

Byte-level compatibility, without the hosted generator.

Measured against real SDKs

For supported SDK shapes, Opensteel targets output close enough to preserve existing imports, docs, tests, and release workflows — and publishes the diff against real packages rather than asserting it.

Built for migration

Use Opensteel as a continuity layer when your SDK already depends on Stainless conventions.

Clean-room pipeline

Generation is driven by OpenAPI plus config. Compatibility is measured by diffing against reference SDKs, not by using Stainless backend code.

MIT-licensed references

Development has focused on public, MIT-licensed SDK outputs and a repo-owned generator you can inspect.

Compatibility coverage

Compatibility is a number, not a claim.

Every change to the generator is measured against a corpus of real Stainless-generated SDKs. Each one is regenerated from its spec and config, then diffed against the package Stainless actually shipped.

TypeScript
156 SDKs
84.0% reproduced · 93.9% median
22 in full · 141 compile
Python
133 SDKs
91.8% reproduced · 98.6% median
35 in full · 79 compile

Measured by regenerating each SDK from its OpenAPI spec and config alone, then diffing against the real Stainless-generated package. Diffs normalize comments and blank lines and exclude hand-written custom code, which no generator can derive from a spec. Across the corpus 89.5% of all reference-SDK code is reproduced exactly, and the median SDK reaches 96.4%; 57 are reproduced in full, with 16 more within a few lines. 220 of 289 typecheck clean.

Current scope

TypeScript and Python, with compatibility as the product.

Both targets run through the same front end and the same diff harness, so a compatibility fix is proven against real shipped SDKs rather than asserted. The residual is concentrated in a handful of very large SDKs; most of the corpus is already close.

OpenAPI 3.x YAML or JSON
Stainless-style config files
TypeScript SDK generation
Python SDK generation
Resource and method generation
Exported model and parameter types
Pagination patterns
Streaming runtime support
GitHub Actions generation workflow
release-please based releases

What it is

A CLI-first continuity tool for teams with Stainless-generated TypeScript SDKs who need to keep generating compatible code from files they control.

What it is not

Not a legal opinion and not a full Stainless product replacement — no docs sites, MCP servers, or hosted workflows. It generates TypeScript and Python SDKs; other Stainless languages are not supported.

Start generating

Install the CLI and generate your first SDK.

Opensteel requires Node.js 20 or newer and generates TypeScript and Python packages.

$ npm install -g opensteel

$ opensteel generate \
  --openapi openapi.yaml \
  --config stainless.yml \
  --out ./sdk