ื“ืœื’ ืœืชื•ื›ืŸ ื”ืจืืฉื™

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