# rustvnc/rustvncserver architecture

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

- Interactive diagram: https://gitdiagram.com/rustvnc/rustvncserver
- Repository: https://github.com/rustvnc/rustvncserver
- Video tour (about a minute): https://gitdiagram.com/rustvnc/rustvncserver/video

## Overview

rustvncserver is an asynchronous Rust VNC/RFB server library. An application configures a server and supplies framebuffer pixels; viewers connect over RFB, authenticate if configured, negotiate pixel format and encodings, and receive framebuffer updates. Viewer input and connection events flow back to the application. The README also documents reverse viewer connections, UltraVNC repeater connections, and CopyRect. Sampled source shows server/client coordination, authentication, and dirty-region tracking; detailed wiring for unsampled protocol paths is not inferred.

Main entry points: [`src/server.rs`](https://github.com/rustvnc/rustvncserver/blob/main/src/server.rs) (Server API), [`src/client.rs`](https://github.com/rustvnc/rustvncserver/blob/main/src/client.rs) (Client Session), [`src/repeater.rs`](https://github.com/rustvnc/rustvncserver/blob/main/src/repeater.rs) (Repeater Connect), [`src/framebuffer.rs`](https://github.com/rustvnc/rustvncserver/blob/main/src/framebuffer.rs) (Framebuffer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Application API"]
  node_server_api["Server API<br/>[server.rs]"]
  node_event_api["Event API<br/>[events.rs]"]
end

subgraph group_connections["Connections"]
  node_tcp_listener["TCP Listener<br/>[server.rs]"]
  node_reverse_connect["Reverse Connect<br/>[server.rs]"]
  node_repeater_connect["Repeater Connect<br/>[repeater.rs]"]
end

subgraph group_rfb["RFB Session"]
  node_client_session["Client Session<br/>[client.rs]"]
  node_rfb_protocol["RFB Protocol<br/>[protocol.rs]"]
  node_vnc_auth["VNC Authentication<br/>[auth.rs]"]
  node_client_events["Client Events<br/>[client.rs]"]
end

subgraph group_display["Display Updates"]
  node_framebuffer[("Framebuffer<br/>[framebuffer.rs]")]
  node_encoding_lib["RFB Encodings"]
end

node_application(("Application"))
node_viewer(("VNC Viewer"))
node_repeater_service(("VNC Repeater"))

node_application -->|"configures and starts"| node_server_api
node_server_api -->|"listens"| node_tcp_listener
node_viewer -->|"connects"| node_tcp_listener
node_tcp_listener -->|"dispatches client"| node_client_session
node_server_api -->|"starts reverse connection"| node_reverse_connect
node_reverse_connect -->|"connects to"| node_viewer
node_server_api -->|"starts repeater connection"| node_repeater_connect
node_repeater_connect -->|"sends repeater ID"| node_repeater_service
node_repeater_connect -->|"initializes session"| node_client_session
node_client_session -->|"exchanges messages"| node_rfb_protocol
node_client_session -->|"verifies challenge"| node_vnc_auth
node_client_session -->|"reads display regions"| node_framebuffer
node_framebuffer -->|"tracks dirty regions"| node_client_session
node_client_session -->|"encodes updates"| node_encoding_lib
node_application -->|"updates pixels"| node_server_api
node_server_api -->|"updates and copies pixels"| node_framebuffer
node_client_session -->|"emits input events"| node_client_events
node_client_events -->|"forwards client events"| node_server_api
node_server_api -->|"publishes server events"| node_event_api
node_event_api -->|"delivers events"| node_application

click node_server_api "https://github.com/rustvnc/rustvncserver/blob/main/src/server.rs"
click node_event_api "https://github.com/rustvnc/rustvncserver/blob/main/src/events.rs"
click node_tcp_listener "https://github.com/rustvnc/rustvncserver/blob/main/src/server.rs"
click node_reverse_connect "https://github.com/rustvnc/rustvncserver/blob/main/src/server.rs"
click node_repeater_connect "https://github.com/rustvnc/rustvncserver/blob/main/src/repeater.rs"
click node_client_session "https://github.com/rustvnc/rustvncserver/blob/main/src/client.rs"
click node_rfb_protocol "https://github.com/rustvnc/rustvncserver/blob/main/src/protocol.rs"
click node_vnc_auth "https://github.com/rustvnc/rustvncserver/blob/main/src/auth.rs"
click node_client_events "https://github.com/rustvnc/rustvncserver/blob/main/src/client.rs"
click node_framebuffer "https://github.com/rustvnc/rustvncserver/blob/main/src/framebuffer.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_server_api,node_event_api,node_viewer toneBlue
class node_tcp_listener,node_reverse_connect,node_repeater_connect toneAmber
class node_client_session,node_rfb_protocol,node_vnc_auth,node_client_events toneMint
class node_framebuffer,node_encoding_lib toneRose
class node_application,node_repeater_service toneIndigo
```

## Components

### Application API

- [Server API](https://github.com/rustvnc/rustvncserver/blob/main/src/server.rs): `src/server.rs`
- [Event API](https://github.com/rustvnc/rustvncserver/blob/main/src/events.rs): `src/events.rs`

### Connections

- [TCP Listener](https://github.com/rustvnc/rustvncserver/blob/main/src/server.rs): `src/server.rs`
- [Reverse Connect](https://github.com/rustvnc/rustvncserver/blob/main/src/server.rs): `src/server.rs`
- [Repeater Connect](https://github.com/rustvnc/rustvncserver/blob/main/src/repeater.rs): `src/repeater.rs`

### RFB Session

- [Client Session](https://github.com/rustvnc/rustvncserver/blob/main/src/client.rs): `src/client.rs`
- [RFB Protocol](https://github.com/rustvnc/rustvncserver/blob/main/src/protocol.rs): `src/protocol.rs`
- [VNC Authentication](https://github.com/rustvnc/rustvncserver/blob/main/src/auth.rs): `src/auth.rs`
- [Client Events](https://github.com/rustvnc/rustvncserver/blob/main/src/client.rs): `src/client.rs`

### Display Updates

- [Framebuffer](https://github.com/rustvnc/rustvncserver/blob/main/src/framebuffer.rs): `src/framebuffer.rs`
- **RFB Encodings**

### Other components

- **Application**
- **VNC Viewer**
- **VNC Repeater**

## Connections

- Application → Server API: configures and starts
- Server API → TCP Listener: listens
- VNC Viewer → TCP Listener: connects
- TCP Listener → Client Session: dispatches client
- Server API → Reverse Connect: starts reverse connection
- Reverse Connect → VNC Viewer: connects to
- Server API → Repeater Connect: starts repeater connection
- Repeater Connect → VNC Repeater: sends repeater ID
- Repeater Connect → Client Session: initializes session
- Client Session → RFB Protocol: exchanges messages
- Client Session → VNC Authentication: verifies challenge
- Client Session → Framebuffer: reads display regions
- Framebuffer → Client Session: tracks dirty regions
- Client Session → RFB Encodings: encodes updates
- Application → Server API: updates pixels
- Server API → Framebuffer: updates and copies pixels
- Client Session → Client Events: emits input events
- Client Events → Server API: forwards client events
- Server API → Event API: publishes server events
- Event API → Application: delivers events
