— MIT Licensed — 418+ tests passing

Generate HTTP client code from any OpenAPI doc.

Drop-in code generation for 21 languages and 41 language/client combinations. Browser-compatible, zero runtime dependencies, with a plugin system for custom generators.

$npm install @powerduck/openapi-codegen
21 Languages41 ClientsBrowser ReadyZero Runtime DepsPlugin System
Quick Start

Generate code in three lines

import { generate } from "@powerduck/openapi-codegen";

const document = {
  openapi: "3.1.0",
  info: { title: "Demo API", version: "1.0.0" },
  servers: [{ url: "https://api.example.com/v1" }],
  paths: {
    "/users/{id}": {
      get: {
        operationId: "getUser",
        parameters: [{ name: "id", in: "path", required: true, schema: { type: "string" } }],
        responses: { "200": { description: "OK" } },
      },
    },
  },
};

// Full GenerateOptions — all fields shown
const code = generate({
  document,                          // OpenAPI document (required if no request)
  path: "/users/{id}",             // Operation path
  method: "get",                  // HTTP method
  language: "python",              // Target language (required)
  client: "requests",              // HTTP client (required)
  serverUrl: "https://api.example.com/v1", // Override servers[0].url
  securityValues: { bearerAuth: "my-token" }, // Auth values
  softRefMode: false,              // Soft $ref resolution
});

console.log(code);
Features

Everything you need for code generation

Built for API documentation, SDK scaffolding, and developer tooling.

02

Browser Compatible

Pure TypeScript with no Node.js dependencies. Runs in browsers, Edge Functions, Web Workers, and any modern JS runtime.

03

Zero Runtime Dependencies

No heavy dependencies shipped to your users. The entire generator compiles to a small, tree-shakeable ESM/CJS bundle.

04

Plugin System

Register custom generators with register() or use(plugin). Extend or override any built-in language without forking.

05

Accurate $ref Resolution

Properly resolves OpenAPI $ref pointers for request bodies, parameters, and schemas. Handles circular references safely.

06

Security Value Injection

Pass securityValues to inject API keys, bearer tokens, and basic auth credentials directly into generated code.

Languages

21 languages out of the box

Call list() to get the full list of available language/client pairs.

JavaScriptJavaScriptfetch · axios · jQuery · XHR · ofetch
Node.jsNode.jsfetch · axios · ofetch · undici
PythonPythonrequests · httpx · aiohttp
GoGonew-request
JavaJavaOkHttp · Unirest · AsyncHttp · java-net-http
KotlinKotlinOkHttp
RubyRubynet-http
PHPPHPcURL · Guzzle · Laravel HTTP
ShellShellcURL · wget · HTTPie
CClibcurl
C#C#HttpClient · RestSharp
F#F#HttpClient
DartDarthttp
SwiftSwiftNSURLSession
Objective-CObjective-CNSURLSession
RustRustreqwest
ClojureClojureclj-http
OCamlOCamlcohttp
RRhttr2
PowerShellPowerShellInvoke-RestMethod · Invoke-WebRequest
HTTPHTTPhttp1 (raw)
API Reference

Complete API surface

Click any entry to expand parameters and examples.

functiongenerate(options)Generate an HTTP request example for an OpenAPI operation
Parameter Type Description
options.document object OpenAPI document object (required when no request)
options.path string Operation path, e.g. "/users/{id}" (required with document)
options.method string HTTP method lowercase: get, post, put, delete, patch (required with document)
options.languagerequired string Target language, e.g. "python"
options.clientrequired string HTTP client, e.g. "requests"
options.request RequestIR Pre-normalized request (skips document lookup)
options.serverUrl string Override server base URL
options.securityValues object Map of security scheme names to values
options.softRefMode boolean Graceful $ref resolution mode
functionregister(generator)Register a custom language/client generator
Parameter Type Description
generator.languagerequired string Language identifier
generator.clientrequired string Client identifier
generator.generaterequired (req: RequestIR) => string Generation function
functionget(language, client)Get a generator by language and client
Returns
Generator | undefined
functionlist()List all available generators
Returns
Array<{ language: string; client: string }>
functionuse(plugin)Apply a plugin that can register custom generators
Parameter Type Description
plugin.registerrequired (ctx: { register }) => void Plugin registration hook
functionregisterBuiltins()Explicitly register all built-in generators (auto-called on import)

Idempotent. Safe to call multiple times; only registers on first invocation.

typeGenerateOptionsOptions object for generate()

Exported from the package root. Includes document, path, method, language, client, request, serverUrl, securityValues, softRefMode.

typeGeneratorCustom generator interface
Shape
{ language: string; client: string; generate: (request: RequestIR) => string }
21
Languages
41
Client Pairs
0
Runtime Deps
MIT
License