# zibo-chen/subnetdesk architecture

> Architecture diagram of the GitHub repository zibo-chen/subnetdesk, 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/zibo-chen/subnetdesk
- Repository: https://github.com/zibo-chen/subnetdesk

## Overview

SubnetDesk is a LAN/VPN-first remote desktop: a controller discovers a reachable peer or enters its address, verifies and authenticates it, then uses a direct session for remote-control capabilities. README documents mDNS discovery, configurable TCP connections, credentials, fingerprint trust, CIDR restrictions, recent devices/favorites, and remote control, clipboard, audio, and file transfer. The tree and excerpts support the broad runtime layers shown; unsampled details are represented only where documented, so some internal wiring is intentionally omitted.

Main entry points: [`src/server.rs`](https://github.com/zibo-chen/subnetdesk/blob/master/src/server.rs) (Session server), [`src/ui.rs`](https://github.com/zibo-chen/subnetdesk/blob/master/src/ui.rs) (Desktop UI), [`src/client.rs`](https://github.com/zibo-chen/subnetdesk/blob/master/src/client.rs) (Session client), [`src/lan_protocol.rs`](https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_protocol.rs) (LAN protocol)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_ui["Desktop UI<br/>[ui.rs]"]
  node_lan_ui["LAN settings<br/>[remote.rs]"]
  node_recent["Recent and favorites<br/>[remote.rs]"]
end

subgraph group_lan["LAN connectivity"]
  node_discovery["mDNS discovery<br/>[lan_mdns.rs]"]
  node_lan_identity["Device identity<br/>[lan_identity.rs]"]
  node_lan_protocol["LAN protocol<br/>[lan_protocol.rs]"]
  node_lan_server["LAN listener<br/>[lan_server.rs]"]
end

subgraph group_session["Remote session"]
  node_client["Session client<br/>[client.rs]"]
  node_server["Session server<br/>[server.rs]"]
  node_auth["Access checks<br/>[connection.rs]"]
  node_files["File transfer<br/>[file_trait.rs]"]
end

subgraph group_platform["Platform access"]
  node_video["Screen capture<br/>[video_service.rs]"]
  node_input["Remote input<br/>[input_service.rs]"]
  node_clipboard["Clipboard transfer"]
  node_audio["Audio service<br/>[audio_service.rs]"]
  node_capture["Display capture<br/>[lib.rs]"]
end

node_controller(("Controller"))
node_target(("Controlled device"))

node_controller -->|"operates"| node_ui
node_target -->|"configures"| node_lan_ui
node_ui -->|"configures"| node_lan_ui
node_ui -->|"finds peers"| node_discovery
node_discovery -->|"advertises"| node_lan_protocol
node_ui -->|"selects peer"| node_recent
node_ui -->|"starts session"| node_client
node_client -->|"connects directly"| node_lan_protocol
node_lan_protocol -->|"accepts connection"| node_lan_server
node_lan_server -->|"dispatches session"| node_server
node_server -->|"checks access"| node_auth
node_auth -->|"verifies trust"| node_lan_identity
node_server -->|"serves video"| node_video
node_video -->|"captures display"| node_capture
node_server -->|"dispatches input"| node_input
node_server -->|"transfers clipboard"| node_clipboard
node_client -->|"transfers files"| node_files
node_server -->|"serves audio"| node_audio

click node_ui "https://github.com/zibo-chen/subnetdesk/blob/master/src/ui.rs"
click node_lan_ui "https://github.com/zibo-chen/subnetdesk/blob/master/src/ui/remote.rs"
click node_recent "https://github.com/zibo-chen/subnetdesk/blob/master/src/ui/remote.rs"
click node_discovery "https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_mdns.rs"
click node_lan_identity "https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_identity.rs"
click node_lan_protocol "https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_protocol.rs"
click node_lan_server "https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_server.rs"
click node_client "https://github.com/zibo-chen/subnetdesk/blob/master/src/client.rs"
click node_server "https://github.com/zibo-chen/subnetdesk/blob/master/src/server.rs"
click node_auth "https://github.com/zibo-chen/subnetdesk/blob/master/src/server/connection.rs"
click node_video "https://github.com/zibo-chen/subnetdesk/blob/master/src/server/video_service.rs"
click node_input "https://github.com/zibo-chen/subnetdesk/blob/master/src/server/input_service.rs"
click node_clipboard "https://github.com/zibo-chen/subnetdesk/blob/master/src/server/clipboard_service.rs"
click node_files "https://github.com/zibo-chen/subnetdesk/blob/master/src/client/file_trait.rs"
click node_audio "https://github.com/zibo-chen/subnetdesk/blob/master/src/server/audio_service.rs"
click node_capture "https://github.com/zibo-chen/subnetdesk/blob/master/libs/scrap/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_ui,node_lan_ui,node_recent toneBlue
class node_discovery,node_lan_identity,node_lan_protocol,node_lan_server toneAmber
class node_client,node_server,node_auth,node_files toneMint
class node_video,node_input,node_clipboard,node_audio,node_capture toneRose
class node_controller,node_target toneIndigo
```

## Components

### Application

- [Desktop UI](https://github.com/zibo-chen/subnetdesk/blob/master/src/ui.rs): `src/ui.rs`
- [LAN settings](https://github.com/zibo-chen/subnetdesk/blob/master/src/ui/remote.rs): `src/ui/remote.rs`
- [Recent and favorites](https://github.com/zibo-chen/subnetdesk/blob/master/src/ui/remote.rs): `src/ui/remote.rs`

### LAN connectivity

- [mDNS discovery](https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_mdns.rs): `src/lan_mdns.rs`
- [Device identity](https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_identity.rs): `src/lan_identity.rs`
- [LAN protocol](https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_protocol.rs): `src/lan_protocol.rs`
- [LAN listener](https://github.com/zibo-chen/subnetdesk/blob/master/src/lan_server.rs): `src/lan_server.rs`

### Remote session

- [Session client](https://github.com/zibo-chen/subnetdesk/blob/master/src/client.rs): `src/client.rs`
- [Session server](https://github.com/zibo-chen/subnetdesk/blob/master/src/server.rs): `src/server.rs`
- [Access checks](https://github.com/zibo-chen/subnetdesk/blob/master/src/server/connection.rs): `src/server/connection.rs`
- [File transfer](https://github.com/zibo-chen/subnetdesk/blob/master/src/client/file_trait.rs): `src/client/file_trait.rs`

### Platform access

- [Screen capture](https://github.com/zibo-chen/subnetdesk/blob/master/src/server/video_service.rs): `src/server/video_service.rs`
- [Remote input](https://github.com/zibo-chen/subnetdesk/blob/master/src/server/input_service.rs): `src/server/input_service.rs`
- [Clipboard transfer](https://github.com/zibo-chen/subnetdesk/blob/master/src/server/clipboard_service.rs): `src/server/clipboard_service.rs`
- [Audio service](https://github.com/zibo-chen/subnetdesk/blob/master/src/server/audio_service.rs): `src/server/audio_service.rs`
- [Display capture](https://github.com/zibo-chen/subnetdesk/blob/master/libs/scrap/src/lib.rs): `libs/scrap/src/lib.rs`

### Other components

- **Controller**
- **Controlled device**

## Connections

- Controller → Desktop UI: operates
- Controlled device → LAN settings: configures
- Desktop UI → LAN settings: configures
- Desktop UI → mDNS discovery: finds peers
- mDNS discovery → LAN protocol: advertises
- Desktop UI → Recent and favorites: selects peer
- Desktop UI → Session client: starts session
- Session client → LAN protocol: connects directly
- LAN protocol → LAN listener: accepts connection
- LAN listener → Session server: dispatches session
- Session server → Access checks: checks access
- Access checks → Device identity: verifies trust
- Session server → Screen capture: serves video
- Screen capture → Display capture: captures display
- Session server → Remote input: dispatches input
- Session server → Clipboard transfer: transfers clipboard
- Session client → File transfer: transfers files
- Session server → Audio service: serves audio
