Skip to main content
Plugins generate artifacts from your OpenAPI specification. By default, TypeScript types and SDK functions are generated. You can customize which plugins are used and their configuration.

Default Plugins

If you don’t specify plugins, these defaults are used:
plugins: ['@hey-api/typescript', '@hey-api/sdk']
This generates:
  • TypeScript interfaces and types (@hey-api/typescript)
  • SDK functions for API calls (@hey-api/sdk)

Available Plugins

Core Plugins

Generates TypeScript types and interfaces from OpenAPI schemas.
plugins: [
  {
    name: '@hey-api/typescript',
    enums: 'javascript',
    case: 'PascalCase',
  },
]
See the @hey-api/typescript plugin documentation for all options.
Generates type-safe SDK functions for making API calls.
plugins: [
  {
    name: '@hey-api/sdk',
    paramsStructure: 'flat',
    responseStyle: 'data',
  },
]
See the @hey-api/sdk plugin documentation for all options.
Generates runtime JSON schemas for validation and transformation.
plugins: ['@hey-api/schemas']
Generates transformer functions for converting data types (e.g., ISO strings to Date objects).
plugins: ['@hey-api/transformers']

HTTP Clients

Fetch API client (browser and Node.js 18+).
plugins: ['@hey-api/client-fetch']
Axios client for HTTP requests.
plugins: ['@hey-api/client-axios']
Ky client (Fetch wrapper with extra features).
plugins: ['@hey-api/client-ky']
Next.js optimized client.
plugins: ['@hey-api/client-next']
Nuxt.js optimized client.
plugins: ['@hey-api/client-nuxt']
ofetch client (universal fetch wrapper).
plugins: ['@hey-api/client-ofetch']
Angular HttpClient wrapper.
plugins: ['@hey-api/client-angular']

Framework Integrations

TanStack Query (React Query) hooks.
plugins: ['@tanstack/react-query']
TanStack Query for Vue.js.
plugins: ['@tanstack/vue-query']
TanStack Query for Svelte.
plugins: ['@tanstack/svelte-query']
TanStack Query for Solid.js.
plugins: ['@tanstack/solid-query']
TanStack Query for Angular (experimental).
plugins: ['@tanstack/angular-query-experimental']
Pinia Colada for Vue.js state management.
plugins: ['@pinia/colada']
SWR hooks for React.
plugins: ['swr']
Angular common utilities.
plugins: ['@angular/common']

Validators

Generates Zod schemas for runtime validation.
plugins: ['zod']
Generates Valibot schemas for runtime validation.
plugins: ['valibot']
Generates ArkType schemas for runtime validation.
plugins: ['arktype']

Other Plugins

Generates Fastify route handlers.
plugins: ['fastify']
Generates fake data generators using Faker.js.
plugins: ['@faker-js/faker']

Plugin Configuration

String Format

Use the plugin name as a string to enable it with default settings:
openapi-ts.config.ts
import { defineConfig } from '@hey-api/openapi-ts';

export default defineConfig({
  input: 'https://api.example.com/openapi.json',
  output: './src/client',
  plugins: [
    '@hey-api/typescript',
    '@hey-api/sdk',
    '@hey-api/client-fetch',
  ],
});

Object Format

Use an object to customize plugin configuration:
openapi-ts.config.ts
import { defineConfig } from '@hey-api/openapi-ts';

export default defineConfig({
  input: 'https://api.example.com/openapi.json',
  output: './src/client',
  plugins: [
    {
      name: '@hey-api/typescript',
      enums: 'javascript',
      case: 'PascalCase',
    },
    {
      name: '@hey-api/sdk',
      paramsStructure: 'flat',
    },
    '@hey-api/client-fetch',
  ],
});

Common Plugin Options

Most plugins support these common options:
name
string
required
The plugin name.
includeInEntry
boolean | function
default:false
Whether exports from this plugin should be included in the entry file.
{
  name: '@hey-api/typescript',
  includeInEntry: true,
}
Or use a function for fine-grained control:
{
  name: '@hey-api/typescript',
  includeInEntry: (symbol) => symbol.meta.category === 'type',
}
comments
boolean
default:true
Include comments in generated code.
{
  name: '@hey-api/typescript',
  comments: false,
}

Plugin Dependencies

Some plugins automatically enable other plugins as dependencies:
  • @hey-api/sdk automatically includes @hey-api/typescript
  • TanStack Query plugins automatically include @hey-api/sdk and a client
  • Validator plugins (Zod, Valibot) include @hey-api/schemas
You don’t need to manually add dependencies.

Single Client Rule

When you specify only one HTTP client plugin, the default plugins are automatically included:
plugins: ['@hey-api/client-fetch']
// Automatically becomes:
// ['@hey-api/typescript', '@hey-api/sdk', '@hey-api/client-fetch']
If you specify other plugins, you must explicitly include all desired plugins:
plugins: [
  '@hey-api/typescript',
  '@hey-api/sdk',
  '@hey-api/client-fetch',
  'zod',
]

Examples

React Query with Fetch Client

openapi-ts.config.ts
import { defineConfig } from '@hey-api/openapi-ts';

export default defineConfig({
  input: 'https://api.example.com/openapi.json',
  output: './src/client',
  plugins: [
    '@hey-api/client-fetch',
    '@hey-api/sdk',
    {
      name: '@hey-api/typescript',
      enums: 'javascript',
    },
    '@tanstack/react-query',
  ],
});

Axios Client with Zod Validation

openapi-ts.config.ts
import { defineConfig } from '@hey-api/openapi-ts';

export default defineConfig({
  input: 'https://api.example.com/openapi.json',
  output: './src/client',
  plugins: [
    '@hey-api/client-axios',
    '@hey-api/schemas',
    '@hey-api/sdk',
    '@hey-api/typescript',
    'zod',
  ],
});

Fastify Backend

openapi-ts.config.ts
import { defineConfig } from '@hey-api/openapi-ts';

export default defineConfig({
  input: './openapi.json',
  output: './src/generated',
  plugins: [
    'fastify',
    '@hey-api/sdk',
  ],
});

Multiple Frameworks

openapi-ts.config.ts
import { defineConfig } from '@hey-api/openapi-ts';

export default defineConfig([
  {
    input: 'https://api.example.com/openapi.json',
    output: './src/client/react',
    plugins: [
      '@hey-api/client-fetch',
      '@hey-api/sdk',
      '@hey-api/typescript',
      '@tanstack/react-query',
    ],
  },
  {
    input: 'https://api.example.com/openapi.json',
    output: './src/client/vue',
    plugins: [
      '@hey-api/client-fetch',
      '@hey-api/sdk',
      '@hey-api/typescript',
      '@tanstack/vue-query',
    ],
  },
]);

Build docs developers (and LLMs) love