Skip to content

Basic tutorial

This tutorial will describe how you can set up Kubb and use the @kubb/swagger-ts plugin to generate types based on the petStore.yaml file.

The setup will contain from the beginning the following folder structure:

.
├── src
├── petStore.yaml
├── kubb.config.ts
└── package.json

Step one

Set up your kubb.config.ts file based on the Quick start.

We will add the plugins @kubb/swagger and @kubb/swagger-ts(which is dependent on the @kubb/swagger plugin). Together these two plugins will generate the TypeScript types.

Next to that, we will also set output to false for the @kubb/swagger plugin because we do not need the plugin to generate the JSON schemas for us.

typescript
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/swagger-ts'

export default defineConfig(() => {
  return {
    root: '.',
    input: {
      path: './petStore.yaml',
    },
    output: {
      path: './src',
    },
    plugins: [
      pluginOas(
        {
          output: false,
          validate: true,
        },
      ),
      pluginTs(
        {
          output: {
            path: 'models',
          },
        },
      ),
    ],
  }
})

This will result in the following folder structure when Kubb has been executed

.
├── src/
│   └── models/
│       ├── typeA.ts
│       └── typeB.ts
├── petStore.yaml
├── kubb.config.ts
└── package.json

Step two

Update your package.json and install Kubb, see the installation.

Your package.json will look like this:

json
{
  "name": "your project",
  "scripts": {
    "generate": "kubb generate --config kubb.config.js"
  },
  "dependencies": {
    "@kubb/cli": "latest",
    "@kubb/core": "latest",
    "@kubb/swagger": "latest",
    "@kubb/swagger-ts": "latest"
  }
}

Step three

Run the Kubb script with the following command.

shell
bun run generate
shell
pnpm run generate
shell
npm run generate
shell
yarn run generate

Step four

Drink a 🍺 and watch Kubb generate your files.

Kubb generation

Released under the MIT License.