Repository navigation
Web Client
A RustDesk client that runs in the browser. Connect to a device from the console without installing anything locally.
It is a from-scratch TypeScript implementation of the RustDesk wire protocol — rendezvous, relay, NaCl handshake, login — not a WASM port of the desktop client.
HTTPS is recommended, not required. Over HTTPS the client uses WebCodecs and
can decode VP8, VP9, H.264, H.265 and AV1 with hardware acceleration. WebCodecs
is restricted to secure contexts, so over plain http:// the client falls back
to H.264 through Media Source Extensions, which is not. The fallback is
automatic; it is limited to H.264 and reports no per-frame statistics.
http://localhost counts as a secure context, so local evaluation gets the full
path. See Web client and HTTPS.
You also need the wss:// bridge to your RustDesk server's WebSocket ports
reachable from the browser. See Reverse proxy and
TLS.
Browser: best in Chrome or Edge. The desktop stream requires WebCodecs.
The client connects with the ID server and key saved in Settings → Server. Since 1.10.0; before that it read only the environment variables, so a key changed in Settings did not reach it.
- Screen — hardware-accelerated video via WebCodecs (VP8, VP9, H.264, H.265 and AV1 as the browser supports them)
- Audio
- Keyboard and mouse, including Ctrl+Alt+Del
- Clipboard both directions
- Multi-monitor switching
- Session statistics
- File transfer — a dual-pane manager inside the session: browse the remote filesystem, send and receive files and folders with progress, resume-aware digests, conflict prompts and drag-and-drop. Uses the File System Access API on Chromium; falls back to a picker and the Downloads folder elsewhere.
Since 1.8.0, session controls matching the desktop client:
- Remote power and security — restart the remote device, request elevation, privacy mode, block the host's own input, lock after disconnect, and since 1.9.0 lock the screen
- Display — change the remote resolution, virtual displays, codec, quality and FPS, remote cursor behaviour
- Remote terminal — text terminal sessions, shown only when the device supports them; output is bounded and control-sequence-stripped
- Camera viewing — likewise only when the device advertises it
- Local recording — record the session in the browser; the file downloads locally and is never uploaded
- Fullscreen — the bars slide off-screen; a small arrow at each screen edge brings them back, so nothing steals the pointer from the remote desktop. Since 1.11.0 the button sits in the toolbar next to the monitor selector. It is hidden in browsers without fullscreen support, such as Safari on iPhone.
View only, in the toolbar, stops everything you do from reaching the remote device: mouse, keyboard, clipboard sends and the remote terminal. Turning it on closes an open terminal. The picture, audio and voice calls carry on.
For touch screens the dock at the bottom has two input modes. In Pointer mode a touch acts as a pressed mouse button. In Touch mode a drag moves the cursor, a tap clicks and a long press right-clicks.
Since 1.9.0.
Talk to the person at the remote device. Open the side panel's Chat tab and click Voice call. The remote user gets a call request in their RustDesk client and accepts or declines it. Audio flows both ways only after they accept; until then the status reads "Waiting for the remote user…". Click End call to hang up. The call also ends when either side hangs up or the session closes.
Requirements:
-
Chrome or Edge, on HTTPS or
http://localhost. The microphone and the Opus encoder the client uses are only available there. Elsewhere the button is disabled and says so. - Microphone permission. The browser asks the first time.
- Receive remote audio on, under Session media in the More options menu. With it off the peer never opens its microphone, so the client refuses to start a call.
- Audio allowed by the device. A device or strategy that turns audio off blocks calls, and switching it off mid-call ends the call.
Your microphone is sent as mono Opus with echo cancellation and noise suppression. Any microphone sample rate works: the client tells the peer the rate the encoder actually produces, so a 44.1 kHz microphone decodes correctly.
Since 1.9.0.
More options → Remote controls → Lock remote screen locks the remote device's screen at once, the same as the user locking it themselves. The session stays connected.
It is offered when the device allows keyboard input and View only is off. Unlike most remote controls it also appears for mobile peers.
It differs from Request lock after disconnect, which asks the device to lock when the session ends and gets no confirmation back.
Since 1.11.0.
Display and media choices carry over to the next session: image quality (including custom quality), FPS and adaptive FPS, codec, scale mode, the remote cursor options, text clipboard, and audio (receive, mute and volume). They are stored in the browser and apply to every device, not one at a time.
Reset settings to defaults, at the bottom of the More options menu, puts them back and resets the session you are in.
A device's password can be saved for auto-login on subsequent connections. Saved passwords are hashed, never stored in plaintext.
Set CORTENDESK_NATIVE_WEBCLIENT=false to hide the web client. It is enabled
by default.
Permissions pushed by a strategy — file transfer, clipboard, audio and the rest — are enforced by the device, not by the client. Disabling file transfer in a strategy disables it for the web client exactly as it does for the desktop client.
Add ?debug=1 to the web client's URL, or run window.__rdDebug = true in the
browser console during a session, to log input mapping and display switching
to the browser console. Off by default; it logs every input event.