πŸ’» Development Guide

Plugin System

Ever Gauzy supports a plugin architecture for extending functionality.

Plugin Structure

packages/plugins/
β”œβ”€β”€ plugin-integration-github/     # GitHub integration
β”œβ”€β”€ plugin-integration-upwork/     # Upwork integration
β”œβ”€β”€ plugin-integration-hubstaff/   # HubStaff integration
β”œβ”€β”€ plugin-integration-jira/       # Jira integration
β”œβ”€β”€ plugin-integration-wakatime/   # Wakatime integration
β”œβ”€β”€ plugin-job-search/             # Job search
β”œβ”€β”€ plugin-job-matching/           # AI job matching
β”œβ”€β”€ plugin-knowledge-base/         # KB module
β”œβ”€β”€ plugin-changelog/              # Changelog tracking
└── plugin-product-reviews/        # Product reviews

Creating a Plugin

1. Create Module

import { Module } from "@nestjs/common";

@Module({
  imports: [],
  providers: [CustomPluginService],
  controllers: [CustomPluginController],
  exports: [CustomPluginService],
})
export class CustomPluginModule {}

2. Register Plugin

// In PluginModule or AppModule
@Module({
  imports: [
    // ... core modules
    CustomPluginModule,
  ],
})
export class AppModule {}

3. Add Entities

@MultiORMEntity("custom_plugin_data")
export class CustomPluginData extends TenantOrganizationBaseEntity {
  @MultiORMColumn()
  name: string;

  @MultiORMColumn({ nullable: true })
  value: string;
}

4. Register Entity

Add your entity to the plugin's module:

TypeOrmModule.forFeature([CustomPluginData]);
MikroOrmModule.forFeature([CustomPluginData]);

Plugin Guidelines

  • βœ… Extend TenantOrganizationBaseEntity for tenant scoping
  • βœ… Use Multi-ORM decorators
  • βœ… Define API contracts in @gauzy/contracts
  • βœ… Follow existing service/controller patterns
  • ❌ Don't modify core entities directly
  • ❌ Don't bypass tenant filtering

Edit this page

Copyright Β© 2023-Present Ever Co. LTD.Docs by Sourcey