# Plugin Development Quickstart {#plugin-development-quickstart}


Create a custom plugin for Ever Gauzy in 10 minutes.


## Prerequisites {#prerequisites}


- Node.js 20+
- Gauzy development environment set up
- Understanding of NestJS modules


## Step 1: Generate Plugin Skeleton {#step-1-generate-plugin-skeleton}


```bash
mkdir packages/plugins/my-awesome-plugin
cd packages/plugins/my-awesome-plugin
```

Create the file structure:

```
my-awesome-plugin/
├── src/
│   ├── index.ts
│   ├── my-awesome-plugin.module.ts
│   ├── my-awesome-plugin.service.ts
│   └── my-awesome-plugin.controller.ts
├── package.json
└── tsconfig.json
```


## Step 2: Define the Module {#step-2-define-the-module}


```typescript
// src/my-awesome-plugin.module.ts
import { Module } from "@nestjs/common";
import { MyAwesomeService } from "./my-awesome-plugin.service";
import { MyAwesomeController } from "./my-awesome-plugin.controller";

@Module({
  controllers: [MyAwesomeController],
  providers: [MyAwesomeService],
  exports: [MyAwesomeService],
})
export class MyAwesomePluginModule {}
```


## Step 3: Create a Service {#step-3-create-a-service}


```typescript
// src/my-awesome-plugin.service.ts
import { Injectable } from "@nestjs/common";

@Injectable()
export class MyAwesomeService {
  getHello(): string {
    return "Hello from My Awesome Plugin!";
  }
}
```


## Step 4: Add a Controller {#step-4-add-a-controller}


```typescript
// src/my-awesome-plugin.controller.ts
import { Controller, Get } from "@nestjs/common";
import { MyAwesomeService } from "./my-awesome-plugin.service";

@Controller("my-awesome")
export class MyAwesomeController {
  constructor(private readonly service: MyAwesomeService) {}

  @Get()
  hello() {
    return this.service.getHello();
  }
}
```


## Step 5: Register the Plugin {#step-5-register-the-plugin}


Add to `packages/core/src/app.module.ts`:

```typescript
import { MyAwesomePluginModule } from "@gauzy/plugin-my-awesome";

@Module({
  imports: [
    // ... other modules
    MyAwesomePluginModule,
  ],
})
export class AppModule {}
```


## Step 6: Test {#step-6-test}


```bash
yarn start:api
curl http://localhost:3000/api/my-awesome
# → "Hello from My Awesome Plugin!"
```


## Next Steps {#next-steps}


- Add entities — [Plugin Entity Registration](https://sourcey-gauzy.pages.dev/plugins-built-in/plugin-entity-registration/index.md)
- Add lifecycle hooks — [Plugin Lifecycle](https://sourcey-gauzy.pages.dev/plugins-built-in/plugin-lifecycle/index.md)
- Test your plugin — [Plugin Testing](https://sourcey-gauzy.pages.dev/plugins-built-in/plugin-testing/index.md)


## Related Pages {#related-pages}


- [Plugin Overview](https://sourcey-gauzy.pages.dev/plugins-built-in/overview/index.md) — plugin system
- [Plugin API Reference](https://sourcey-gauzy.pages.dev/plugins-built-in/plugin-api-reference/index.md) — full API
