Skip to main content
oRPC has built-in, first-class OpenAPI support through the @orpc/openapi package. It provides two primary capabilities:

Spec Generation

Convert any oRPC router or contract into a valid OpenAPI 3.1.1 document.

OpenAPI Handler

Serve your router as a standard HTTP/OpenAPI-compatible API — no RPC client required.

Installation

npm install @orpc/openapi

What’s included

The @orpc/openapi package exports:
  • OpenAPIGenerator — generates OpenAPI 3.1.1 specs from routers or contracts (from @orpc/openapi)
  • OpenAPIHandler — serves your API as a standard HTTP handler, available from adapter subpaths: @orpc/openapi/fetch, @orpc/openapi/node, @orpc/openapi/fastify, @orpc/openapi/aws-lambda
  • oo.spec() — customize per-procedure OpenAPI operation objects (from @orpc/openapi)
  • OpenAPIReferencePlugin — serve Scalar or Swagger UI docs (from @orpc/openapi/plugins)
  • CompositeSchemaConverter — combine multiple schema converters (from @orpc/openapi)

Schema converters

OpenAPI spec generation requires a schema converter to translate your validation schemas (Zod, Valibot, ArkType) into JSON Schema. These come from separate packages:

Zod

@orpc/zodZodToJsonSchemaConverter

Valibot

@orpc/valibotexperimental_ValibotToJsonSchemaConverter

ArkType

@orpc/arktypeexperimental_ArkTypeToJsonSchemaConverter

Quick example

import { os } from '@orpc/server'
import { OpenAPIGenerator } from '@orpc/openapi'
import { ZodToJsonSchemaConverter } from '@orpc/zod/zod4'
import * as z from 'zod'

const router = {
  planet: {
    list: os
      .input(z.object({ limit: z.number().int().max(100).optional() }))
      .handler(async ({ input }) => {
        return [{ id: 1, name: 'Earth' }]
      }),
  },
}

const generator = new OpenAPIGenerator({
  schemaConverters: [new ZodToJsonSchemaConverter()],
})

const spec = await generator.generate(router, {
  info: { title: 'Planet API', version: '1.0.0' },
})

console.log(JSON.stringify(spec, null, 2))

Further reading

Generating a Spec

Full guide to OpenAPIGenerator options and usage.

Serving a UI

Serve Scalar or Swagger UI with OpenAPIReferencePlugin.

Schema Converters

How schema conversion works and how to extend it.

Customization

Per-procedure OpenAPI operation customization.

Build docs developers (and LLMs) love