Skip to content

Options

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.

Option Type Default Description
output.barrel { type: 'all' | 'named' } | false false Re-export style for the barrel files
type 'all' | 'named' Required Named exports or a wildcard export
nested boolean false Write an index.ts in every subdirectory

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

Controls how the generated index.ts (barrel) re-exports the output. Accepts { type: 'named' } or { type: 'all' }, optionally with nested: true (for example { type: 'named', nested: true }) to write an index.ts in every subdirectory, or false to skip the barrel entirely. Each generator plugin defaults output.barrel to { type: 'named' }; the root output.barrel on defineConfig defaults to false.

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.

output.barrel defaults to false, so no barrel is generated until 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.

Type: { type: 'all' | 'named', nested?: boolean } | false
Default: false

type

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

  • '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.
Type: 'all' | 'named'
Default: Required, no default
typescript
// src/gen/index.ts
export { getUser, User } from './api/user'
export { getPost, Post } from './api/post'
export { User } from './api/types/User'
typescript
// src/gen/index.ts
export * from './api/user'
export * from './api/post'
export * 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.

Type: boolean
Default: false
typescript
// src/gen/api/index.ts
export * from './user'
export * from './post'
export * from './types/User'

// src/gen/api/types/index.ts
export * from './User'
typescript
// src/gen/api/index.ts re-exports its files and subdirectories
export * from './user'
export * from './post'
export * from './types'

// src/gen/api/types/index.ts re-exports its files
export * from './User'