# ConfigurableModuleBuilderOptions

**Kind:** Interface

**Source:** [`packages/common/module-utils/configurable-module.builder.ts`](https://github.com/nestjs/nest/blob/master/packages/common/module-utils/configurable-module.builder.ts#L23)

**Part of:** [Common](subsystem-packages-common)

`ConfigurableModuleBuilderOptions` configures how a configurable module is generated by Nest's module utilities. It defines the injection token used for module options, the module name used in generated APIs, and whether each registration should create a transient module instance.

## Properties

| Property | Type |
|---|---|
| `optionsInjectionToken` | `string | symbol` |
| `moduleName` | `string` |
| `alwaysTransient` | `boolean` |

## Diagram

```mermaid
graph LR
  A[ConfigurableModuleBuilderOptions] --> B[optionsInjectionToken]
  A --> C[moduleName]
  A --> D[alwaysTransient]

  B --> E[Inject module configuration]
  C --> F[Generate named registration methods]
  D --> G[Control module instance reuse]
```

## Usage

```ts
import { ConfigurableModuleBuilder } from '@nestjs/common';

export interface DatabaseModuleOptions {
  uri: string;
  poolSize?: number;
}

const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } =
  new ConfigurableModuleBuilder<DatabaseModuleOptions>({
    moduleName: 'Database',
    optionsInjectionToken: Symbol('DATABASE_MODULE_OPTIONS'),
    alwaysTransient: false,
  }).build();

export { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN };
```

## AI Coding Instructions

- Use `optionsInjectionToken` when consumers need to inject module configuration into providers; prefer a `Symbol` to avoid token collisions.
- Set `moduleName` to a stable, descriptive name because it affects generated configurable-module APIs and diagnostics.
- Enable `alwaysTransient` only when every `register()` or `registerAsync()` call must create a distinct dynamic module instance.
- Keep the options interface aligned with the generic passed to `ConfigurableModuleBuilder<TOptions>`.
- Export the generated module class and options token so feature providers can register and inject configuration consistently.
