NestJS has established conventions: forRoot() configures once globally, forFeature() configures per-feature module, register() is general-purpose per-use configuration. Each has an async variant (forRootAsync, registerAsync) that accepts a factory with injected dependencies.
forRoot(options) — configure once at the app level, usually makes the module global. Paired with forRootAsync().
forFeature(options) — configure per-feature module; different features get different subsets (e.g., TypeOrmModule.forFeature([User])).
register(options) — general-purpose per-use configuration with no implication of global or feature scope.
registerAsync(options) — async version accepting useFactory with injected dependencies.
Following this convention makes your module immediately understandable to other NestJS developers.