Skip to content
Reference

Options

Configuration options for @kubb/plugin-barrel. Sets the re-export style for the index.ts barrel files Kubb generates.

pluginBarrel takes no arguments. You configure it through output.barrel, either on defineConfig to set the root barrel and the default every plugin inherits, or on a single plugin to override that plugin's barrel. The plugin-level behavior is also summarized under output.barrel in the shared plugin options.

Options overview

OptionPurposeDefault
output.barrelRe-export style for the barrel files.false on defineConfig, { type: 'named' } in every generator plugin's default output
↳ output.barrel.typeNamed exports or a wildcard export.Required when output.barrel is an object
↳ output.barrel.nestedChoose whether barrels reference subdirectory barrels.false

Option details

output.barrel

Toggle the export style and depth to see the generated barrels.

  • src/gen/
  • models/
  • Pet.ts
  • User.ts
  • clients/
  • pet/
  • getPetById.ts
  • store/
  • getInventory.ts
src/gen/index.ts
export { Pet, User } from './models'
export { getPetById, getInventory } from './clients'
Type{ type: 'all' | 'named', nested?: boolean } | false
Requiredfalse
Defaultfalse

The type field picks the export style. A plugin's output.barrel also accepts nested, so the plugin writes an index.ts in every subdirectory. The root output.barrel has no nested field and always stays flat.

Call a plugin with no output at all and it uses its own default, which already sets barrel: { type: 'named' }. The moment you pass an output object of your own, that default is replaced whole, so a plugin configured as pluginTs({ output: { path: 'types' } }) has no barrel of its own and falls back to config.output.barrel, which is false unless you set it.

Set barrel: { type: 'named' | 'all' } on defineConfig to enable barrels everywhere: a root barrel, and the default every plugin without its own output.barrel inherits. A plugin that sets its own output.barrel overrides that inherited value, including back to false, which also drops its files from the root barrel. A plugin with output.mode: 'file' gets no barrel of its own, and the root barrel re-exports that file directly.

type

Export style for the barrel files. Required whenever output.barrel is set to an object.

Type'all' | 'named'
Requiredtrue
'named'
Re-exports each symbol by name from the file's named exports. Best for tree-shaking and explicit imports.
'all'
Uses export *, a smaller barrel that re-exports everything.
// src/gen/index.ts
export { getUser, User } from './api/user'
export { getPost, Post } from './api/post'
export { User } from './api/types/User'

nested

Changes what each barrel references. A barrel is written for every directory either way. With nested: false, the plugin's top barrel reaches through to the leaf files. With nested: true, each barrel re-exports only what sits directly inside its directory, including the subdirectory barrels below it, so callers can import from any depth. This field works on a plugin's output.barrel only.

Typeboolean
Requiredfalse
Defaultfalse
// src/gen/api/index.ts
export * from './user'
export * from './post'
export * from './types/User'

// src/gen/api/types/index.ts
export * from './User'