Skip to content

Latest commit

 

History

History
97 lines (78 loc) · 3.2 KB

architecture.md

File metadata and controls

97 lines (78 loc) · 3.2 KB

Twenty Project Architecture

Overview

Twenty is an open-source CRM built with modern technologies, using TypeScript for both frontend and backend development. This document outlines the core architectural decisions and structure of the project.

Monorepo Structure

The project is organized as a monorepo using nx, with the following main packages:

Main Packages

  • packages/twenty-front: Main Frontend application

    • Technology: React
    • Purpose: Provides the main user interface for the CRM
    • Key responsibilities: User interactions, state management, data display
  • packages/twenty-server: Main Backend application

    • Technology: NestJS
    • Purpose: Handles business logic, data persistence, and API
    • Key responsibilities: Data processing, authentication, API endpoints
  • packages/twenty-website: Marketing Website and Documentation

    • Technology: NextJS
    • Purpose: Public-facing website and documentation
    • Key responsibilities: Marketing content, documentation, SEO
  • packages/twenty-ui: UI Component Library

    • Technology: React
    • Purpose: Shared UI components and design system
    • Key responsibilities: Reusable components, design consistency
  • packages/twenty-shared: Shared Utilities

    • Purpose: Cross-package shared code between frontend and backend
    • Contents: Utils, constants, types, interfaces

Core Technology Stack

Package Management

  • Package Manager: yarn
  • Monorepo Tool: nx
  • Benefits: Consistent dependency management, shared configurations

Database Layer

  • Primary Database: PostgreSQL
  • Schema Structure:
    • Core schema: Main application data
    • Metadata schema: Configuration and customization data
    • Workspace schemas: One schema per tenant, containing tenant-specific data
  • ORM Layer:
    • TypeORM: For core and metadata schemas
      • Purpose: Type-safe database operations for system data
      • Benefits: Strong typing, migration support
    • TwentyORM: For workspace schemas
      • Purpose: Manages tenant-specific entities and customizations
      • Benefits: Dynamic entity management, per-tenant customization
      • Example: Entities like CompanyWorkspaceEntity are managed per workspace

State Management

  • Frontend State: Recoil
    • Purpose: Global state management
    • Use cases: User preferences, UI state, cached data

Data Layer

  • API Technology: GraphQL
  • Client: Apollo Client
    • Purpose: Data fetching and caching
    • Benefits: Type safety, efficient data loading

Infrastructure

  • Cache: Redis

    • Purpose: High-performance caching layer
    • Use cases: Session data, frequent queries
  • Authentication: JWT

    • Purpose: Secure user authentication
    • Implementation: Token-based auth flow
  • Queue System: BullMQ

    • Purpose: Background job processing
    • Use cases: Emails, exports, imports
  • Storage: S3/Local Filesystem

    • Purpose: File storage and management
    • Flexibility: Configurable for cloud or local storage

Testing Infrastructure

  • Backend Testing:

    • Framework: Jest
    • API Testing: Supertest
    • Coverage: Unit tests, integration tests
  • Frontend Testing:

    • Framework: Jest
    • Component Testing: Storybook
    • API Mocking: MSW (Mock Service Worker)
  • End-to-End Testing:

    • Framework: Playwright
    • Coverage: Critical user journeys