RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration.
- Works on Windows, macOS, Linux, iOS, Android, Web.
- Supports VP8 / VP9 / AV1 software codecs, and H264 / H265 hardware codecs.
- Own your data, easily set up self-hosting solution on your infrastructure.
- P2P connection with end-to-end encryption based on NaCl.
- No administrative privileges or installation needed for Windows, elevate privilege locally or from remote on demand.
- We like to keep things simple and will strive to make simpler where possible.
For self-hosting setup instructions please go to our home page.
Screenshots
Observed history
| App | Change | Version | When ↓ |
|---|---|---|---|
| updated | 1.5.0 | 4 Oct 2026 |
Upstream releases
Release notes supplied by the developer. These dates are not Flathub package publication times.
1.5.030 Sept 2026
- Webrtc #15684
- Id whitelist #15586
- Hdr tonemap #16033
- optionally sync clipboard between connected sessions #15934
- feat(terminal): add Ctrl and Alt toggles to mobile terminal keyboard #15532
- feat(recording): add visibility and service storage options #15662
- feat(rdp): title the mstsc window after the peer instead of "localhost" #15781
- feat(flutter): add mobile canvas lock #15877
- Kx v1 #16326
- feat(terminal): add opt‑in OSC 52 clipboard writes #16072
Changes
- improve qos #16082
- refact: remove feature cli #15524
- WebClient: 3.44 webcodecs offline #15722
- Linux drop shell from service loop #15979
- port forward shared conn #16062
- temporary password: rotate when a peer is let in, not when it leaves #16080
- cursor: bound the decoded cursor caches on the Flutter client #16304
Fixes
- fix: update download, force tls #15529
- harden wf_cliprdr.c #15515
- fix: check valid id #15535
- Fix Adjust Window sizing across DPI #15592
- restrict switch sides to remote desktop sessions #15610
- fix(linux): forward forced display server to user server #15627
- fix: refresh wayland uinput range on compositor layout change #15628
- fix(deploy): don't wipe local id when --deploy gets an empty --id #15633
- fix(keyboard): jis, macos, muhenkan henkan #15669
- fix: validate RGBA clipboard dimensions #15672
- fix: validate remote audio channel count #15673
- fix(wayland): scale portal pointer coordinates on niri #15683
- fix(clipboard): win, populate file formats #15692
- fix(clipboard): validate files #15693
- refact(oidc): manually open the browser #15706
- Fix flutter white window forceredraw #15717
- fix(linux): make quit_cm actually quit the connection manager #15718
- fix(linux): load librustdesk.so relative to the executable #15719
- fix(wayland): subscribe to portal Response before making the request #15726
- fix(linux): keep‑awake does nothing on a GNOME login screen #15772
- fix(terminal): send SGR mouse wheel reports with the button codes app… #15817
- fix(file‑transfer): improve large directory loading #15830
- fix(terminal): keep selection aligned after clearing scrollback #15831
- fix(flutter): make Adjust Window reliable across desktop platforms #15853
- fix(wayland): back off the polling display lookups after a failure (drm) #15865
- fix(drm): deliver a rotated output upright (#15886) #15889
- fix(flutter): initialize the cursor hotspot y from its own origin #15898
- fix(linux): a session logout should hand the peer to the login screen #15905
- feat(terminal): use platform‑native copy and paste shortcuts #15931
- Prefer active X11 session display #15933
- fix: Show My Cursor freezes in View Only mode when remote user moves mouse #15936
- fix appimage: gdk‑pixbuf PNG decode crash on remote cursors #15938
- fix(flutter): align terminal shortcuts with platform conventions #15970
- fix(linux): a Wayland session without XAUTHORITY is not incomplete #15978
- fix: show speed in desktop file transfer status #15980
- fix(linux): Set AppIndicator ID for tray‑icon #15981
- fix: recover DXGI capture after access loss #16024
- fix(custom client): preserve executable name casing during update #16057
- Fix/audio stream continuity #16095
- fix: clipboard, preserve uncompressed special format data #16100
- fix(audio): update CPAL for WASAPI thread priority #16110
- Dead peer recovery #16117
- fix(screenshot): keep cached image when saving fails #16120
- fix(drm): measure the cursor hotspot on drivers without HOTSPOT_X/Y, confirm before publishing #16122
- server: do not lock the screen for a connection whose session reconnects… #16124
- fix(audio): restart capture when the device is unavailable #16142
- fix(audio): preserve compatible playback and recover failed Windows outputs #16150
- Upgrade FFmpeg to 7.1.1 to fix HEVC WPP deadlocks #16169
- fix(cursor): correct native cursor sizing and validate received images #16213
- fix(audio): three 100% CPU busy loops on the _pa path #16229
- fix(rdev): macos, numpad flag, clear on text keys #16253
- fix: avoid unnecessary clipboard reads and stale initial sync #16293
- fix(ws): reject text frames after encryption is enabled #16295
- fix: restrict VRAM stall detection to AMD SDK #16319
- fix(unix): ignore SIGPIPE in native Flutter entry #16322
- Fix clipboard range overflow #16329
- fix(appimage): build AppRun with bounded argument splitting #16330
- fix(clipboard): unix, check file transfer permission on incoming file… #16333
- fix(mobile): honor reverse mouse wheel setting #16337
- Fix, online state, validate the data length #16339
- fix(clipboard): unix, don't let the next file's preload fail a request #16364
- fix(linux): use BUS_VIRTUAL for the virtual mouse device #16382
- fix(clipboard): unix, keep Windows directories searchable #16406
- Don't retry the _pa ipc at a Linux login screen #16390
1.4.96 Jul 2026
- Support controller user attribution in audit logs #15407
- Feature: Restore the last viewed monitor on auto reconnect #15441
- auto-close terminal tab/window when shell exits #15448
- Add authentication details to connection audit #15456
- refact: remove feature cli #15524
Fixes
- Fix/session scope permission audit #15469
- fix: non-E2EE show dialog #15514
- fix(wayland): clipboard, support ext-data-control #15366
- refact: file transfer, do this for all conflicts(tasks) #15385
- fix(clipboard): unix, refresh cached file size/mtime on re-copy #15392
- fix(custom-client): show options, incoming-only #15394
- fix(fuse): fuse path broken, since ipc path changed #15406
- Tray menu opens on left-click after tray-icon ≥0.17 update (regression from 1.4.6) #15413
- fix(fuse): umount #15426
- fix(update): msi, norestart #15440
- fix(clipboard): make CLIPRDR format-map growth checked #15493
1.4.821 Jun 2026
- Feature: Add monitor-switch buttons to remote toolbars #15342
- Refact/privacy mode 1 multi monitors #15321
- autocomplete online #15313
- feat: theme logo #15268
Changes
- refact: restart remote device, autoconnect #15290
- refact(oidc): icon azure to microsoft #15278
- Refact/printer driver default unchecked #15191
Fixes
- fix Wayland→Wayland clipboard paste
- fix(arm64-linux): fix CJK font rendering on flutter-elinux #15324
- fix(linux): reap leftover logind session procs on headless teardown #15337
- Fix/generate py target injection #15248
- Fix clipboard synchronization not fully disabled in View Only mode #15224
- fix(keyboard): win, key, Pause #15351
1.4.72 Jun 2026
- Add advanced option to allow CLI settings when custom client toggles Disable settings #15138
- Drag whole toolbar; snap to all four edges of the remote session window #15051
- Github action hash pinned
- feat: option, enable-privacy-mode & enable-perm-change-in-accept-window #14875
- impl(cm): implement change_theme and change_language callbacks #14782
- add brute-force protection for one-time password #14682
- add option to hide stop-service when service is running #14563
- --deploy, reuse the device token #15035
- refact(password): encrypt #15073
- Harden os password (terminal windows and headless linux) anti brute force #14985
- stop retrying on restricted mobile access errors #14797
- (keyboard): wayland clipboard input prompt #14700
Fixes
- fix: bytes codec, reserver(), check max #15168
- fix(crypt): symmetric crypt, zero nonce #15144
- fix: add integer overflow check in wf_cliprdr.c #15142
- scrap/wayland: insert videoconvert to fix screencast on COSMIC / DMA-BUF portals #15063
- fix(ipc): scope active-user IPC routing to root CLI main requests #15058
- fix(custom-client): desktop, incoming only, touch drag #14928
- fix(fs): file transfer, reconnect, restore dir #14925
- fix: remove unsafe exec() in wf_cliprdr.c #14924
- Terminal utf8 and reconnect #14895
- fix(sicter): control side, privacy mode #14880
- fix safari-oidc https://github.com/rustdesk/rustdesk/issues/14861 #14867
- fix(linux): enable mouse side buttons in remote sessions #14848
- fix(client): serialize X11 keyboard grab and debounce focus feedback #14836
- flutter: improve address book pull error handling #14813
- flutter: shift after one shot IME capitalization #14695
- fix: file transfer, path traversal #14678
- fix(ipc): harden local IPC authorization and portable-service bootstrap flow #14671
- fix switch sides for macOS peers #14661
- fix(shell): restrict kv in update_install_option #14564
- fix(linux): prevent X11 BadWindow crash in get_focused_display #14561
- Fix(wayland): improve error message when xdg-desktop-portal is unavailable #12897 #14543
- Fix Linux tray icon collision with other tray-icon crate apps #14530
- Fix: note dialog not shown when closing session from reconnecting screen #14528
- fix empty strategy value cannot apply over default advanced options #14502
- fix(flutter): reduce accidental horizontal trackpad scrolling during vertical pan #14460
- Move port mapping afterwards #14448
- fix(update): macos, test before update #14446
