Skip to content

How it compares

The TypeScript OpenAPI space is crowded and mature. hey-api, orval, kubb, and openapi-fetch are all good tools, actively maintained, and in some areas more featureful than this one. If you want the broadest plugin ecosystem, mocks, or hooks for every framework, one of them is probably the better pick, and that is fine.

This page exists so you can decide quickly and fairly. It is kept deliberately honest: where the alternatives are ahead, that is stated plainly. A comparison that only flatters itself is not worth reading.

Most generators treat your generated code as disposable: every run overwrites everything, so the output is a black box you are not meant to touch. openapi-zod-ts is built around the opposite idea. The Zod schema file is bootstrapped once and then yours forever, the client uses native fetch with no runtime library, and the whole thing is 1.0 and deliberately small rather than a moving target. You trade breadth for ownership and stability.

openapi-zod-tshey-apiorvalkubbopenapi-fetch
TypeScript typesYesYesYesYesYes
Fetch clientYesYesYesYesYes (is the client)
Runtime library added to your appNone (native fetch)None (client bundled)Mutator, often axiosClient of choice~6 kb required
Zod schemas generatedYes (opt-in)Yes (plugin)YesYesNo
Runtime request + response validationYesYes (Zod plugin)Yes (Zod)Yes (Zod)No
Schema file you own, never overwrittenYesNoNoNon/a
React Query / TanStack hooksYes (React)Yes (multi)Yes (multi)Yes (React, Vue, SWR)Companion pkg
Hooks for Vue / Svelte / Angular / SolidNoYesYesVueVia ecosystem
Server-side service interface + routerYes (Hono, Express, Fastify)NoNoNoNo
Mocks (MSW / faker)NoYes (plugin)YesYesNo
OpenAPI 3.1YesYesYesYesYes
Swagger 2.0NoNoYesYesNo
Stable 1.0 with semverYesNo (0.x)YesYesYes

You own the Zod schemas

With input_schema enabled, schemas.ts is written once and then never touched again. Add refinements, custom error messages, and business rules. Re-running the generator overwrites the client and types but leaves your schemas alone. Every other tool here regenerates schemas on every run, so hand edits do not survive.

Full-stack from one spec

The only tool in this set that also generates the server side: a framework-agnostic service interface plus an optional router for Hono, Express, or Fastify. One spec drives the client, the hooks, and the server contract, validated at both ends.

Nothing in your bundle

The generated client uses only native fetch. The generator is a devDependency. openapi-fetch ships a small runtime library you import; orval and kubb generate code that calls a client you install. Here, nothing the codegen produces lingers in production that your project did not already have.

Boring on purpose

1.0 and semver-stable, proven on 128 real-world specs in CI with live smoke tests, mutation testing, and published provenance. A code generator has a wide blast radius; for this layer of your stack, predictable beats cutting-edge.

Being honest about this is the point.

  • Breadth of frameworks. We generate React Query hooks only. hey-api, orval, and kubb generate hooks for Vue, Svelte, Angular, Solid, and more. If your frontend is not React, they win outright.
  • Mocks and test fixtures. orval and kubb generate MSW handlers and faker mocks; hey-api has a plugin for it. We do not generate mocks at all.
  • Plugin ecosystems. hey-api has 20+ plugins and is used by Vercel, OpenCode, and PayPal. kubb is a plugin meta-framework. If you want to bolt on MSW, Cypress, MCP, or a custom transformer, they are built for that. We are deliberately small and opinionated.
  • Swagger 2.0. orval and kubb read Swagger 2.0 specs. We only support OpenAPI 3.x.
  • Adoption. These projects have years of users and battle-testing behind them. We are new. That is a real factor, and you should weigh it.

Read the migration guide