Typed API clients,compiled from yourOpenAPI spec.
Swagger 2.0 and OpenAPI 3.0 to 3.2 in, tree-shakeable TypeScript or JavaScript out. One function per operation, and the code is yours to read.
import { getPetById } from './generated/api';
const pet = await getPetById({ petId: 10 });
// pet: Pet, typed from the specification
console.log(pet.name);- npx swaggerz generate
- Read openapi.yaml: 15 operations, 11 models
- Wrote 35 files to src/generated/api
- Runtime emitted, no dependency added
Everything the client needs. Nothing it doesn't.
- Tree-shakeableOne module per operation and per model. An app bundles only what it imports.
- Typed end to endParameters, bodies and responses, and errors typed by HTTP status. No runtime dependency.
- Hooks and schemasTanStack Query for React, Vue, Svelte and Solid, or SWR. Zod, Valibot or ArkType.
- Tools around itA linter for what makes the client worse, a local dashboard and an MCP server for agents.
Measured
- bundled by an app that calls one operation
- 16.1kB
- of a 1,000-operation client
- to compile 10,000 operations
- 3.8s
- into 16,011 files, in memory
- public API descriptions compile
- 24/ 24
- 6,920 operations, no type errors
Measured for this build on 25 October 2026, AMD EPYC 7763 64-Core Processor, Node.js 24.21.0, Linux (x64).How it is measured
Generate your first client in a minute.
Point it at a specification, run one command, import what you need.
Read the quick start
npx swaggerz init