Repository navigation
feat(web-client): add an experimental browser remote control client - #351
Open
yardbirds0 wants to merge 1 commit into
Open
yardbirds0 wants to merge 1 commit into
yardbirds0 wants to merge 1 commit into
Conversation
Contributor
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
8 of 10 tasks
yardbirds0
force-pushed
the
web-client-v2-acceptance
branch
from
October 12, 2026 05:56
72400dd to
5b5d8c0
Compare
yardbirds0
marked this pull request as ready for review
October 12, 2026 06:15
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This browser remote-control feature is usable in the desktop configurations tested so far, but it is still experimental and not fully polished. Broader compatibility, long-session reliability, and some interactions need more work. Community testing, review, and contributions are welcome so we can improve it together.
Summary
Adds a Console-maintained browser remote-control client that connects through the companion backend's authorized gateway and the existing RustDesk rendezvous/relay servers. It does not embed the proprietary V2 web application. This replaces the previous incremental commits with one consolidated feature commit based on official
mainat5659193d88fb3bf513ad487e171f33755c89f750.Companion backend: databk/rustdesk-console#393
Connection and session interface
Web access follows backend-issued scope rather than existing address-book/native permissions. Ordinary users need
web_client.connect; independent files also requireweb_client.file_transfer. Manual IDs use the same server-side authorization as the device list. Logout/account/token changes, revocation, and stale callbacks cannot leave the previous session usable.Native protocol and media
The self-contained Worker handles fixed RustDesk protobuf inputs, signed server/peer identity verification, authenticated key exchange, password challenges, bounded binary transport, and native session messages. Console login tokens are not passed into the native protocol. KX 1 uses direction-specific keys; compatible authenticated KX 0 sessions retain a visible legacy-encryption risk/upgrade notice. Invalid identity, downgrade, replay, or decryption failures close the connection instead of silently retrying insecurely.
Smooth quality reduces the requested bitrate ratio. Requested FPS is an upper bound, not a throughput guarantee. Video flow control, cooperative Worker scheduling, decode recovery, and bounded audio credit/FIFO scheduling address observed burst/backlog problems without unbounded queues or a claim of guaranteed 120 FPS.
Input and remembered credentials
Mouse, wheel, drag, keyboard/IME, secure-attention/lock actions, mappings, touch input, and the screen keyboard use native protocol messages. Focus loss, hidden tabs, menu/modal changes, permission loss, and disconnect release held input and pending resources. Cursor visibility distinguishes local control from remote-side activity.
Normal pages cannot reliably capture OS/global shortcuts. Supported fullscreen keyboard capture requests the browser's permitted keys, displays its actual state, and releases its lease correctly across delayed API responses. A shortcut detected outside fullscreen prompts at most once per connection, with fullscreen and dismiss actions. Some OS shortcuts can still remain local; the browser's fullscreen-origin banner cannot be renamed by this application.
Remembered device credentials are derived password-equivalent material encrypted in IndexedDB with a non-exportable key, scoped to Console account/server/device, and handled inside the Worker. There is no plaintext fallback or backend password storage. Invalid authentication and explicit removal invalidate records; canceled/stale writes cannot restore them. This does not protect against malicious same-origin code.
Platform integration, locales, and packaging
Deployment and limits
Requires the companion backend, HTTPS/secure browser APIs, fixed server public key, native WS rendezvous/relay support, and proxy Upgrade forwarding to
/api/web-client/socket. Protect legacy/raw anonymous browser WS bypasses; do not treat a frontend visibility check as authorization. Existing native passwords/remote approval and feature permissions still apply. No custom hbbs/hbbr fork is required for remote control, and there is no P2P media mode in this implementation.Browser directory/file/microphone/fullscreen APIs have compatibility and user-activation requirements. Native clipboard/file restrictions remain important because the transparent backend cannot inspect all encrypted content. Audio device output and two-way human conversation need broader acceptance. Mobile/multi-monitor/native-version, long sessions, and the previously intermittent hover-without-click symptom are not declared universally resolved.
Validation
Local official-PR equivalents and additional client checks passed on the synchronized baseline:
npm ci; 87 Jest suites / 812 tests passed, including the official API/access/update subset. The final cleanup additionally passed 64 targeted tests.Historical real-device testing received and decoded VP8/VP9/AV1, exercised VP9/AV1 4:4:4 and remote resolution changes, verified transferred file bytes and playable video-only recording, and checked bounded decoded audio scheduling. Those results are not a complete matrix or certification of this final cleanup snapshot. No new production deployment was performed for this review.
Progress and remaining work
[████████░░] 8/10 review milestones completePlease keep this as a draft and use the remaining checklist to guide collaborative testing.