# jhone-jpl/unydesk architecture

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

- Interactive diagram: https://gitdiagram.com/jhone-jpl/unydesk
- Repository: https://github.com/jhone-jpl/unydesk
- Video tour (about a minute): https://gitdiagram.com/jhone-jpl/unydesk/video

## Overview

UnyDesk is a hybrid remote-desktop platform: administrators manage users, devices, and deployment through a web console backed by a management API, while the cross-platform client provides remote sessions. The client’s server-side session handling exposes display, input, audio, and clipboard capabilities; shared networking supports rendezvous and relay infrastructure. The README documents PostgreSQL, Redis, hbbs, and hbbr, but the supplied excerpts do not establish detailed API-to-store or client-to-infrastructure call paths. Those connections are shown only where documented, and platform-specific internals are summarized rather than expanded.

Main entry points: [`unydesk-api/src/index.ts`](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/index.ts) (API entry), [`unydesk-console/src/App.tsx`](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/App.tsx) (Console routes), [`unydesk-client/src/core_main.rs`](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/core_main.rs) (Client core), [`unydesk-client/src/server.rs`](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server.rs) (Session server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_console["Web console"]
  node_console_app["Console routes<br/>[App.tsx]"]
  node_console_auth["Console authentication<br/>[auth.tsx]"]
  node_console_pages["Management pages<br/>[DevicesPage.tsx]"]
  node_console_remote["Remote page<br/>[RemotePage.tsx]"]
  node_console_api["API client<br/>[api.ts]"]
end

subgraph group_management["Management API"]
  node_api_entry["API entry<br/>[index.ts]"]
  node_api_auth["Authentication routes<br/>[auth.ts]"]
  node_api_users["User routes<br/>[users.ts]"]
  node_api_devices["Device routes<br/>[devices.ts]"]
  node_api_agent["Agent routes<br/>[agent.ts]"]
  node_postgres[("PostgreSQL<br/>[pool.ts]")]
  node_redis[("Redis<br/>[redis.ts]")]
end

subgraph group_client["Remote client"]
  node_client_app["Desktop client<br/>[main.rs]"]
  node_client_core["Client core<br/>[core_main.rs]"]
  node_client_ui["Client UI<br/>[ui.rs]"]
end

subgraph group_session["Session services"]
  node_client_server["Session server<br/>[server.rs]"]
  node_video["Display and video<br/>[video_service.rs]"]
  node_input["Remote input<br/>[input_service.rs]"]
  node_clipboard["Clipboard service"]
end

subgraph group_infrastructure["Connection infrastructure"]
  node_shared_net["Shared networking<br/>[lib.rs]"]
  node_rendezvous["ID / rendezvous"]
  node_relay["Relay server"]
end

node_admin(("Administrator"))

node_admin -->|"uses"| node_console_app
node_console_app -->|"checks auth"| node_console_auth
node_console_app -->|"routes to"| node_console_pages
node_console_app -->|"routes to"| node_console_remote
node_console_auth -->|"requests API"| node_console_api
node_console_pages -->|"requests API"| node_console_api
node_console_remote -->|"requests API"| node_console_api
node_console_api -->|"HTTP requests"| node_api_entry
node_api_entry -->|"dispatches"| node_api_auth
node_api_entry -->|"dispatches"| node_api_users
node_api_entry -->|"dispatches"| node_api_devices
node_api_entry -->|"dispatches"| node_api_agent
node_api_auth -->|"reads/writes"| node_postgres
node_api_users -->|"reads/writes"| node_postgres
node_api_devices -->|"reads/writes"| node_postgres
node_client_app -->|"starts"| node_client_core
node_client_core -->|"starts UI"| node_client_ui
node_client_core -->|"runs sessions"| node_client_server
node_client_server -->|"dispatches"| node_video
node_client_server -->|"dispatches"| node_input
node_client_server -->|"dispatches"| node_clipboard
node_client_core -->|"uses networking"| node_shared_net
node_shared_net -->|"connects"| node_rendezvous
node_shared_net -.->|"relays traffic"| node_relay

click node_console_app "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/App.tsx"
click node_console_auth "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/auth.tsx"
click node_console_pages "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/pages/DevicesPage.tsx"
click node_console_remote "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/pages/RemotePage.tsx"
click node_console_api "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/api.ts"
click node_api_entry "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/index.ts"
click node_api_auth "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/auth.ts"
click node_api_users "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/users.ts"
click node_api_devices "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/devices.ts"
click node_api_agent "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/agent.ts"
click node_postgres "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/db/pool.ts"
click node_redis "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/db/redis.ts"
click node_client_app "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/main.rs"
click node_client_core "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/core_main.rs"
click node_client_ui "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/ui.rs"
click node_client_server "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server.rs"
click node_video "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server/video_service.rs"
click node_input "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server/input_service.rs"
click node_clipboard "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server/clipboard_service.rs"
click node_shared_net "https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/libs/hbb_common/src/lib.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_console_app,node_console_auth,node_console_pages,node_console_remote,node_console_api toneBlue
class node_api_entry,node_api_auth,node_api_users,node_api_devices,node_api_agent,node_postgres,node_redis toneAmber
class node_client_app,node_client_core,node_client_ui toneMint
class node_client_server,node_video,node_input,node_clipboard toneRose
class node_shared_net,node_rendezvous,node_relay,node_admin toneIndigo
```

## Components

### Web console

- [Console routes](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/App.tsx): `unydesk-console/src/App.tsx`
- [Console authentication](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/auth.tsx): `unydesk-console/src/auth.tsx`
- [Management pages](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/pages/DevicesPage.tsx): `unydesk-console/src/pages/DevicesPage.tsx`
- [Remote page](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/pages/RemotePage.tsx): `unydesk-console/src/pages/RemotePage.tsx`
- [API client](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-console/src/api.ts): `unydesk-console/src/api.ts`

### Management API

- [API entry](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/index.ts): `unydesk-api/src/index.ts`
- [Authentication routes](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/auth.ts): `unydesk-api/src/routes/auth.ts`
- [User routes](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/users.ts): `unydesk-api/src/routes/users.ts`
- [Device routes](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/devices.ts): `unydesk-api/src/routes/devices.ts`
- [Agent routes](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/routes/agent.ts): `unydesk-api/src/routes/agent.ts`
- [PostgreSQL](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/db/pool.ts): `unydesk-api/src/db/pool.ts`
- [Redis](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-api/src/db/redis.ts): `unydesk-api/src/db/redis.ts`

### Remote client

- [Desktop client](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/main.rs): `unydesk-client/src/main.rs`
- [Client core](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/core_main.rs): `unydesk-client/src/core_main.rs`
- [Client UI](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/ui.rs): `unydesk-client/src/ui.rs`

### Session services

- [Session server](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server.rs): `unydesk-client/src/server.rs`
- [Display and video](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server/video_service.rs): `unydesk-client/src/server/video_service.rs`
- [Remote input](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server/input_service.rs): `unydesk-client/src/server/input_service.rs`
- [Clipboard service](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/src/server/clipboard_service.rs): `unydesk-client/src/server/clipboard_service.rs`

### Connection infrastructure

- [Shared networking](https://github.com/jhone-jpl/unydesk/blob/main/unydesk-client/libs/hbb_common/src/lib.rs): `unydesk-client/libs/hbb_common/src/lib.rs`
- **ID / rendezvous**
- **Relay server**

### Other components

- **Administrator**

## Connections

- Administrator → Console routes: uses
- Console routes → Console authentication: checks auth
- Console routes → Management pages: routes to
- Console routes → Remote page: routes to
- Console authentication → API client: requests API
- Management pages → API client: requests API
- Remote page → API client: requests API
- API client → API entry: HTTP requests
- API entry → Authentication routes: dispatches
- API entry → User routes: dispatches
- API entry → Device routes: dispatches
- API entry → Agent routes: dispatches
- Authentication routes → PostgreSQL: reads/writes
- User routes → PostgreSQL: reads/writes
- Device routes → PostgreSQL: reads/writes
- Desktop client → Client core: starts
- Client core → Client UI: starts UI
- Client core → Session server: runs sessions
- Session server → Display and video: dispatches
- Session server → Remote input: dispatches
- Session server → Clipboard service: dispatches
- Client core → Shared networking: uses networking
- Shared networking → ID / rendezvous: connects
- Shared networking → Relay server: relays traffic
