# Plugin Lifecycle Hooks {#plugin-lifecycle-hooks}


Understand the plugin initialization and teardown lifecycle.


## Lifecycle Phases {#lifecycle-phases}






```mermaid
graph LR
    Module[Module Create] --> Init[onModuleInit]
    Init --> App[App Bootstrap]
    App --> Ready[onApplicationBootstrap]
    Ready --> Running[Running...]
    Running --> Shutdown[onModuleDestroy]
    Shutdown --> Done[beforeApplicationShutdown]
```






## NestJS Lifecycle Hooks {#nestjs-lifecycle-hooks}


| Hook                          | When Called                   |
| ----------------------------- | ----------------------------- |
| `onModuleInit()`              | After module instantiation    |
| `onApplicationBootstrap()`    | After all modules initialized |
| `onModuleDestroy()`           | Before module teardown        |
| `beforeApplicationShutdown()` | Before app stops              |


## Implementation {#implementation}


```typescript
import {
  Module,
  OnModuleInit,
  OnApplicationBootstrap,
  OnModuleDestroy,
} from "@nestjs/common";

@Module({
  /* ... */
})
export class MyPluginModule
  implements OnModuleInit, OnApplicationBootstrap, OnModuleDestroy
{
  async onModuleInit() {
    console.log("Plugin module initialized");
    // Register entities, set up connections
  }

  async onApplicationBootstrap() {
    console.log("Application fully started");
    // Start background tasks, subscribe to events
  }

  async onModuleDestroy() {
    console.log("Plugin shutting down");
    // Cleanup connections, stop timers
  }
}
```


## Common Init Tasks {#common-init-tasks}


| Phase                    | Tasks                                          |
| ------------------------ | ---------------------------------------------- |
| `onModuleInit`           | Register entities, validate config             |
| `onApplicationBootstrap` | Start schedulers, connect to external services |
| `onModuleDestroy`        | Close connections, flush queues                |


## Related Pages {#related-pages}


- [Plugin Dev Quickstart](https://sourcey-gauzy.pages.dev/plugins-built-in/plugin-dev-quickstart/index.md) — getting started
- [Plugin Entity Registration](https://sourcey-gauzy.pages.dev/plugins-built-in/plugin-entity-registration/index.md) — entities
- [Plugin Configuration](https://sourcey-gauzy.pages.dev/plugins-built-in/plugin-configuration/index.md) — config
