Skip to main content

Built-in Plugins Overview

Ever Gauzy uses a plugin-based architecture to extend the platform with optional features, integrations, analytics, and media capture capabilities. Built-in plugins are NestJS dynamic modules that ship with the monorepo and are registered through the PluginModule system at bootstrap time.

Architecture​

Each plugin:

  • Registers its own entities, services, and controllers
  • Can extend existing entities with custom fields
  • Runs migrations independently
  • Has its own configuration via environment variables

Plugin Types​

Backend Plugins​

Backend plugins can add:

CapabilityDescription
EntitiesNew database tables/columns
ControllersNew API endpoints
ServicesBusiness logic
Commands/QueriesCQRS handlers
Event HandlersReact to platform events
MiddlewareRequest processing
GuardsAuthorization rules

UI Plugins​

UI plugins provide:

CapabilityDescription
PagesNew routes and views
ComponentsReusable UI components
ModulesAngular feature modules
ServicesFrontend business logic

Available Built-in Plugins​

Integration Plugins​

PluginPackageDescription
AI@gauzy/plugin-integration-aiGauzy AI assistant, NLP, smart matching
GitHub@gauzy/plugin-integration-githubIssue sync, PRs, repos, webhooks
Upwork@gauzy/plugin-integration-upworkTime tracking and contract sync
HubStaff@gauzy/plugin-integration-hubstaffTime tracking sync
Jira@gauzy/plugin-integration-jiraIssue tracking sync
WakaTime@gauzy/plugin-integration-wakatimeDeveloper metrics
SIM@gauzy/plugin-integration-simAI workflow orchestration

Automation Plugins​

PluginPackageDescription
Zapier@gauzy/plugin-integration-zapier5,000+ app automations
Make@gauzy/plugin-integration-makeVisual workflow builder
Activepieces@gauzy/plugin-integration-activepiecesOpen-source automation

Feature Plugins​

PluginPackageDescription
Knowledge Base@gauzy/plugin-knowledge-baseHelp center / knowledge base
Product Reviews@gauzy/plugin-product-reviewsProduct review system
Job Search@gauzy/plugin-job-searchJob board search integration
Job Proposal@gauzy/plugin-job-proposalJob proposal management
Changelog@gauzy/plugin-changelogRelease changelog management

Analytics & Monitoring Plugins​

PluginPackageDescription
Sentry@gauzy/plugin-sentryError tracking & performance
Analytics@gauzy/plugin-jitsu-analyticsProduct analytics, event tracking

Media & Capture Plugins​

PluginPackageDescription
Media Capturecamshot, soundshot, videosScreenshot, audio, video capture

UI Plugins​

UI plugins extend the frontend with pages, navigation, tabs, and dashboard widgets. They are registered in apps/gauzy/src/plugin-ui.config.ts and built on the Plugin UI System (@gauzy/plugin-ui).

Integration UI​

PluginPackageDescription
Upwork UI@gauzy/plugin-integration-upwork-uiUpwork authorization, contracts, reports, transactions
GitHub UI@gauzy/plugin-integration-github-uiGitHub integration settings UI

Jobs UI (Plugin Group)​

The Jobs UI plugins use a parent-child architecture. JobsPlugin is the parent; child plugins contribute tabs:

PluginPackageTab / PagePermission
JobsPlugin@gauzy/plugin-jobs-ui/pages/jobs (parent layout)FEATURE_JOB
JobEmployeePlugin@gauzy/plugin-job-employee-uiEmployee tabORG_JOB_EMPLOYEE_VIEW
JobSearchPlugin@gauzy/plugin-job-search-uiBrowse tabORG_JOB_SEARCH
JobMatchingPlugin@gauzy/plugin-job-matching-uiMatching tabORG_JOB_MATCHING_VIEW
JobProposalTemplatePlugin@gauzy/plugin-job-proposal-uiProposal Template tabORG_PROPOSAL_TEMPLATES_VIEW
JobProposalPlugin@gauzy/plugin-job-proposal-ui/pages/sales/proposalsORG_PROPOSALS_VIEW

Dashboard UI​

PluginPackageDescription
Dashboard Time Track React UI@gauzy/plugin-dashboard-time-track-react-uiReact-based time tracking widgets (demo only)

Other UI Plugins​

PluginPackageDescription
Knowledge Base UI@gauzy/plugin-knowledge-base-uiKnowledge base frontend
Onboarding UI@gauzy/plugin-onboarding-uiSetup/onboarding wizard UI
Legal UI@gauzy/plugin-legal-uiPrivacy/Terms pages

UI Plugin Registration​

All UI plugins are registered in a single config file β€” apps/gauzy/src/plugin-ui.config.ts:

import { IntegrationUpworkPlugin } from '@gauzy/plugin-integration-upwork-ui';
import { JobsPlugin } from '@gauzy/plugin-jobs-ui';
import { JobProposalPlugin, JobProposalTemplatePlugin } from '@gauzy/plugin-job-proposal-ui';
import { JobEmployeePlugin } from '@gauzy/plugin-job-employee-ui';
import { JobSearchPlugin } from '@gauzy/plugin-job-search-ui';
import { JobMatchingPlugin } from '@gauzy/plugin-job-matching-ui';
import { DashboardTimeTrackReactUiPlugin } from '@gauzy/plugin-dashboard-time-track-react-ui';

export const uiPluginConfig: PluginUiConfig = {
// ... i18n config
plugins: [
// Flat plugin
IntegrationUpworkPlugin,

// Plugin group β€” parent with child plugins
JobsPlugin.init({
plugins: [
JobProposalPlugin,
JobEmployeePlugin,
JobSearchPlugin,
JobMatchingPlugin,
JobProposalTemplatePlugin
]
}),

// Conditional β€” demo environments only
...(environment.DEMO ? [DashboardTimeTrackReactUiPlugin] : [])
]
};

For the full Plugin UI architecture, see the Plugin UI System guide. To build your own UI plugin, see Getting Started.

Plugin Loading & Registration​

Plugins are loaded through the PluginModule in the API bootstrap:

// apps/api/src/plugin-config.ts
@Module({
imports: [
PluginModule.init({
plugins: [
IntegrationAIModule,
IntegrationGitHubModule,
SentryTracingModule,
// ... more plugins
],
}),
],
})
export class AppModule {}

The platform discovers and dynamically imports each plugin into the NestJS dependency injection container.

Plugin Configuration​

Integration Plugin Pattern​

Integration plugins follow a common pattern:

@Module({
imports: [
TypeOrmModule.forFeature([IntegrationEntity, IntegrationSetting]),
HttpModule,
],
controllers: [IntegrationController],
providers: [
IntegrationService,
IntegrationCommandHandler,
IntegrationEventHandler,
],
})
export class IntegrationPluginModule {
// Register OAuth callbacks, webhook endpoints, and settings
}

Environment-Based Activation​

Most plugins are controlled by environment variables:

# Feature flags
FEATURE_APP_INTEGRATION=true
FEATURE_JOB=true
FEATURE_ORGANIZATION_HELP_CENTER=true

# Integration-specific credentials
GAUZY_AI_GRAPHQL_ENDPOINT=http://localhost:3005/graphql
GITHUB_CLIENT_ID=your-github-id
HUBSTAFF_CLIENT_ID=your-hubstaff-id
JIRA_CLIENT_ID=your-jira-id

Creating a Custom Plugin​

Step 1: Create Plugin Module​

// packages/plugins/my-plugin/src/lib/my-plugin.module.ts
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { MikroOrmModule } from "@mikro-orm/nestjs";
import { MyPluginEntity } from "./my-plugin.entity";
import { MyPluginService } from "./my-plugin.service";
import { MyPluginController } from "./my-plugin.controller";

@Module({
imports: [
TypeOrmModule.forFeature([MyPluginEntity]),
MikroOrmModule.forFeature([MyPluginEntity]),
],
controllers: [MyPluginController],
providers: [MyPluginService],
exports: [MyPluginService],
})
export class MyPluginModule {}

Step 2: Define Entity​

import { MultiORMEntity, MultiORMColumn } from "@gauzy/core";
import { TenantOrganizationBaseEntity } from "@gauzy/core";

@MultiORMEntity("my_plugin_data")
export class MyPluginEntity extends TenantOrganizationBaseEntity {
@MultiORMColumn()
name: string;

@MultiORMColumn({ type: "jsonb", nullable: true })
config?: Record<string, any>;
}

Step 3: Create Service​

import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { TenantAwareCrudService } from "@gauzy/core";
import { MyPluginEntity } from "./my-plugin.entity";

@Injectable()
export class MyPluginService extends TenantAwareCrudService<MyPluginEntity> {
constructor(
@InjectRepository(MyPluginEntity)
private readonly myPluginRepository,
) {
super(myPluginRepository);
}
}

Step 4: Register the Plugin​

Add the plugin module to your API configuration:

// apps/api/src/plugin-config.ts
import { MyPluginModule } from "@gauzy/plugin-my-plugin";

export const pluginConfig = {
plugins: [
MyPluginModule,
// ... other plugins
],
};

For a deeper dive into plugin development, see the Plugin System guide.