# rustdesk/rustdesk-server architecture

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

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

## Overview

RustDesk Server is a self-hosted remote-access backend, with separate rendezvous/ID and relay executables plus an optional Windows desktop manager. The main workflow registers peers with hbbs, retains peer identity/state, and supports rendezvous coordination; clients may use the separately operated relay service. The manager provides service controls and log/config viewing. Source excerpts establish hbbs dispatch, peer persistence, and parts of the UI; relay internals and several UI event links are not fully shown, so those connections are omitted.

Main entry points: [`src/rendezvous_server.rs`](https://github.com/rustdesk/rustdesk-server/blob/master/src/rendezvous_server.rs) (Rendezvous service), [`src/common.rs`](https://github.com/rustdesk/rustdesk-server/blob/master/src/common.rs) (Config and keys), [`src/main.rs`](https://github.com/rustdesk/rustdesk-server/blob/master/src/main.rs) (hbbs entry), [`src/relay_server.rs`](https://github.com/rustdesk/rustdesk-server/blob/master/src/relay_server.rs) (Relay service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["Server runtime"]
  node_hbbs_entry["hbbs entry<br/>[main.rs]"]
  node_rendezvous["Rendezvous service"]
  node_relay_entry["hbbr entry<br/>[hbbr.rs]"]
  node_relay["Relay service<br/>[relay_server.rs]"]
  node_common["Config and keys<br/>[common.rs]"]
  node_utils["Server utilities<br/>[utils.rs]"]
end

subgraph group_state["Peer state"]
  node_peer_map["Peer map<br/>[peer.rs]"]
  node_database[("SQLite database<br/>[database.rs]")]
end

subgraph group_manager["Desktop manager"]
  node_manager_entry["Manager app<br/>[main.rs]"]
  node_presenter["Service presenter<br/>[presenter.rs]"]
  node_service_factory["Service factory<br/>[service.rs]"]
  node_windows_service["Windows service adapter<br/>[windows.rs]"]
  node_watcher["File watcher<br/>[watcher.rs]"]
end

subgraph group_ui["Manager interface"]
  node_desktop_view["Desktop tray view<br/>[desktop.rs]"]
  node_web_view["Log/config editor<br/>[main.js]"]
end

node_client(("RustDesk client"))

node_client -.->|"registers with"| node_rendezvous
node_client -.->|"relays through"| node_relay
node_hbbs_entry -->|"reads configuration"| node_common
node_hbbs_entry -->|"starts"| node_rendezvous
node_rendezvous -->|"uses helpers"| node_common
node_rendezvous -->|"dispatches peer operations"| node_peer_map
node_peer_map -->|"reads and writes"| node_database
node_relay -->|"uses helpers"| node_common
node_presenter -->|"creates service"| node_service_factory
node_service_factory -->|"selects on Windows"| node_windows_service
node_web_view -->|"emits actions"| node_desktop_view

click node_hbbs_entry "https://github.com/rustdesk/rustdesk-server/blob/master/src/main.rs"
click node_rendezvous "https://github.com/rustdesk/rustdesk-server/blob/master/src/rendezvous_server.rs"
click node_relay_entry "https://github.com/rustdesk/rustdesk-server/blob/master/src/hbbr.rs"
click node_relay "https://github.com/rustdesk/rustdesk-server/blob/master/src/relay_server.rs"
click node_common "https://github.com/rustdesk/rustdesk-server/blob/master/src/common.rs"
click node_peer_map "https://github.com/rustdesk/rustdesk-server/blob/master/src/peer.rs"
click node_database "https://github.com/rustdesk/rustdesk-server/blob/master/src/database.rs"
click node_utils "https://github.com/rustdesk/rustdesk-server/blob/master/src/utils.rs"
click node_manager_entry "https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/main.rs"
click node_presenter "https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/usecase/presenter.rs"
click node_service_factory "https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/usecase/service.rs"
click node_windows_service "https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/adapter/service/windows.rs"
click node_desktop_view "https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/adapter/view/desktop.rs"
click node_web_view "https://github.com/rustdesk/rustdesk-server/blob/master/ui/html/main.js"
click node_watcher "https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/usecase/watcher.rs"

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_hbbs_entry,node_rendezvous,node_relay_entry,node_relay,node_common,node_utils,node_client toneBlue
class node_peer_map,node_database toneAmber
class node_manager_entry,node_presenter,node_service_factory,node_windows_service,node_watcher toneMint
class node_desktop_view,node_web_view toneRose
```

## Components

### Server runtime

- [hbbs entry](https://github.com/rustdesk/rustdesk-server/blob/master/src/main.rs): `src/main.rs`
- [Rendezvous service](https://github.com/rustdesk/rustdesk-server/blob/master/src/rendezvous_server.rs): `src/rendezvous_server.rs`
- [hbbr entry](https://github.com/rustdesk/rustdesk-server/blob/master/src/hbbr.rs): `src/hbbr.rs`
- [Relay service](https://github.com/rustdesk/rustdesk-server/blob/master/src/relay_server.rs): `src/relay_server.rs`
- [Config and keys](https://github.com/rustdesk/rustdesk-server/blob/master/src/common.rs): `src/common.rs`
- [Server utilities](https://github.com/rustdesk/rustdesk-server/blob/master/src/utils.rs): `src/utils.rs`

### Peer state

- [Peer map](https://github.com/rustdesk/rustdesk-server/blob/master/src/peer.rs): `src/peer.rs`
- [SQLite database](https://github.com/rustdesk/rustdesk-server/blob/master/src/database.rs): `src/database.rs`

### Desktop manager

- [Manager app](https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/main.rs): `ui/src/main.rs`
- [Service presenter](https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/usecase/presenter.rs): `ui/src/usecase/presenter.rs`
- [Service factory](https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/usecase/service.rs): `ui/src/usecase/service.rs`
- [Windows service adapter](https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/adapter/service/windows.rs): `ui/src/adapter/service/windows.rs`
- [File watcher](https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/usecase/watcher.rs): `ui/src/usecase/watcher.rs`

### Manager interface

- [Desktop tray view](https://github.com/rustdesk/rustdesk-server/blob/master/ui/src/adapter/view/desktop.rs): `ui/src/adapter/view/desktop.rs`
- [Log/config editor](https://github.com/rustdesk/rustdesk-server/blob/master/ui/html/main.js): `ui/html/main.js`

### Other components

- **RustDesk client**

## Connections

- RustDesk client → Rendezvous service: registers with (evidence: `README.md`)
- RustDesk client → Relay service: relays through (evidence: `README.md`)
- hbbs entry → Config and keys: reads configuration (evidence: `src/main.rs`)
- hbbs entry → Rendezvous service: starts (evidence: `src/main.rs`)
- Rendezvous service → Config and keys: uses helpers (evidence: `src/rendezvous_server.rs`)
- Rendezvous service → Peer map: dispatches peer operations (evidence: `src/rendezvous_server.rs`)
- Peer map → SQLite database: reads and writes (evidence: `src/peer.rs`)
- Relay service → Config and keys: uses helpers (evidence: `src/relay_server.rs`)
- Service presenter → Service factory: creates service (evidence: `ui/src/usecase/presenter.rs`)
- Service factory → Windows service adapter: selects on Windows (evidence: `ui/src/usecase/service.rs`)
- Log/config editor → Desktop tray view: emits actions (evidence: `ui/src/adapter/view/desktop.rs`)
