Przejdź do głównej zawartości

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:

ApplicationPathTypeDescription
APIapps/apiNestJSMain backend API server
Gauzy (Web UI)apps/gauzyAngularPrimary web interface
Desktopapps/desktopElectronAll-in-one desktop app (UI + API + Timer)
Desktop Timerapps/desktop-timerElectronStandalone time & activity tracker
Serverapps/serverElectronDesktop server app (embeds API)
API Serverapps/api-serverElectronAPI-only desktop server
Server-APIapps/server-apiNestJSServer-side API module
Server-UIapps/server-uiAngularServer app UI
Desktop-UIapps/desktop-uiAngularDesktop app UI
Gauzy-E2Eapps/gauzy-e2eCypressEnd-to-end tests
MCPapps/mcpNode.jsModel Context Protocol server
MCP Authapps/mcp-authNode.jsMCP OAuth 2.0 server

Packages (packages/)

Packages are shared libraries consumed by applications:

Core Libraries

PackagePathPurpose
@gauzy/corepackages/coreCore backend module — entities, services, controllers, guards
@gauzy/commonpackages/commonShared constants, enums, interfaces, and utilities
@gauzy/contractspackages/contractsTypeScript interfaces/types shared between frontend and backend
@gauzy/configpackages/configConfiguration management and environment loading

Authentication & Security

PackagePathPurpose
@gauzy/authpackages/authAuthentication strategies (JWT, Social OAuth, Magic Login)

Database & ORM

PackagePathPurpose
@gauzy/adapterspackages/adaptersMulti-ORM adapter layer for TypeORM and MikroORM

Desktop

PackagePathPurpose
@gauzy/desktop-libspackages/desktop-libsDesktop app shared libraries
@gauzy/desktop-ui-libpackages/desktop-ui-libDesktop app Angular UI components
@gauzy/desktop-windowpackages/desktop-windowElectron window management

UI Libraries

PackagePathPurpose
@gauzy/ui-configpackages/ui-configUI configuration and feature flags
@gauzy/ui-corepackages/ui-coreCore Angular components, services, and pipes
@gauzy/ui-sdkpackages/ui-sdkSDK for building UI extensions

Plugins

PackagePathPurpose
@gauzy/plugin-changelogpackages/plugins/plugin-changelogChangelog and audit trail
@gauzy/plugin-integration-aipackages/plugins/plugin-integration-aiGauzy AI integration
@gauzy/plugin-integration-githubpackages/plugins/plugin-integration-githubGitHub integration
@gauzy/plugin-integration-hubstaffpackages/plugins/plugin-integration-hubstaffHubStaff integration
@gauzy/plugin-integration-jirapackages/plugins/plugin-integration-jiraJira integration
@gauzy/plugin-integration-makepackages/plugins/plugin-integration-makeMake.com integration
@gauzy/plugin-integration-upworkpackages/plugins/plugin-integration-upworkUpwork integration
@gauzy/plugin-integration-zapierpackages/plugins/plugin-integration-zapierZapier integration
@gauzy/plugin-integration-activepiecespackages/plugins/plugin-integration-activepiecesActivePieces integration
@gauzy/plugin-jitsu-analyticspackages/plugins/jitsu-analyticsJitsu analytics plugin
@gauzy/plugin-job-searchpackages/plugins/job-searchJob board search integration
@gauzy/plugin-job-search-uipackages/plugins/job-search-uiJob search UI components
@gauzy/plugin-job-matching-uipackages/plugins/job-matching-uiJob matching UI components
@gauzy/plugin-job-proposal-uipackages/plugins/job-proposal-uiJob proposal UI components
@gauzy/plugin-knowledge-basepackages/plugins/knowledge-baseKnowledge base and help center
@gauzy/plugin-knowledge-base-uipackages/plugins/knowledge-base-uiKnowledge base UI
@gauzy/plugin-legal-uipackages/plugins/legal-uiLegal pages UI
@gauzy/plugin-onboarding-uipackages/plugins/onboarding-uiOnboarding flow UI
@gauzy/plugin-product-reviewspackages/plugins/product-reviewsProduct reviews module
@gauzy/plugin-sentrypackages/plugins/sentrySentry error tracking

NX Workspace Configuration

nx.json

The NX configuration defines:

  • Task runners — local and cloud (NX Cloud) task execution
  • Cache targetsbuild, test, lint operations 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

TargetDescriptionCaching
buildCompile TypeScript / Angular✅ NX cached
serveStart dev server❌ Not cached
testRun unit tests✅ NX cached
lintRun ESLint✅ NX cached
e2eRun E2E tests❌ Not cached

Build Order

NX automatically resolves build order via implicit and explicit dependencies. Key principles:

  1. @gauzy/contracts builds first (no dependencies)
  2. @gauzy/common builds next (depends on contracts)
  3. @gauzy/config and @gauzy/auth build after common
  4. @gauzy/core builds after all above
  5. Applications (api, gauzy) build after their dependencies
  6. Plugin packages build after core and relevant UI packages