File: README.md
openapi-typescript
Tools for consuming OpenAPI schemas in TypeScript.
π¦ Packages
Generate TypeScript types from static OpenAPI schemas Ultra-fast fetching for TypeScript generated automatically from your OpenAPI schema.β Sponsors
π₯ Gold Sponsors
π₯ Silver Sponsors
Backers
Become a sponsor by supporting this project on OpenCollective!
π€ Contributing
Contributions are appreciated and welcome! See the appropriate guide for each package:
β₯οΈ Thanks
- Thanks to the Project Sponsors for keeping this project going!
- Thanks to dozens of lovely, smart contributors that made this library possible
- Thanks to Vitepress for the docs site
- Thanks to Cloudflare Pages for docs site hosting
- Thanks to Algolia for the docs site search
File: docs/index.md
https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "OpenAPI TypeScript"
tagline: Convert OpenAPI 3.0/3.1Β schemas to TypeScript types and create type-safe fetching.
actions:
- theme: brand
text: Get Started
link: /introduction
- theme: alt
text: View on GitHub
link: https://github.com/openapi-ts/openapi-typescript
features:
- title: Blazing Fast
details: Nothing is faster than instant. Static TypeScript types provide zero runtime cost and zero client weight. - title: Type-safe
details: Use your OpenAPI schema to typecheck your entire codebase with no setup and no tests. - title: Works anywhere
details: Runs anywhere TypeScript does. Works for any stack and any framework.
Used by
Sponsors
Become a sponsor by supporting this project on OpenCollective!
File: docs/README.md
openapi-typescript Docs
Docs site powered by Vitepress, an ergonomic docs site template powered by Vite.
Lives at https://openapi-ts.dev.
Setup
Setup requires the latest version of Node.js and pnpm. With both installed, run:
pnpm i
pnpm run devThat will launch the docs site at http://localhost:5173.
Editing
All content lives in .md files that feature normal Markdown content with powerful Vitepress extensions.
Contributing
Docs contributions are welcome! Please refer to CONTRIBUTING.md for additional assistance.
File: docs/introduction.md
title: openapi-typescript
openapi-typescript turns OpenAPI 3.0 & 3.1 schemas into TypeScript quickly using Node.js. No Java/node-gyp/running OpenAPI servers necessary.
The code is MIT-licensed and free for use.
::: tip
New to OpenAPI? Speakeasyβs Intro to OpenAPI is an accessible guide to newcomers that explains the βwhyβ and βhowβ of OpenAPI.
:::
Features
- β Supports OpenAPI 3.0 and 3.1 (including advanced features like discriminators)
- β Generate runtime-free types that outperform old school codegen
- β Load schemas from YAML or JSON, locally or remotely
- β Generate types for even huge schemas within milliseconds
Note: OpenAPI 2.x is supported with versions 5.x and previous
Examples
π See examples
Setup
This library requires the latest version of Node.js installed (20.x or higher recommended). With that present, run the following in your project:
npm i -D openapi-typescript typescriptAnd in your tsconfig.json, to load the types properly:
::: code-group
{
"compilerOptions": {
"module": "ESNext", // or "NodeNext" // [!code ++]
"moduleResolution": "Bundler" // or "NodeNext" // [!code ++]
}
}:::
::: tip Highly recommended
Also adding the following can boost type safety:
::: code-group
{
"compilerOptions": {
"noUncheckedIndexedAccess": true // [!code ++]
}
}:::
Basic usage
First, generate a local type file by running npx openapi-typescript, first specifying your input schema (JSON or YAML), and where youβd like the --output (-o) to be saved:
# Local schema
npx openapi-typescript ./path/to/my/schema.yaml -o ./path/to/my/schema.d.ts
# π ./path/to/my/schema.yaml -> ./path/to/my/schema.d.ts [7ms]
# Remote schema
npx openapi-typescript https://myapi.dev/api/v1/openapi.yaml -o ./path/to/my/schema.d.ts
# π https://myapi.dev/api/v1/openapi.yaml -> ./path/to/my/schema.d.ts [250ms]Then in your TypeScript project, import types where needed:
::: code-group
import type { paths, components } from "./my-openapi-3-schema"; // generated by openapi-typescript
// Schema Obj
type MyType = components["schemas"]["MyType"];
// Path params
type EndpointParams = paths["/my/endpoint"]["parameters"];
// Response obj
type SuccessResponse =
paths["/my/endpoint"]["get"]["responses"][200]["content"]["application/json"]["schema"];
type ErrorResponse =
paths["/my/endpoint"]["get"]["responses"][500]["content"]["application/json"]["schema"];:::
From here, you can use these types for any of the following (but not limited to):
- Using an OpenAPI-supported fetch client (like openapi-fetch)
- Asserting types for other API requestBodies and responses
- Building core business logic based on API types
- Validating mock test data is up-to-date with the current schema
- Packaging API types into any npm packages you publish (such as client SDKs, etc.)