Skip to content
Code Generation
Skill

/orval

Generate type-safe API clients, TanStack Query/SWR hooks, Zod schemas, MSW mocks, Hono server handlers, MCP servers, and SolidStart actions from OpenAPI specs using Orval. Covers all clients (React/Vue/Svelte/Solid/Angular Query, Fetch, Axios), custom HTTP mutators,

From plugin
orval
6.6k1 skill

Claude Code

$ npx -y skills add orval-labs/orval --skill orval --agent claude-code

SKILL.md

orval.SKILL.md
name: orval
description: Generate type-safe API clients, TanStack Query/SWR hooks, Zod schemas, MSW mocks, Hono server handlers, MCP servers, and SolidStart actions from OpenAPI specs using Orval. Covers all clients (React/Vue/Svelte/Solid/Angular Query, Fetch, Axios), custom HTTP mutators, authentication patterns, NDJSON streaming, programmatic API, and advanced configuration.

Orval - OpenAPI to TypeScript Code Generator

Orval generates type-safe TypeScript clients, hooks, schemas, mocks, and server handlers from OpenAPI v3/Swagger v2 specifications.

Quick Start

Installation

npm install orval -D
# or yarn add orval -D
# or pnpm add orval -D
# or bun add orval -D

Minimal Configuration

import { defineConfig } from 'orval';

export default defineConfig({
  petstore: {
    input: {
      target: './petstore.yaml',
    },
    output: {
      target: './src/api/petstore.ts',
      schemas: './src/api/model',
      client: 'react-query',
    },
  },
});

Run

npx orval
npx orval --config ./orval.config.ts
npx orval --project petstore
npx orval --watch

Choosing Your Setup

Client Selection Guide

| Use Case | Client | httpClient | Notes | | ------------------------ | ----------------- | ------------------ | --------------------------------------- | | React with server state | `react-query` | `fetch` or `axios` | TanStack Query hooks | | Vue 3 with server state | `vue-query` | `fetch` or `axios` | TanStack Query for Vue | | Svelte with server state | `svelte-query` | `fetch` or `axios` | TanStack Query for Svelte | | SolidJS standalone app | `solid-query` | `fetch` or `axios` | TanStack Query for Solid | | SolidStart full-stack | `solid-start` | native fetch | Uses `query()`/`action()` primitives | | Angular with signals | `angular-query` | `angular` | Injectable functions, signal reactivity | | Angular traditional | `angular` | — | HttpClient services | | React with SWR | `swr` | `fetch` or `axios` | Vercel SWR hooks | | Lightweight / Edge | `fetch` | — | Zero dependencies, works everywhere | | Node.js / existing Axios | `axios-functions` | — | Factory functions (default) | | Axios with DI | `axios` | — | Injectable Axios instance | | Validation only | `zod` | — | Zod schemas, no HTTP client | | Backend API server | `hono` | — | Hono handlers with Zod validation | | AI agent tools | `mcp` | — | Model Context Protocol servers |

Mode Selection Guide

  • **`single`** — Everything in one file. Best for small APIs.
  • **`split`** — Separate files: `petstore.ts`, `petstore.schemas.ts`, `petstore.msw.ts`. Good for medium APIs.
  • **`tags`** — One file per OpenAPI tag + shared schemas. Organizes by domain.
  • **`tags-split`** — Folder per tag with split files. Best for large APIs. Recommended.

httpClient Option

For `react-query`, `vue-query`, `svelte-query`, and `swr` clients:

output: {
  client: 'react-query',
  httpClient: 'fetch',  // 'fetch' (default) | 'axios'
}

For `angular-query`:

output: {
  client: 'angular-query',
  httpClient: 'angular',  // Uses Angular HttpClient
}

Configuration Reference

Config Structure

import { defineConfig } from 'orval';

export default defineConfig({
  [projectName]: {
    input: InputOptions,
    output: OutputOptions,
    hooks: HooksOptions,
  },
});

Multiple projects can share the same config file with different input/output settings.

Input Options

input: {
  target: './spec.yaml',              // Path or URL to OpenAPI spec (required)
  override: {
    transformer: './transform.js',    // Transform spec before generation
  },
  filters: {
    mode: 'include',                  // 'include' | 'exclude'
    tags: ['pets', /health/],         // Filter by OpenAPI tags
    schemas: ['Pet', /Error/],        // Filter by schema names
  },
  parserOptions: {
    headers: [                        // Auth headers for remote spec URLs
      {
        domains: ['api.example.com'],
        headers: {
          Authorization: 'Bearer YOUR_TOKEN',
          'X-API-Key': 'your-api-key',
        },
      },
    ],
  },
}

Output Options

output: {
  target: './src/api/endpoints.ts',     // Output path (required)
  client: 'react-query',               // Client type (see table above)
  httpClient: 'fetch',                  // 'fetch' (default) | 'axios' | 'angular'
  mode: 'tags-split',                   // 'single' | 'split' | 'tags' | 'tags-split'
  schemas: './src/api/model',           // Output path for model types
  operationSchemas: './src/api/params', // Separate path for operation-derived types
  workspace: 'src/',                    // Base folder for all files
  fileExtension: '.ts',                 // Custom file extension
  namingConvention: 'camelCase',        // File naming: camelCase | PascalCase | snake_case | kebab-case
  indexFiles: true,                     // Generate index.ts barrel files
  clean: true,                          // Clean output before generating
  prettier: true,                       // Format with Prettier
  biome: true,                          // Format with Biome
  headers: true,                        // Generate header parameters
  baseUrl: '/api/v2',                   // API base URL
  // or from spec:
  // baseUrl: { getBaseUrlFromSpecification: true, index: 0, variables: { environment: 'api.dev' } },
  mocks: true,                          // Generate MSW + Fa
Read more
@orval-labs
Ships withorval

orval is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. 🍺

Stars on GitHub

Momentum

stars in total
6.6k
Star history of orval-labs/orval on GitHub, a chart by star-history.com

More skills from other plugins.

claude-api

claude-api

Use this skill when the user is building against Anthropic APIs or SDKs, including `@anthropic-ai/sdk`, `anthropic`, or Agent SDK…

@oboard@oboardInstall Skill
emitting-output

emitting-output

Writing or converting formatted output in ripwire's C++ source — std::print/std::format via rw::emitTo, emitRaw and formatTo,…

ripwire9d2.5k
@redhat-et@redhat-etInstall Skill
paper2code

paper2code

Converts an arxiv paper into a minimal, citation-anchored Python implementation. Trigger when user runs /paper2code with an arxiv…

paper2code7mo1.5k

Questions about orval.

Which coding agents can use orval?
orval installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.