# countly/countly-server architecture

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

- Interactive diagram: https://gitdiagram.com/countly/countly-server
- Repository: https://github.com/countly/countly-server

## Overview

Countly is a self-hosted analytics and customer-engagement server. Its main workflow accepts SDK or write-API telemetry, records and aggregates it, then exposes reports through the dashboard and read API. Separate product branches provide crash reporting, push, remote configuration, ratings, compliance, and scheduled email reports. The graph combines README-documented capabilities with source-index evidence; unsampled plugin implementations are represented at their exact listed paths, and their internal calls are not inferred.

Main entry points: [`plugins/pluginManager.js`](https://github.com/countly/countly-server/blob/master/plugins/pluginManager.js) (Plugin management), [`frontend/express/app.js`](https://github.com/countly/countly-server/blob/master/frontend/express/app.js) (Dashboard server), [`api/api.js`](https://github.com/countly/countly-server/blob/master/api/api.js) (Write and read API), [`api/parts/mgmt/apps.js`](https://github.com/countly/countly-server/blob/master/api/parts/mgmt/apps.js) (Application management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Collection and analytics"]
  node_api["Write and read API<br/>[api.js]"]
  node_events["Event collection<br/>[events.js]"]
  node_analytics["Analytics data<br/>[stats.js]"]
end

subgraph group_dashboard["Dashboard and access"]
  node_dashboard_app["Dashboard server<br/>[app.js]"]
  node_dashboards["Reports and dashboards<br/>[reports.js]"]
  node_members["Member management<br/>[members.js]"]
  node_apps["Application management<br/>[apps.js]"]
end

subgraph group_engagement["Engagement plugins"]
  node_crashes["Crash reporting<br/>[app.js]"]
  node_push["Push notifications<br/>[worker.js]"]
  node_remote["Remote configuration<br/>[app.js]"]
  node_ratings["In-app ratings<br/>[app.js]"]
  node_compliance["Compliance hub<br/>[app.js]"]
  node_hooks["Hooks<br/>[app.js]"]
  node_reports_email["Email reports<br/>[app.js]"]
end

subgraph group_platform["Platform services"]
  node_mongo[("MongoDB")]
  node_rights["Access control<br/>[rights.js]"]
  node_plugins["Plugin management<br/>[pluginManager.js]"]
  node_job_manager["Background jobs<br/>[manager.js]"]
  node_taskmanager["Long-running tasks<br/>[taskmanager.js]"]
  node_file_store[("File storage<br/>[countlyFs.js]")]
end

node_sdk(("SDKs and sources"))

node_sdk -->|"sends telemetry"| node_api
node_api -.->|"collects events"| node_events
node_events -.->|"stores events"| node_mongo
node_api -.->|"serves analytics"| node_analytics
node_analytics -.->|"reads and writes"| node_mongo
node_dashboard_app -->|"serves reports"| node_dashboards
node_dashboard_app -->|"authenticates members"| node_members
node_dashboard_app -.->|"checks access"| node_rights
node_dashboard_app -->|"uses read API"| node_api
node_apps -->|"manages app records"| node_mongo
node_apps -->|"dispatches app events"| node_plugins
node_plugins -.->|"enables plugins"| node_crashes
node_plugins -.->|"enables plugins"| node_push
node_plugins -.->|"enables plugins"| node_remote
node_plugins -.->|"enables plugins"| node_ratings
node_plugins -.->|"enables plugins"| node_compliance
node_plugins -.->|"enables plugins"| node_hooks
node_plugins -.->|"enables plugins"| node_reports_email
node_reports_email -->|"manages subscriptions"| node_mongo
node_job_manager -.->|"schedules jobs"| node_mongo
node_taskmanager -->|"stores task results"| node_mongo
node_apps -->|"stores app images"| node_file_store

click node_api "https://github.com/countly/countly-server/blob/master/api/api.js"
click node_events "https://github.com/countly/countly-server/blob/master/api/parts/data/events.js"
click node_analytics "https://github.com/countly/countly-server/blob/master/api/parts/data/stats.js"
click node_dashboard_app "https://github.com/countly/countly-server/blob/master/frontend/express/app.js"
click node_dashboards "https://github.com/countly/countly-server/blob/master/plugins/reports/api/reports.js"
click node_members "https://github.com/countly/countly-server/blob/master/frontend/express/libs/members.js"
click node_rights "https://github.com/countly/countly-server/blob/master/api/utils/rights.js"
click node_apps "https://github.com/countly/countly-server/blob/master/api/parts/mgmt/apps.js"
click node_plugins "https://github.com/countly/countly-server/blob/master/plugins/pluginManager.js"
click node_crashes "https://github.com/countly/countly-server/blob/master/plugins/crashes/frontend/app.js"
click node_push "https://github.com/countly/countly-server/blob/master/plugins/push/api/send/worker.js"
click node_remote "https://github.com/countly/countly-server/blob/master/plugins/remote-config/frontend/app.js"
click node_ratings "https://github.com/countly/countly-server/blob/master/plugins/star-rating/frontend/app.js"
click node_compliance "https://github.com/countly/countly-server/blob/master/plugins/compliance-hub/frontend/app.js"
click node_hooks "https://github.com/countly/countly-server/blob/master/plugins/hooks/frontend/app.js"
click node_reports_email "https://github.com/countly/countly-server/blob/master/plugins/reports/frontend/app.js"
click node_job_manager "https://github.com/countly/countly-server/blob/master/api/parts/jobs/manager.js"
click node_taskmanager "https://github.com/countly/countly-server/blob/master/api/utils/taskmanager.js"
click node_file_store "https://github.com/countly/countly-server/blob/master/api/utils/countlyFs.js"

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_api,node_events,node_analytics toneBlue
class node_dashboard_app,node_dashboards,node_members,node_apps toneAmber
class node_crashes,node_push,node_remote,node_ratings,node_compliance,node_hooks,node_reports_email toneMint
class node_mongo,node_rights,node_plugins,node_job_manager,node_taskmanager,node_file_store toneRose
class node_sdk toneIndigo
```

## Components

### Collection and analytics

- [Write and read API](https://github.com/countly/countly-server/blob/master/api/api.js): `api/api.js`
- [Event collection](https://github.com/countly/countly-server/blob/master/api/parts/data/events.js): `api/parts/data/events.js`
- [Analytics data](https://github.com/countly/countly-server/blob/master/api/parts/data/stats.js): `api/parts/data/stats.js`

### Dashboard and access

- [Dashboard server](https://github.com/countly/countly-server/blob/master/frontend/express/app.js): `frontend/express/app.js`
- [Reports and dashboards](https://github.com/countly/countly-server/blob/master/plugins/reports/api/reports.js): `plugins/reports/api/reports.js`
- [Member management](https://github.com/countly/countly-server/blob/master/frontend/express/libs/members.js): `frontend/express/libs/members.js`
- [Application management](https://github.com/countly/countly-server/blob/master/api/parts/mgmt/apps.js): `api/parts/mgmt/apps.js`

### Engagement plugins

- [Crash reporting](https://github.com/countly/countly-server/blob/master/plugins/crashes/frontend/app.js): `plugins/crashes/frontend/app.js`
- [Push notifications](https://github.com/countly/countly-server/blob/master/plugins/push/api/send/worker.js): `plugins/push/api/send/worker.js`
- [Remote configuration](https://github.com/countly/countly-server/blob/master/plugins/remote-config/frontend/app.js): `plugins/remote-config/frontend/app.js`
- [In-app ratings](https://github.com/countly/countly-server/blob/master/plugins/star-rating/frontend/app.js): `plugins/star-rating/frontend/app.js`
- [Compliance hub](https://github.com/countly/countly-server/blob/master/plugins/compliance-hub/frontend/app.js): `plugins/compliance-hub/frontend/app.js`
- [Hooks](https://github.com/countly/countly-server/blob/master/plugins/hooks/frontend/app.js): `plugins/hooks/frontend/app.js`
- [Email reports](https://github.com/countly/countly-server/blob/master/plugins/reports/frontend/app.js): `plugins/reports/frontend/app.js`

### Platform services

- **MongoDB**
- [Access control](https://github.com/countly/countly-server/blob/master/api/utils/rights.js): `api/utils/rights.js`
- [Plugin management](https://github.com/countly/countly-server/blob/master/plugins/pluginManager.js): `plugins/pluginManager.js`
- [Background jobs](https://github.com/countly/countly-server/blob/master/api/parts/jobs/manager.js): `api/parts/jobs/manager.js`
- [Long-running tasks](https://github.com/countly/countly-server/blob/master/api/utils/taskmanager.js): `api/utils/taskmanager.js`
- [File storage](https://github.com/countly/countly-server/blob/master/api/utils/countlyFs.js): `api/utils/countlyFs.js`

### Other components

- **SDKs and sources**

## Connections

- SDKs and sources → Write and read API: sends telemetry (evidence: `README.md`)
- Write and read API → Event collection: collects events
- Event collection → MongoDB: stores events
- Write and read API → Analytics data: serves analytics
- Analytics data → MongoDB: reads and writes
- Dashboard server → Reports and dashboards: serves reports (evidence: `README.md`)
- Dashboard server → Member management: authenticates members (evidence: `frontend/express/app.js`)
- Dashboard server → Access control: checks access (evidence: `frontend/express/app.js`)
- Dashboard server → Write and read API: uses read API (evidence: `README.md`)
- Application management → MongoDB: manages app records (evidence: `api/parts/mgmt/apps.js`)
- Application management → Plugin management: dispatches app events (evidence: `api/parts/mgmt/apps.js`)
- Plugin management → Crash reporting: enables plugins
- Plugin management → Push notifications: enables plugins
- Plugin management → Remote configuration: enables plugins (evidence: `plugins/remote-config/frontend/app.js`)
- Plugin management → In-app ratings: enables plugins
- Plugin management → Compliance hub: enables plugins
- Plugin management → Hooks: enables plugins
- Plugin management → Email reports: enables plugins (evidence: `plugins/reports/frontend/app.js`)
- Email reports → MongoDB: manages subscriptions (evidence: `plugins/reports/frontend/app.js`)
- Background jobs → MongoDB: schedules jobs
- Long-running tasks → MongoDB: stores task results (evidence: `api/utils/taskmanager.js`)
- Application management → File storage: stores app images (evidence: `api/parts/mgmt/apps.js`)
