# mattey2026/twenty architecture

> Architecture diagram of the GitHub repository mattey2026/twenty, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mattey2026/twenty
- Repository: https://github.com/mattey2026/twenty

## Overview

Twenty is an open-source, extensible CRM. Users work with CRM records and activities in the client; server query runners process record operations, while charting and messaging provide distinct CRM capabilities. Developers can extend a workspace with apps, including the call-recorder integration, and discover apps through the marketplace. The README documents objects, views, workflows, and agents as product primitives. The supplied tree and excerpts expose only selected client and server modules, so links between broader UI, API, and unsampled capabilities are intentionally not inferred.

Main entry points: [`packages/twenty-server/src/engine/api/common/common-query-runners/common-base-query-runner.service.ts`](https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/api/common/common-query-runners/common-base-query-runner.service.ts) (Record query runner), [`packages/twenty-front/src/modules/navigation-menu-item/edit/hooks/useNavigationMenuItemEditController.ts`](https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/navigation-menu-item/edit/hooks/useNavigationMenuItemEditController.ts) (Navigation editor), [`packages/twenty-apps/public/call-recorder/src/front-components/generate-call-recording-summary-effect.front-component.tsx`](https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/front-components/generate-call-recording-summary-effect.front-component.tsx) (Summary generation), [`packages/twenty-apps/public/call-recorder/src/command-menu-items/generate-call-recording-summary.ts`](https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/command-menu-items/generate-call-recording-summary.ts) (Summary command)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["CRM client"]
  node_nav_edit["Navigation editor"]
  node_activities["Activity queries"]
  node_command_state["Command state"]
  node_dialog["Dialog manager"]
end

subgraph group_server["CRM services"]
  node_query_runner["Record query runner"]
  node_create_many["Bulk record creation"]
  node_chart_data["Chart data"]
  node_message_ingest["Message ingestion"]
end

subgraph group_extensions["App extensions"]
  node_application["Application lifecycle"]
  node_marketplace["App marketplace"]
  node_app_cli["App scaffolding<br/>[cli.ts]"]
  node_template["Starter app"]
end

subgraph group_integration["Call recording"]
  node_recording_ui["Recorder settings"]
  node_recording_effect["Summary generation"]
  node_summary_command["Summary command"]
  node_summary_agent["Summary agent"]
end

node_user(("CRM user"))

node_user -->|"edits menu"| node_nav_edit
node_nav_edit --> node_query_runner
node_query_runner --> node_create_many
node_query_runner --> node_chart_data
node_message_ingest --> node_application
node_app_cli -->|"scaffolds"| node_template
node_marketplace -->|"reads app details"| node_application
node_user -.->|"configures"| node_recording_ui
node_user -.->|"requests summary"| node_summary_command
node_summary_command --> node_recording_effect
node_recording_effect -.-> node_summary_agent

click node_nav_edit "https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/navigation-menu-item/edit/hooks/useNavigationMenuItemEditController.ts"
click node_activities "https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts"
click node_command_state "https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/command-menu-item/engine-command/hooks/useUnmountEngineCommand.ts"
click node_dialog "https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/ui/feedback/dialog-manager/hooks/useDialogManager.ts"
click node_query_runner "https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/api/common/common-query-runners/common-base-query-runner.service.ts"
click node_create_many "https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/api/common/common-query-runners/common-create-many-query-runner/common-create-many-query-runner.service.ts"
click node_chart_data "https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/modules/dashboard/chart-data/services/chart-data-query.service.ts"
click node_message_ingest "https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/metadata-modules/message-channel/services/application-message-ingestion.service.ts"
click node_application "https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/core-modules/application/application.service.ts"
click node_marketplace "https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/core-modules/application/application-marketplace/marketplace-query.service.ts"
click node_app_cli "https://github.com/mattey2026/twenty/blob/main/packages/create-twenty-app/src/cli.ts"
click node_template "https://github.com/mattey2026/twenty/blob/main/packages/create-twenty-app/src/constants/template/src/application-config.ts"
click node_recording_ui "https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/front-components/settings.front-component.tsx"
click node_recording_effect "https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/front-components/generate-call-recording-summary-effect.front-component.tsx"
click node_summary_command "https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/command-menu-items/generate-call-recording-summary.ts"
click node_summary_agent "https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/agents/call-recording-summarizer.agent.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_nav_edit,node_activities,node_command_state,node_dialog,node_user toneBlue
class node_query_runner,node_create_many,node_chart_data,node_message_ingest toneAmber
class node_application,node_marketplace,node_app_cli,node_template toneMint
class node_recording_ui,node_recording_effect,node_summary_command,node_summary_agent toneRose
```

## Components

### CRM client

- [Navigation editor](https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/navigation-menu-item/edit/hooks/useNavigationMenuItemEditController.ts): `packages/twenty-front/src/modules/navigation-menu-item/edit/hooks/useNavigationMenuItemEditController.ts`
- [Activity queries](https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts): `packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts`
- [Command state](https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/command-menu-item/engine-command/hooks/useUnmountEngineCommand.ts): `packages/twenty-front/src/modules/command-menu-item/engine-command/hooks/useUnmountEngineCommand.ts`
- [Dialog manager](https://github.com/mattey2026/twenty/blob/main/packages/twenty-front/src/modules/ui/feedback/dialog-manager/hooks/useDialogManager.ts): `packages/twenty-front/src/modules/ui/feedback/dialog-manager/hooks/useDialogManager.ts`

### CRM services

- [Record query runner](https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/api/common/common-query-runners/common-base-query-runner.service.ts): `packages/twenty-server/src/engine/api/common/common-query-runners/common-base-query-runner.service.ts`
- [Bulk record creation](https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/api/common/common-query-runners/common-create-many-query-runner/common-create-many-query-runner.service.ts): `packages/twenty-server/src/engine/api/common/common-query-runners/common-create-many-query-runner/common-create-many-query-runner.service.ts`
- [Chart data](https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/modules/dashboard/chart-data/services/chart-data-query.service.ts): `packages/twenty-server/src/modules/dashboard/chart-data/services/chart-data-query.service.ts`
- [Message ingestion](https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/metadata-modules/message-channel/services/application-message-ingestion.service.ts): `packages/twenty-server/src/engine/metadata-modules/message-channel/services/application-message-ingestion.service.ts`

### App extensions

- [Application lifecycle](https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/core-modules/application/application.service.ts): `packages/twenty-server/src/engine/core-modules/application/application.service.ts`
- [App marketplace](https://github.com/mattey2026/twenty/blob/main/packages/twenty-server/src/engine/core-modules/application/application-marketplace/marketplace-query.service.ts): `packages/twenty-server/src/engine/core-modules/application/application-marketplace/marketplace-query.service.ts`
- [App scaffolding](https://github.com/mattey2026/twenty/blob/main/packages/create-twenty-app/src/cli.ts): `packages/create-twenty-app/src/cli.ts`
- [Starter app](https://github.com/mattey2026/twenty/blob/main/packages/create-twenty-app/src/constants/template/src/application-config.ts): `packages/create-twenty-app/src/constants/template/src/application-config.ts`

### Call recording

- [Recorder settings](https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/front-components/settings.front-component.tsx): `packages/twenty-apps/public/call-recorder/src/front-components/settings.front-component.tsx`
- [Summary generation](https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/front-components/generate-call-recording-summary-effect.front-component.tsx): `packages/twenty-apps/public/call-recorder/src/front-components/generate-call-recording-summary-effect.front-component.tsx`
- [Summary command](https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/command-menu-items/generate-call-recording-summary.ts): `packages/twenty-apps/public/call-recorder/src/command-menu-items/generate-call-recording-summary.ts`
- [Summary agent](https://github.com/mattey2026/twenty/blob/main/packages/twenty-apps/public/call-recorder/src/agents/call-recording-summarizer.agent.ts): `packages/twenty-apps/public/call-recorder/src/agents/call-recording-summarizer.agent.ts`

### Other components

- **CRM user**

## Connections

- CRM user → Navigation editor: edits menu
- Navigation editor → Record query runner
- Record query runner → Bulk record creation
- Record query runner → Chart data
- Message ingestion → Application lifecycle
- App scaffolding → Starter app: scaffolds
- App marketplace → Application lifecycle: reads app details
- CRM user → Recorder settings: configures
- CRM user → Summary command: requests summary
- Summary command → Summary generation
- Summary generation → Summary agent
