- Conducted an audit against upstream RustDesk tag 1.4.8, confirming no breaking changes to the wire format.
- Implemented various fixes including client version string, supported encoding handshake, and multi-session handling.
- Updated language files for Arabic, Czech, Danish, German, English, and Spanish to reflect new UI elements and messages.
- Enhanced clipboard and file transfer functionalities to match upstream behavior.
- Added functionality to retry downloads from GitHub on encountering rate limit and server error status codes (429, 502, 503, 504) with exponential backoff.
- Updated the changelog to reflect the new panel updater feature that enhances locale sync reliability during large updates.
- Included tests for the new retry logic to ensure proper handling of retryable status codes.
- Added a drag-and-drop upload feature in the Web Remote interface, allowing users to easily upload files to the currently open folder on the remote side.
- Implemented file transfer features including zstd compression, overwrite confirmation dialogs, and a context menu for file management.
- Updated various language files to reflect new UI elements and messages related to file transfer operations.
- Enhanced CSS for improved layout and user experience in the file transfer interface.
- Added support for an official all-in-one Docker image (`ghcr.io/unitronix/betterdesk`) as the default installation method.
- Updated installation scripts and documentation to reflect the new single container layout.
- Retained legacy two-container layout option for backward compatibility.
- Adjusted API port from `21114` to `21121` for the new layout.
- Enhanced Docker-related scripts and configuration files to support the new structure.
- Updated various language files to ensure consistency in messaging regarding Docker deployment.
Stop uppercasing custom IDs in the web console and redirect stale client heartbeats to the panel-assigned successor ID so the Go backend and panel stay in sync after a rename.
Settings Email save/test/load now send Content-Type application/json required by panel API middleware. Adds regression tests for POST without Content-Type.
- Resolved issues with panel tabs redirecting to the dashboard on 401 errors by allowing browser requests without Bearer tokens to fall through to panel handlers.
- Extended the rate limit whitelist for Devices/Users API endpoints to prevent 429 errors during high load.
- Introduced a new rate limiter for desktop layout preference saves, ensuring session-authenticated writes are managed effectively.
- Implemented staggered loading for API requests on the Devices page to optimize performance and reduce rate limit bursts.
- Updated relevant tests to cover new fallthrough behavior and rate limiting logic.
- Updated dashboard panel poll endpoints to utilize a higher widget quota, preventing 'Too Many Requests' errors during load/refresh.
- Introduced a new function to dynamically retrieve panel poll paths, ensuring efficient rate limiting for specific dashboard requests while preserving the general API budget.
- Updated server admin navigation to allow access to sidebar pages based on `server.config`, removing reliance on legacy roles.
- Improved error handling for forbidden access by rendering the correct 403 error page.
- Adjusted role checks to include `server_admin` in the admin access requirements.
- Cleared stale desktop mode state on load to improve user experience.
Add folder/direct-device/strategy assignment from User Management, clearer Pro vs Remote Operator labeling, optional restricted device scope mode, and Go/Node scope parity.
Accept RustDesk 1.4.7 empty-PK ID changes on the Go signal server, cascade panel DB rows on client/panel renames, and align Node panel with live events, strategies UI, org address book editor, and device-group accessible API payload.
Send modifiers and nav keys as Map scancodes (not mixed Legacy controlKey),
restore Auto/Windows hybrid for symbols, and add protobuf regression tests.
Add keyboard-encoder.js for Legacy chr+modifiers and full Map scancode path so Shift, Caps Lock, and symbol keys work reliably on relay sessions including Hyper-V.
Added new modifier constants for Alt, Control, Meta, and Shift in the RDInput class. Implemented methods to determine when to use scancode mapping for letter keys and to strip unnecessary modifiers for character inputs. Updated the _sendKey and _sendKeyForCode methods to accommodate these changes. Enhanced tests to verify the correct application of scancode mapping and modifier handling in various scenarios.
Added support for CapsLock and NumLock modifiers in the RDInput class to synchronize remote key events. Introduced methods to determine letter and numpad key codes, and updated the key handling logic to account for CapsLock state in Legacy mode. Enhanced tests to verify the correct application of these modifiers during key events.
Change the behavior of the _releaseAllKeys method to not release unpressed modifier keys during stop and blur events. This adjustment ensures that only actively pressed keys are released, improving input synchronization. Additionally, update related tests to verify the new behavior.
Implement keyboard mode options (Legacy, Map, Auto) and a reset keyboard feature in the remote viewer. Update UI to include buttons for selecting keyboard mode and resetting the keyboard state, enhancing user control over remote input settings. Update localization files for new strings across multiple languages.
Panel shows soft-deleted devices with restore and permanent delete, hard delete works for already-soft-deleted peers, and change-ID conflicts return a clear localized message across all locales.
Isolate Go signal on :21116 from panel PORT=5000 in .env, fix LE same-file cp redeploy for console user, add Repair HTTPS/TLS path, and harden post-toggle health checks.
Auto-redeploy TLS material on update/repair, unify SSL menu C with protocol toggle T, and retry post-toggle health checks so the console user can always read keys under $RUSTDESK_PATH/ssl/.
Refs #219
Co-authored-by: Cursor <cursoragent@cursor.com>
Add PUBLIC_SERVER_ID, PUBLIC_RELAY_SERVER, and PUBLIC_API_URL with Settings UI,
unified endpoint resolution across Dashboard/Keys, and fallbacks via PANEL_PUBLIC_HOST.
Wire billing/NTP env from console .env into Go on Linux, Windows, and Docker; add OS NTP fallback and Commercialization settings UI to configure and restart the server.
Add support for handling file action confirmations during uploads, including the ability to process send confirmations from peers. Enhance the file transfer protocol by introducing a new method to build and handle file metadata digests prior to upload blocks. Update related tests to ensure proper encoding of file response digests for uploads.
Refine the RustDesk file transfer protocol by correcting the FileAction mapping for uploads and downloads, ensuring full remote paths are used. Implement optional zstd block decompression for downloads and improve transfer progress reporting. Update related tests for clarity and accuracy in encoding file transfer requests.
Whitelist linux-ensure-console-user.js in sudoers, invoke it via passwordless
sudo from the update module, refresh sudoers after privileged server deploy,
and align betterdesk.sh repair paths so systemd unit helpers apply without a
manual root step.
Replace invalid prototype getter syntax in local-files.js and mesh-files.js
so the file transfer modal loads in browsers. Panel updates patch
betterdesk-server.service via a passwordless-sudo helper instead of
interactive sudo tee.
Refs #217
Unify .env and systemd updates on protocol toggle, probe the correct panel
port (5443 vs 5000), and match Client API TLS in post-config tests. Use 307
redirect and skip HSTS for self-signed installs so browsers can return to HTTP.
Enhanced mobile device detection logic to prevent false positives that blocked access on PCs, tablets, and unfolded foldables. The phone gate now respects the `[hidden]` attribute, skips zero-width false positives, excludes fine-pointer desktops, and re-evaluates on viewport resize. Updated related CSS and JavaScript to support these changes.
Ship mesh layer as default-on with updater/installer MESH_ENABLED=Y injection,
Settings groups/recordings UI, device power and filter UX, relay multiplexing,
WoL wake fallback, mesh RBAC permissions, and REST automation docs.
Added new localization entries for multiple languages, including mobile navigation labels and input modes (touch, touchpad, keyboard, special keys). This update improves user experience by providing comprehensive support for mobile users and ensuring consistent messaging across various languages.
Updated the documentation for RustDesk mass-deployment, including the correct `--config` deploy string format and the addition of editable client server address fields. Enhanced the dashboard with features like **Copy deploy string** and **Intune script** snippets. Introduced a new environment variable `PANEL_PUBLIC_HOST` for better configuration management. Added UI elements for improved user experience in client configuration.
Restore agent-client to git and wire agentClientBuildWorker for Tauri builds
(deb/rpm/AppImage/MSI) with branding and Go sidecar staging. Add TLS gate,
settings lock, policy sync, preflight UI, CDAP registry, and Generator
product_type split (agent-client vs support-agent vs rdclient).
Added a new API endpoint to list uploaded background images, enhancing the branding settings page with a background image library. Implemented UI components for selecting and displaying background images, including improved handling of background size and position. Updated tests to validate the new functionality and ensure proper integration with existing branding features.
Added functions to load and apply appearance settings dynamically based on user configuration. Introduced a search feature in the settings UI to filter through settings sections. Enhanced the branding readability alert to provide feedback on potential readability issues. Updated the backend to support a versioned appearance model and improved the branding API to include appearance data.
Deleted the obsolete build workflow for BetterDesk and made adjustments to the CI configurations across multiple workflows. This includes changing permissions from write to read in the release-client and secret-scan workflows, updating the Node.js setup in the web-nodejs CI, and enhancing the rate limiting for RdClient pages. Additionally, improved the handling of return URLs in the auth middleware and added new utility functions for better security and logging.
Improved the background image upload process by adding a target parameter to specify which branding key to update. The upload now applies the background image atomically, ensuring that the branding data is updated in a single operation. Additionally, updated the response to include branding data and revision information. Enhanced tests to validate the new functionality.
Refactored the background image upload process to improve user feedback during uploads. Introduced new helper functions for setting upload status and handling file name display. The upload process now utilizes XMLHttpRequest for progress tracking and error handling, ensuring a smoother user experience. Added tests for the upload endpoint to validate multipart image uploads.
Updated sidebar styles to use new glass background variables for both the sidebar rail and flyout. This change enhances the visual aesthetics by applying a semi-transparent glass effect, improving the overall UI experience. Additionally, adjustments were made to the theme CSS to ensure consistency across light and dark modes.
Apply setgid group-write on $RUSTDESK_PATH for the betterdesk console user,
re-sync permissions after the Go server starts, and verify both console data/
and Go data directories.
Fixes#206
- Added a dedicated login page for the Remote Desktop client, allowing operators to sign in when their session expires.
- Implemented safe return URL handling for the login process.
- Updated authentication middleware to support RdClient-specific routes and permissions.
- Enhanced localization support for the new login feature across multiple languages.
- Improved user experience by redirecting to the appropriate pages based on authentication status.
- Introduced a new glass surface effect for cards, modals, and forms, enhancing the UI with a frosted glass appearance.
- Added localization strings for the glass surface feature in multiple languages.
- Implemented settings for enabling/disabling the glass effect, adjusting color, blur, and opacity through the settings interface.
- Updated CSS variables to support the new glass surface styling.