# plutonhq/pluton architecture

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

- Interactive diagram: https://gitdiagram.com/plutonhq/pluton
- Repository: https://github.com/plutonhq/pluton

## Overview

Pluton is a self-hosted backup management platform. Users configure storage and backup plans in the web UI, schedule and monitor backups, then browse snapshots to restore or download data. The backend also supports replication, retention, notifications, device management, and self-backup. The storage-management path is supported by sampled source; other major capabilities are represented from the README and repository structure, so their internal call wiring is shown only where the evidence supports it.

Main entry points: [`backend/src/utils/rclone/rclone.ts`](https://github.com/plutonhq/pluton/blob/main/backend/src/utils/rclone/rclone.ts) (Rclone integration), [`frontend/src/components/App/App/App.tsx`](https://github.com/plutonhq/pluton/blob/main/frontend/src/components/App/App/App.tsx) (Web application), [`backend/src/services/StorageService.ts`](https://github.com/plutonhq/pluton/blob/main/backend/src/services/StorageService.ts) (Storage service), [`frontend/src/services`](https://github.com/plutonhq/pluton/tree/main/frontend/src/services) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Web interface"]
  node_web["Web application<br/>[App.tsx]"]
  node_planui["Plans and status"]
  node_restoreui["Restore browser"]
  node_storageui["Storage settings"]
  node_frontservices["API client"]
end

subgraph group_api["API and configuration"]
  node_routes["HTTP routes<br/>[index.ts]"]
  node_controllers["Request controllers"]
  node_plans["Plan services<br/>[PlanService.ts]"]
  node_storage["Storage service<br/>[StorageService.ts]"]
end

subgraph group_backup["Backup runtime"]
  node_scheduler["Schedule manager<br/>[CronManager.ts]"]
  node_jobs["Job queue<br/>[JobQueue.ts]"]
  node_tasks["Backup tasks<br/>[BackupTask.ts]"]
  node_backupmanagers["Backup handlers<br/>[BackupHandler.ts]"]
  node_strategies["Backup strategies"]
  node_restic["Restic engine<br/>[restic.ts]"]
end

subgraph group_restore["Restore and replication"]
  node_restoreflow["Restore handlers<br/>[RestoreHandler.ts]"]
  node_replication["Replication handlers"]
  node_events["Event services"]
  node_notifications["Notification channels"]
end

subgraph group_platform["State and integrations"]
  node_stores["Domain stores"]
  node_database[("Application database<br/>[index.ts]")]
  node_rclone["Rclone integration<br/>[rclone.ts]"]
  node_providers["Storage providers"]
end

node_user(("User"))
node_externalstorage[("Backup destinations")]

node_user -->|"uses"| node_web
node_web -->|"opens"| node_planui
node_web -->|"opens"| node_restoreui
node_web -->|"opens"| node_storageui
node_planui -->|"requests plan data"| node_frontservices
node_restoreui -->|"requests restore data"| node_frontservices
node_storageui -->|"requests storage actions"| node_frontservices
node_frontservices -->|"HTTP requests"| node_routes
node_routes -->|"dispatches"| node_controllers
node_controllers -->|"calls storage operations"| node_storage
node_controllers -->|"calls plan operations"| node_plans
node_storage -->|"reads and writes"| node_stores
node_plans -->|"reads and writes"| node_stores
node_stores -->|"queries"| node_database
node_storage -->|"browses remotes"| node_rclone
node_storage -->|"uses provider settings"| node_providers
node_scheduler -->|"enqueues tasks"| node_jobs
node_jobs -->|"dispatches"| node_tasks
node_tasks -->|"runs backup work"| node_backupmanagers
node_backupmanagers -->|"selects strategy"| node_strategies
node_strategies -->|"runs backup engine"| node_restic
node_strategies -->|"accesses remote storage"| node_rclone
node_rclone -->|"transfers backup data"| node_externalstorage
node_restoreflow -->|"runs restore operations"| node_restic
node_restoreflow -->|"accesses remote data"| node_rclone
node_replication -->|"copies remote data"| node_rclone
node_backupmanagers -->|"emits backup events"| node_events
node_restoreflow -->|"emits restore events"| node_events
node_events -->|"notifies"| node_notifications

click node_web "https://github.com/plutonhq/pluton/blob/main/frontend/src/components/App/App/App.tsx"
click node_planui "https://github.com/plutonhq/pluton/tree/main/frontend/src/components/Plan"
click node_restoreui "https://github.com/plutonhq/pluton/tree/main/frontend/src/components/Restore"
click node_storageui "https://github.com/plutonhq/pluton/tree/main/frontend/src/components/Storage"
click node_frontservices "https://github.com/plutonhq/pluton/tree/main/frontend/src/services"
click node_routes "https://github.com/plutonhq/pluton/blob/main/backend/src/routes/index.ts"
click node_controllers "https://github.com/plutonhq/pluton/tree/main/backend/src/controllers"
click node_plans "https://github.com/plutonhq/pluton/blob/main/backend/src/services/PlanService.ts"
click node_storage "https://github.com/plutonhq/pluton/blob/main/backend/src/services/StorageService.ts"
click node_scheduler "https://github.com/plutonhq/pluton/blob/main/backend/src/managers/CronManager.ts"
click node_jobs "https://github.com/plutonhq/pluton/blob/main/backend/src/jobs/JobQueue.ts"
click node_tasks "https://github.com/plutonhq/pluton/blob/main/backend/src/jobs/tasks/BackupTask.ts"
click node_backupmanagers "https://github.com/plutonhq/pluton/blob/main/backend/src/managers/handlers/BackupHandler.ts"
click node_strategies "https://github.com/plutonhq/pluton/tree/main/backend/src/strategies/backup"
click node_restic "https://github.com/plutonhq/pluton/blob/main/backend/src/utils/restic/restic.ts"
click node_restoreflow "https://github.com/plutonhq/pluton/blob/main/backend/src/managers/handlers/RestoreHandler.ts"
click node_replication "https://github.com/plutonhq/pluton/blob/main/backend/src/managers/handlers/ReplicationOrchestrator.ts"
click node_events "https://github.com/plutonhq/pluton/tree/main/backend/src/services/events"
click node_notifications "https://github.com/plutonhq/pluton/blob/main/backend/src/notifications/NotificationManager.ts"
click node_stores "https://github.com/plutonhq/pluton/tree/main/backend/src/stores"
click node_database "https://github.com/plutonhq/pluton/blob/main/backend/src/db/index.ts"
click node_rclone "https://github.com/plutonhq/pluton/blob/main/backend/src/utils/rclone/rclone.ts"
click node_providers "https://github.com/plutonhq/pluton/tree/main/backend/src/utils/providers"

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_web,node_planui,node_restoreui,node_storageui,node_frontservices,node_user toneBlue
class node_routes,node_controllers,node_plans,node_storage,node_externalstorage toneAmber
class node_scheduler,node_jobs,node_tasks,node_backupmanagers,node_strategies,node_restic toneMint
class node_restoreflow,node_replication,node_events,node_notifications toneRose
class node_stores,node_database,node_rclone,node_providers toneIndigo
```

## Components

### Web interface

- [Web application](https://github.com/plutonhq/pluton/blob/main/frontend/src/components/App/App/App.tsx): `frontend/src/components/App/App/App.tsx`
- [Plans and status](https://github.com/plutonhq/pluton/tree/main/frontend/src/components/Plan): `frontend/src/components/Plan`
- [Restore browser](https://github.com/plutonhq/pluton/tree/main/frontend/src/components/Restore): `frontend/src/components/Restore`
- [Storage settings](https://github.com/plutonhq/pluton/tree/main/frontend/src/components/Storage): `frontend/src/components/Storage`
- [API client](https://github.com/plutonhq/pluton/tree/main/frontend/src/services): `frontend/src/services`

### API and configuration

- [HTTP routes](https://github.com/plutonhq/pluton/blob/main/backend/src/routes/index.ts): `backend/src/routes/index.ts`
- [Request controllers](https://github.com/plutonhq/pluton/tree/main/backend/src/controllers): `backend/src/controllers`
- [Plan services](https://github.com/plutonhq/pluton/blob/main/backend/src/services/PlanService.ts): `backend/src/services/PlanService.ts`
- [Storage service](https://github.com/plutonhq/pluton/blob/main/backend/src/services/StorageService.ts): `backend/src/services/StorageService.ts`

### Backup runtime

- [Schedule manager](https://github.com/plutonhq/pluton/blob/main/backend/src/managers/CronManager.ts): `backend/src/managers/CronManager.ts`
- [Job queue](https://github.com/plutonhq/pluton/blob/main/backend/src/jobs/JobQueue.ts): `backend/src/jobs/JobQueue.ts`
- [Backup tasks](https://github.com/plutonhq/pluton/blob/main/backend/src/jobs/tasks/BackupTask.ts): `backend/src/jobs/tasks/BackupTask.ts`
- [Backup handlers](https://github.com/plutonhq/pluton/blob/main/backend/src/managers/handlers/BackupHandler.ts): `backend/src/managers/handlers/BackupHandler.ts`
- [Backup strategies](https://github.com/plutonhq/pluton/tree/main/backend/src/strategies/backup): `backend/src/strategies/backup`
- [Restic engine](https://github.com/plutonhq/pluton/blob/main/backend/src/utils/restic/restic.ts): `backend/src/utils/restic/restic.ts`

### Restore and replication

- [Restore handlers](https://github.com/plutonhq/pluton/blob/main/backend/src/managers/handlers/RestoreHandler.ts): `backend/src/managers/handlers/RestoreHandler.ts`
- [Replication handlers](https://github.com/plutonhq/pluton/blob/main/backend/src/managers/handlers/ReplicationOrchestrator.ts): `backend/src/managers/handlers/ReplicationOrchestrator.ts`
- [Event services](https://github.com/plutonhq/pluton/tree/main/backend/src/services/events): `backend/src/services/events`
- [Notification channels](https://github.com/plutonhq/pluton/blob/main/backend/src/notifications/NotificationManager.ts): `backend/src/notifications/NotificationManager.ts`

### State and integrations

- [Domain stores](https://github.com/plutonhq/pluton/tree/main/backend/src/stores): `backend/src/stores`
- [Application database](https://github.com/plutonhq/pluton/blob/main/backend/src/db/index.ts): `backend/src/db/index.ts`
- [Rclone integration](https://github.com/plutonhq/pluton/blob/main/backend/src/utils/rclone/rclone.ts): `backend/src/utils/rclone/rclone.ts`
- [Storage providers](https://github.com/plutonhq/pluton/tree/main/backend/src/utils/providers): `backend/src/utils/providers`

### Other components

- **User**
- **Backup destinations**

## Connections

- User → Web application: uses
- Web application → Plans and status: opens
- Web application → Restore browser: opens
- Web application → Storage settings: opens
- Plans and status → API client: requests plan data
- Restore browser → API client: requests restore data
- Storage settings → API client: requests storage actions
- API client → HTTP routes: HTTP requests
- HTTP routes → Request controllers: dispatches
- Request controllers → Storage service: calls storage operations
- Request controllers → Plan services: calls plan operations
- Storage service → Domain stores: reads and writes
- Plan services → Domain stores: reads and writes
- Domain stores → Application database: queries
- Storage service → Rclone integration: browses remotes
- Storage service → Storage providers: uses provider settings
- Schedule manager → Job queue: enqueues tasks
- Job queue → Backup tasks: dispatches
- Backup tasks → Backup handlers: runs backup work
- Backup handlers → Backup strategies: selects strategy
- Backup strategies → Restic engine: runs backup engine
- Backup strategies → Rclone integration: accesses remote storage
- Rclone integration → Backup destinations: transfers backup data
- Restore handlers → Restic engine: runs restore operations
- Restore handlers → Rclone integration: accesses remote data
- Replication handlers → Rclone integration: copies remote data
- Backup handlers → Event services: emits backup events
- Restore handlers → Event services: emits restore events
- Event services → Notification channels: notifies
