Configuring Kubb
Kubb is configured with a configuation file (preferably with kubb.config.ts
).
Usage
When you use the CLI of Kubb, Kubb will automatically read the configuration file in the root directory of the current project and resolve it in the following order:
kubb.config.ts
kubb.config.js
kubb.config.mjs
kubb.config.cjs
We recommend using the .ts format for the configuration file and importing the defineConfig
utility function from @kubb/core
. It provides friendly TypeScript type hints and autocompletion, which can help you avoid errors in the configuration.
In the background Kubb uses Cosmiconfig which means you can als use the following:
- A
"kubb"
key in your package.json file. - A
.kubbrc
file written in JSON or YAML. - A
.kubbrc.json
file. - A
.kubbrc.yaml
or.kubbrc.yml
file.
TIP
You can also use configs/kubb.config.ts
or .config/kubb.config.ts
instead of kubb.config.ts
in the root of your project.
DefineConfig
When using TypeScript/JavaScript you need to use defineConfig
to create your config.
export const defineConfig = (
options:
| MaybePromise<KubbUserConfig>
| ((
/** The options derived from the CLI flags */
args: Args,
) => MaybePromise<KubbUserConfig>),
) => options
Basic
TIP
When using an import
statement you need to set "type": "module"
in your package.json
.
You can also rename your file to kubb.config.mjs
to use ESM or kubb.config.cjs
for CJS.
import { defineConfig } from '@kubb/core'
export default defineConfig({
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src/gen',
clean: true,
},
})
Conditional
If the config needs to be conditionally determined based on CLI options flags, it can be exported as a function instead.
Here you can choose between returning the config options synchronously or asynchronously.
import { defineConfig } from '@kubb/core'
export default defineConfig(({ config, watch, logLevel }) => {
return {
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src/gen',
clean: true,
},
}
})
Multiple plugins
TIP
With version 2.x.x
we also support using multiple versions of the same plugin.
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
export default defineConfig(() => {
return {
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src/gen',
},
plugins: [
pluginOas(
{
output: {
path: 'schemas',
},
},
),
pluginOas(
{
output: {
path: 'schemas2',
},
},
),
],
}
})
Multiple configs
TIP
Since version 2.x.x
we also support using multiple configs.
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
export default defineConfig([
{
name: 'petStore',
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src/gen',
},
plugins: [
pluginOas(
{
output: {
path: 'schemas',
},
},
),
],
},
{
name: 'petStoreV2',
root: '.',
input: {
path: './petStoreV2.yaml',
},
output: {
path: './src/gen-v2',
},
plugins: [
pluginOas(
{
output: {
path: 'schemas',
},
},
),
],
},
])