Monorepo Structure
Ever Gauzy uses an NX-managed monorepo with Lerna for package management. The repository contains multiple applications, libraries, and plugins organized in a structured hierarchy.
Root Directory Layoutβ
ever-gauzy/
βββ .circleci/ # CircleCI CI/CD configuration
βββ .deploy/ # Deployment configurations
β βββ api/ # API Docker configs
β βββ db/ # Database init scripts
β βββ desktop/ # Desktop app deployment
β βββ desktop-timer/ # Desktop timer deployment
β βββ jitsu/ # Jitsu data ingestion config
β βββ k8s/ # Kubernetes manifests
β βββ mcp/ # MCP server Docker config
β βββ mcp-auth/ # MCP auth server Docker config
β βββ redis/ # Redis configuration
β βββ ssh/ # SSH key management
β βββ webapp/ # Web app deployment
βββ .github/ # GitHub Actions workflows
βββ .scripts/ # Build & configuration scripts
βββ apps/ # Application projects
βββ packages/ # Library packages
βββ docker-compose*.yml # Docker Compose files
βββ nx.json # NX workspace configuration
βββ angular.json # Angular workspace configuration
βββ tsconfig.base.json # Base TypeScript configuration
βββ package.json # Root package.json
βββ lerna.json # Lerna configuration
βββ .env.sample # Environment variable template
Applications (apps/)β
Applications are deployable end-user products:
| Application | Path | Type | Description |
|---|---|---|---|
| API | apps/api | NestJS | Main backend API server |
| Gauzy (Web UI) | apps/gauzy | Angular | Primary web interface |
| Desktop | apps/desktop | Electron | All-in-one desktop app (UI + API + Timer) |
| Desktop Timer | apps/desktop-timer | Electron | Standalone time & activity tracker |
| Server | apps/server | Electron | Desktop server app (embeds API) |
| API Server | apps/api-server | Electron | API-only desktop server |
| Server-API | apps/server-api | NestJS | Server-side API module |
| Server-UI | apps/server-ui | Angular | Server app UI |
| Desktop-UI | apps/desktop-ui | Angular | Desktop app UI |
| Gauzy-E2E | apps/gauzy-e2e | Cypress | End-to-end tests |
| MCP | apps/mcp | Node.js | Model Context Protocol server |
| MCP Auth | apps/mcp-auth | Node.js | MCP OAuth 2.0 server |
Packages (packages/)β
Packages are shared libraries consumed by applications:
Core Librariesβ
| Package | Path | Purpose |
|---|---|---|
| @gauzy/core | packages/core | Core backend module β entities, services, controllers, guards |
| @gauzy/common | packages/common | Shared constants, enums, interfaces, and utilities |
| @gauzy/contracts | packages/contracts | TypeScript interfaces/types shared between frontend and backend |
| @gauzy/config | packages/config | Configuration management and environment loading |
Authentication & Securityβ
| Package | Path | Purpose |
|---|---|---|
| @gauzy/auth | packages/auth | Authentication strategies (JWT, Social OAuth, Magic Login) |
Database & ORMβ
| Package | Path | Purpose |
|---|---|---|
| @gauzy/adapters | packages/adapters | Multi-ORM adapter layer for TypeORM and MikroORM |
Desktopβ
| Package | Path | Purpose |
|---|---|---|
| @gauzy/desktop-libs | packages/desktop-libs | Desktop app shared libraries |
| @gauzy/desktop-ui-lib | packages/desktop-ui-lib | Desktop app Angular UI components |
| @gauzy/desktop-window | packages/desktop-window | Electron window management |
UI Librariesβ
| Package | Path | Purpose |
|---|---|---|
| @gauzy/ui-config | packages/ui-config | UI configuration and feature flags |
| @gauzy/ui-core | packages/ui-core | Core Angular components, services, and pipes |
| @gauzy/ui-sdk | packages/ui-sdk | SDK for building UI extensions |
Pluginsβ
| Package | Path | Purpose |
|---|---|---|
| @gauzy/plugin-changelog | packages/plugins/plugin-changelog | Changelog and audit trail |
| @gauzy/plugin-integration-ai | packages/plugins/plugin-integration-ai | Gauzy AI integration |
| @gauzy/plugin-integration-github | packages/plugins/plugin-integration-github | GitHub integration |
| @gauzy/plugin-integration-hubstaff | packages/plugins/plugin-integration-hubstaff | HubStaff integration |
| @gauzy/plugin-integration-jira | packages/plugins/plugin-integration-jira | Jira integration |
| @gauzy/plugin-integration-make | packages/plugins/plugin-integration-make | Make.com integration |
| @gauzy/plugin-integration-upwork | packages/plugins/plugin-integration-upwork | Upwork integration |
| @gauzy/plugin-integration-zapier | packages/plugins/plugin-integration-zapier | Zapier integration |
| @gauzy/plugin-integration-activepieces | packages/plugins/plugin-integration-activepieces | ActivePieces integration |
| @gauzy/plugin-jitsu-analytics | packages/plugins/jitsu-analytics | Jitsu analytics plugin |
| @gauzy/plugin-job-search | packages/plugins/job-search | Job board search integration |
| @gauzy/plugin-job-search-ui | packages/plugins/job-search-ui | Job search UI components |
| @gauzy/plugin-job-matching-ui | packages/plugins/job-matching-ui | Job matching UI components |
| @gauzy/plugin-job-proposal-ui | packages/plugins/job-proposal-ui | Job proposal UI components |
| @gauzy/plugin-knowledge-base | packages/plugins/knowledge-base | Knowledge base and help center |
| @gauzy/plugin-knowledge-base-ui | packages/plugins/knowledge-base-ui | Knowledge base UI |
| @gauzy/plugin-legal-ui | packages/plugins/legal-ui | Legal pages UI |
| @gauzy/plugin-onboarding-ui | packages/plugins/onboarding-ui | Onboarding flow UI |
| @gauzy/plugin-product-reviews | packages/plugins/product-reviews | Product reviews module |
| @gauzy/plugin-sentry | packages/plugins/sentry | Sentry error tracking |
NX Workspace Configurationβ
nx.jsonβ
The NX configuration defines:
- Task runners β local and cloud (NX Cloud) task execution
- Cache targets β
build,test,lintoperations are cached - Task dependencies β build order between projects
- Default options β output directories, test settings
Task Graphβ
NX manages the dependency graph between projects automatically:
Key NX Commandsβ
# Run a target for a specific project
npx nx serve api
npx nx build gauzy
# Run affected targets (only changed projects)
npx nx affected --target=build
npx nx affected --target=test
# Visualize dependency graph
npx nx graph
# List all projects
npx nx show projects
# Run multiple targets
npx nx run-many --target=build --projects=api,gauzy
TypeScript Configurationβ
The monorepo uses a hierarchical TSConfig setup:
tsconfig.base.json # Base compiler options (strict, ES2022, paths)
βββ apps/api/tsconfig.json
βββ apps/gauzy/tsconfig.json
βββ packages/core/tsconfig.json
βββ packages/*/tsconfig.json
Path aliases are defined in tsconfig.base.json:
{
"compilerOptions": {
"paths": {
"@gauzy/core": ["packages/core/src/index.ts"],
"@gauzy/common": ["packages/common/src/index.ts"],
"@gauzy/contracts": ["packages/contracts/src/index.ts"],
"@gauzy/config": ["packages/config/src/index.ts"],
"@gauzy/auth": ["packages/auth/src/index.ts"],
"@gauzy/adapters": ["packages/adapters/src/index.ts"],
"@gauzy/ui-config": ["packages/ui-config/src/index.ts"],
"@gauzy/ui-core/*": ["packages/ui-core/src/lib/*"]
}
}
}
Build Systemβ
Build Targetsβ
| Target | Description | Caching |
|---|---|---|
build | Compile TypeScript / Angular | β NX cached |
serve | Start dev server | β Not cached |
test | Run unit tests | β NX cached |
lint | Run ESLint | β NX cached |
e2e | Run E2E tests | β Not cached |
Build Orderβ
NX automatically resolves build order via implicit and explicit dependencies. Key principles:
@gauzy/contractsbuilds first (no dependencies)@gauzy/commonbuilds next (depends on contracts)@gauzy/configand@gauzy/authbuild after common@gauzy/corebuilds after all above- Applications (
api,gauzy) build after their dependencies - Plugin packages build after
coreand relevant UI packages
Related Pagesβ
- Technology Stack β frameworks and libraries used
- Backend Architecture β NestJS module structure
- Frontend Architecture β Angular module structure
- Development Guide β working with NX in development