# Feature catalog — rustdesk/rustdesk

> Canonical page: https://codevetter.com/unpack/rustdesk/feature-catalog

# Feature catalog — rustdesk/rustdesk

Scanned commit c6a358afbe37c518689a6157a8e8cdbd645dcc5d (2026-09-22). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

User-facing features map to ConnType variants (default remote desktop, file transfer, view camera, port forward/RDP, terminal) chosen per session, plus host-side services (video, audio, clipboard, input, printer, terminal). Administrative surface is a large CLI (install/service/config/password/deploy) plus TCP/IPC control channels. Monetized/enterprise features hang off the optional api-server (hbbs_http: account, strategy sync, address book, audit upload) and the `--deploy`/`--assign` device-registration commands.
- Outgoing session types are selected in `session_add` by booleans → ConnType: FILE_TRANSFER, VIEW_CAMERA, TERMINAL, PORT_FORWARD, RDP, or DEFAULT_CONN; Flutter passes them from `flutter/lib/main.dart`'s WindowType dispatch (RemoteDesktop, FileTransfer, ViewCamera, PortForward, Terminal). — [src/flutter.rs#L1265-1344](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/flutter.rs#L1265-L1344) [flutter/lib/main.dart#L64-101](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/flutter/lib/main.dart#L64-L101)
- Remote desktop video: `src/server/video_service.rs` captures via `scrap::Capturer` per display (VideoSource::Monitor) or camera, encodes VP8/VP9/AV1 (`VpxEncoderConfig`, `AomEncoderConfig`) or hardware encoders behind `hwcodec`/`vram` features, with `VideoQoS` adaptation and DXGI recovery logic on Windows. — [src/server/video_service.rs#L41-80](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server/video_service.rs#L41-L80) [src/server.rs#L397-425](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server.rs#L397-L425)
- File transfer runs through `base::fs` TransferJob machinery and `ipc::FS` messages (ReadDir/RemoveDir/NewWrite/WriteBlock/CheckDigest/Rename...); `Remote` in io_loop owns `read_jobs`/`write_jobs`/`remove_jobs` lists and `FileManager` is exposed via `file_trait`. — [src/ipc.rs#L140-238](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/ipc.rs#L140-L238) [src/client/io_loop.rs#L74-99](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/client/io_loop.rs#L74-L99) [libs/base/src/fs.rs](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/libs/base/src/fs.rs)
- Clipboard sync uses arboard + clipboard-master with a custom `dyn.com.rustdesk.owner` marker format, `CLIPBOARD_INTERVAL` 333ms polling, multi-clipboard support, and optional `unix-file-copy-paste` feature for file paste; a second `file-clipboard` service is registered when the feature is on. — [src/clipboard.rs#L10-31](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/clipboard.rs#L10-L31) [src/server.rs#L140-146](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server.rs#L140-L146)
- Remote input: `libs/enigo` Enigo (keyboard/mouse injection) on the controlled side plus `input_service` services (cursor, pos, window_focus); relative-mouse MOUSE_TYPE_MOVE_RELATIVE=5 is supported by the Flutter client only; Linux Wayland input goes through uinput (`input_service::setup_uinput`, `server/uinput.rs`). — [src/common.rs#L67-92](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/common.rs#L67-L92) [src/server.rs#L148-160](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server.rs#L148-L160) [src/server.rs#L678-681](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server.rs#L678-L681)
- Remote terminal: `terminal_service` (desktop) with ConPTY via portable-pty on Windows and a separate `--terminal-helper` process (`server/terminal_helper::run_terminal_helper`) because ConPTY is incompatible with CreateProcessAsUserW; Flutter has a full terminal model layer (terminal_model, mouse handler, alt-screen scroll). — [src/core_main.rs#L702-712](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/core_main.rs#L702-L712) [Cargo.toml#L107](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/Cargo.toml#L107) [flutter/lib/models/terminal_model.dart](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/flutter/lib/models/terminal_model.dart)
- TCP port forwarding and RDP tunneling: `src/port_forward.rs` + `port_forward_mux.rs` (Tunnel/Claim/CHANNEL_WINDOW) forward local ports through the encrypted session; `run_rdp` shells out to cmdkey/mstsc on Windows reading creds from rdp_username/rdp_password env vars. — [src/port_forward.rs#L1-30](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/port_forward.rs#L1-L30)
- Wake-on-LAN and LAN discovery: `wol-rs` dependency plus `lan::start_listening()` answering `PeerDiscovery` ping/pong UDP broadcasts gated by `enable-lan-discovery` option, reporting id/hostname/username/mac. — [src/lan.rs#L23-60](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/lan.rs#L23-L60) [Cargo.toml#L76](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/Cargo.toml#L76)
- Auth features: permanent/temporary passwords, approve modes, ID whitelist (`OPTION_ID_WHITELIST`), IP whitelist (`whitelist`), 2FA TOTP via totp-rs stored encrypted in config (`auth_2fa::generate2fa`/`verify2fa`), trusted devices, and optional server-side strategies synced from the API. — [src/auth_2fa.rs#L76-100](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/auth_2fa.rs#L76-L100) [libs/base/src/config/keys.rs#L58-90](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/libs/base/src/config/keys.rs#L58-L90) [src/server/connection.rs#L78-81](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server/connection.rs#L78-L81)
- Privacy mode on Windows/macOS blanks/locks the physical display during a session via pluggable impls under src/privacy_mode/ (win_mag, win_exclude_from_capture, win_virtual_display, win_topmost_window, macos); a separate whiteboard overlay feature lives in src/whiteboard/ (client/server/per-OS backends) launched via the `--whiteboard` CLI flag. — [src/privacy_mode.rs](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/privacy_mode.rs) [src/privacy_mode/win_mag.rs](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/privacy_mode/win_mag.rs) [src/server/video_service.rs#L26-32](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server/video_service.rs#L26-L32) [src/whiteboard/mod.rs](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/whiteboard/mod.rs) [src/core_main.rs#L717-722](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/core_main.rs#L717-L722)
- Virtual display (Windows): `virtual_display_manager` drives either the RustDesk IDD driver (`rustdesk_idd`) or amyuni (`amyuni_idd`), selected by IDD_IMPL const; CLI `--install-idd`/`--uninstall-amyuni-idd` manage the driver. — [src/virtual_display_manager.rs#L6-34](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/virtual_display_manager.rs#L6-L34) [src/core_main.rs#L292-312](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/core_main.rs#L292-L312)
- Remote printing (Windows, flutter builds): `remote_printer` crate installs/updates a printer (`--install-remote-printer` CLI) and `printer_service` streams jobs; gated on Win10+. — [src/core_main.rs#L313-334](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/core_main.rs#L313-L334) [src/server.rs#L162-175](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/server.rs#L162-L175)
- Self-update: `updater.rs` runs an auto-update thread (first check after 30s, then daily, 30-min retry, skipped while sessions are active via `has_no_active_conns`); platform update paths include Windows `update_me`, macOS `update_from_dmg` with a root-owned flock at /var/run/rustdesk-update.lock. — [src/updater.rs#L27-116](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/updater.rs#L27-L116) [src/rendezvous_mediator.rs#L282-285](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/rendezvous_mediator.rs#L282-L285)
- Address book / account / audit: `hbbs_http` module talks to the self-hosted API server — `account.rs` (login/OIDC), `sync.rs` (heartbeat every 15s, sysinfo upload, strategy options), `record_upload.rs` (session recording upload), `downloader.rs`; Flutter models (ab_model, user_model, group_model) consume it. — [src/hbbs_http/sync.rs#L18-44](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/hbbs_http/sync.rs#L18-L44) [src/hbbs_http/account.rs](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/hbbs_http/account.rs) [flutter/lib/models/ab_model.dart](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/flutter/lib/models/ab_model.dart)
- CLI admin surface includes `--password`, `--set-unlock-pin`, `--get-id`/`--set-id`, `--option` get/set, `--config` (decode server config from renamed exe string), `--import-config`, `--assign` (POST /api/devices/cli with Bearer token), `--deploy` (device deployment with distinct exit codes 1/3/5/6), `--check-hwcodec-config`, `--version`/`--build-date`. — [src/core_main.rs#L423-712](https://github.com/rustdesk/rustdesk/blob/c6a358afbe37c518689a6157a8e8cdbd645dcc5d/src/core_main.rs#L423-L712)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
