Open Standard · Companion to OpenAPI

The missing layer between
describing an API and
shipping a developer platform.

opensdk.yaml is a machine-readable companion to your OpenAPI spec. Declare how SDKs should be generated — naming conventions, retry logic, pagination, reconciliation, packaging — once, for every language you support.

15
Languages
1
Config File
∞
Generators
v1
Spec Draft

The Problem

OpenAPI solved documentation.
It didn't solve SDK generation.

Every API provider that ships official SDKs must separately configure each generator through a mix of CLI flags, config files, and template overrides. The result is inconsistent: the Python SDK uses camelCase while Go uses snake_case on the same resource. The TypeScript client silently drops retry logic the Java client includes. The Terraform provider has reconciliation semantics no other language shares.

Consumers fare no better. A developer writing an integration must read provider documentation to discover that the "official" Go SDK requires 17 specific flags, or was generated with a private fork of a template set from three years ago.

OpenSDK closes this gap. One opensdk.yaml alongside your openapi.yaml — every compliant generator produces exactly the SDK you intended.

Supported Languages

go typescript python java kotlin ruby rust csharp php swift dart scala elixir c cpp

What You Can Declare

Everything a generator needs
to do it right.

⬡

Style Rules

Naming conventions (camelCase, snake_case, PascalCase), enum representations, optional field styles, date types — per language.

↻

Retry Logic

Declare retry behavior with max attempts, backoff strategy (exponential, linear, fixed), and which HTTP status codes trigger a retry.

⇥

Pagination

Cursor, offset, page-number, or link-header strategies. Opt into transparent iterator helpers that hide pagination from the caller entirely.

⟳

Reconciliation

Terraform, Kubernetes, or Pulumi-style reconcile loops and drift detection for infrastructure SDKs. Declare immutable and server-managed fields.

◈

Auth Helpers

Bearer, API key, Basic, OAuth2 (client credentials, authorization code, device code), and OIDC. Generators emit complete auth wrappers.

⊞

Packaging

Package names, module paths, registry targets (npm, pypi, crates.io, pkg.go.dev, and more) — per language.

✦

Governance Rules

Validation gates that halt generation on unnamed operations, missing tags, or inline schemas. Breaking change policies. Versioning strategies.

⌥

Operation Overrides

Per-operation renames, ignores, forced deprecations, and custom implementations that replace generated code for specific endpoints.

◎

Streaming & Webhooks

SSE and chunked transfer helpers, webhook payload types, and HMAC signature verification — declared in one place, generated everywhere.

Quick Look

One file. Two languages.
Zero guesswork.

opensdk.yaml v1.0.0
opensdk: "1.0.0"

openapi:
  $ref: "./openapi.yaml"

sdk:
  name: "acme-api"
  version: "2.1.0"
  license: "Apache-2.0"

languages:
  - language: go
    package:
      name: "github.com/acme/acme-go"
    style:
      naming: snake_case
      modelNaming: PascalCase
      optionalStyle: pointer
    features:
      auth: bearer
      retries:
        enabled: true
        maxAttempts: 3
        backoff: exponential
      reconciliation: terraform
      context: true

  - language: typescript
    package:
      name: "@acme/api"
      registry: npm
    style:
      naming: camelCase
      enumStyle: string-union
    features:
      auth: bearer
      pagination:
        strategy: cursor
        iteratorHelper: true
      streaming: true
      webhooks: true

codegenRules:
  validation:
    - rule: no-unnamed-operations
      severity: error
    - rule: required-tags
      severity: error
  breakingChangePolicy: major-version-bump
terminal ● ready
# validate before generating
$ opensdk validate ./opensdk.yaml
✓ Schema valid
✓ no-unnamed-operations passed
✓ required-tags passed

# generate Go SDK
$ opensdk generate --lang go \
    --out ./sdk/go
✓ Generated 24 files
✓ Reconcile() helpers emitted
✓ context.Context threaded

# generate TypeScript SDK
$ opensdk generate --lang typescript \
    --out ./sdk/ts
✓ Generated 18 files
✓ asyncIterator pagination
✓ Webhook HMAC verifier
✓ SSE streaming helpers

# publish
$ opensdk publish --lang go
✓ Published github.com/acme/acme-go@v2.1.0

$ opensdk publish --lang typescript
✓ Published @acme/api@2.1.0 → npm

Start Writing

Drop it alongside
your OpenAPI spec.

A valid opensdk.yaml needs only three fields. Add more as your needs grow.

Read the Specification →

Validate

JSON Schema available
right now.

Validate any opensdk.yaml against the published schema before building generator support.

View the Schema →