Repository navigation
Releases
Releases · oocsng/cppdesk
CppDesk 3.9.1
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required).
What's New in CppDesk 3.9.1
- Linux Builds and Passes Its Tests: The Linux sources had never compiled. They now build with GCC and the full test suite passes under Xvfb on every push, and the Linux app builds in CI. Build it from source with
./build.sh(see the README for the apt packages;libssl-devis new). There is no Linux download yet. - Linux Is Wire-Compatible With Windows: Linux uses real P-256 key exchange and AES-256-GCM through OpenSSL, with the same packet layout as the Windows build. Exchanging keys and messages between a Windows process and a Linux process produced the same session key and decrypted both ways. The earlier portable stand-in derived its key from public data and could not talk to Windows.
- Linux Host Diagnostics: The health sheet reads
/procandstatvfsfor CPU, memory, disk, processes, CPU model and uptime instead of showing placeholder numbers. The GPU model reads "Not detected". - Not Available on Linux Yet: privacy screen blanking, PNG snapshot export from recordings, the file clipboard, the remote terminal and remote reboot.
- Cross-Platform Fixes: Renaming an item in the file explorer now refuses a name containing a backslash on every platform, because a Windows peer reads it as a folder separator. The connect-target parser (
--connect,-c,--connect=,cppdesk://) now behaves the same way everywhere. - Windows Behavior: No change to the Windows app other than the version number. The Windows suite still passes in full, and CI builds and tests Windows and Linux on every push.
- Automated Verification: 65 test suites with more than 32,600 passing assertions on Windows and 31,687 on Linux.
CppDesk 3.9.0
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required).
What's New in CppDesk 3.9.0
- Desk ID Ownership on Relays: Nobody who merely knows your 9-digit ID can register it on a relay any more. The first time your host registers, it gives the relay a key made for that relay alone. Every later registration has to answer a fresh challenge with an HMAC of that key, so a stranger cannot take over your ID or catch viewers meant for you, even while your PC is offline. Both the built-in relay and the .NET relay enforce it. Hosts older than 3.9.0 still register IDs that nobody owns. The relay keeps owners in memory, so a relay restart forgets them and the first host to register wins again.
- Password Response Bound to the Session Key: A viewer now sends an HMAC of the password response keyed by the ECDH session key instead of the bare digest, so someone who only watches the handshake can no longer test password guesses offline. Older viewers and hosts still connect using the previous exchange. An attacker who sits between viewer and host can still try guesses, and a slow password hash would be the stronger fix.
- Update Integrity: The updater checks the downloaded file against the SHA-256 digest GitHub publishes for the release asset and deletes it on a mismatch. The default update repository is now
oocsng/cppdeskinstead of relying on a redirect from the old owner name. - Relay Hardening: The .NET relay drops a connection that sends no first frame within 10 seconds, limits each IP to 64 connections and enables TCP keepalive. The built-in relay caps connections at 512 overall and 64 per IP instead of starting an unbounded thread for each one.
- Explorer Timeout: A folder listing that gets no reply from an older host stops showing "Loading" after 10 seconds and says so.
- Unicode Text Input: Typing, pasting and backspacing in text fields now handle non-ASCII text, including characters outside the Basic Multilingual Plane. There is still no IME composition window, caret or selection.
- Hostile Packet Safety: All 31 packet deserializers were run against about 32,000 truncated, corrupted and random inputs, and none allocates more than 256 MB.
- Wire Protocol: Adds relay packet types
0x5A(challenge) and0x5B(proof), a capability byte at the end ofAUTH_CHALLENGE, and password response mode 3. - CI: GitHub Actions builds
CppDesk.exeand runs the full test suite on every push tomainand every pull request. The Linux build does not compile yet, so there is no Linux job. - Automated Verification: 65 test suites with more than 32,600 passing assertions, plus the .NET relay's
--self-test, which now covers the first-frame timeout, the per-IP limit and desk ID ownership.
CppDesk 3.8.0
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required).
What's New in CppDesk 3.8.0
- Dual-Pane Remote File Explorer: A new Explorer tab in the in-session drawer shows your PC and the remote host side by side. Browse folders (double-click to open, type a path and press Enter, drive list at the top), upload or download the selected file, and create, rename or delete folders and files on either side. Names are exchanged as UTF-8, so non-ASCII file and folder names work.
- Interactive Process Manager and Run Task: The Diagnostics process list now has a filter box, sortable Name/PID/RAM columns and a
+ Run Taskdialog that launches a program on the host (requires remote input permission). The host reports up to 60 processes instead of 15. - Shared UI Theme Module: The palette, spacing, radius, type and motion scales now live in one place (
src/ui/theme.*). Secondary, muted and accent text and the light-mode warning color were darkened to meet 4.5:1 contrast, and the transfer and reconnect overlays use fixed light text on their dark backgrounds. - Per-Monitor DPI Scaling on Windows: Layout and drawing work in device-independent pixels and follow the window's monitor DPI, including
WM_DPICHANGED. Mouse, file drop, minimum size and 1:1 mode are converted, the initial window is kept inside the work area, and 1:1 mode lands on whole pixels. - File Browser Safety: Rename takes a bare name and refuses to overwrite an existing item. Delete refuses drive roots and relative paths. An unreadable folder reports an error instead of looking empty. The host answers file requests from a viewer without file permission, so the explorer never waits forever. List responses with an impossible entry count are rejected.
- Build:
remote_file_browser.cppis part of the CMake sources, andbuild.ps1skips the C# relay step when no .NET SDK is installed. - Wire Protocol: Adds packet types for the file browser (
0x4C-0x4F,0x58) and process launch (0x2D,0x2E). Older hosts ignore them, so the explorer and Run Task need a 3.8.0 host. - Automated Verification: 58 test suites with 32,478 passing assertions, including new suites for the theme module, DPI conversion, file browser paths and safety, and the file browser protocol.
CppDesk 3.7.0
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required).
What's New in CppDesk 3.7.0
- Native Linux X11 Host and Viewer: Added support for Linux under X11 environments. Features MIT-SHM shared memory capture with XGetImage fallback, Xrandr multi-output detection, XTest synthetic keyboard and mouse injection with full KeySym mapping and mutex synchronization, and a lightweight native X11 canvas window (
src/ui/ui_window_linux.cpp) with aspect ratio letterbox bounds checking. - Decoder Stability and Crash Prevention: Added
setjmp/longjmpcustom error management toTileCodec::decodeJpegandTileCodec::decodeJpegIntoCanvas, preventing process termination when decoding malformed or truncated network packets. - Memory Safety Hardening: Fixed pointer cleanup in X11 frame capture and window teardown, clearing buffer pointers prior to
XDestroyImageto avoid double-free heap corruption. - POSIX Portability Across Core Modules: Replaced or guarded Win32-specific APIs across all core networking, updater, audio, and capture components with POSIX fallbacks, allowing clean compilation on Linux without Windows SDK dependencies.
- Headless Server Daemon Flags: Added command-line flags (
--daemon,--service-run,--host-only) enabling headless background host execution without a local graphical display. - Automated Verification: Expanded test suite to 52 test suites with 31,632 passing assertions covering Linux KeySym translation, clipboard operations, and cross-platform abstractions.
CppDesk 3.6.0
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required).
What's New in CppDesk 3.6.0
- File Synchronization & Delta Streaming: Added arithmetic overflow validation and bounds checking for block indices in
handleDeltaBlockandhandleHashReqHost. Fixed a recursive mutex deadlock incancelSyncLockedwhen processingAbortSyncrequests. - Codec & Task Pipeline Synchronization: Updated worker thread synchronization in the tile pool to wait until all active tasks complete before returning, preventing buffer reuse hazards during in-flight encoding and decoding.
- Cryptographic Validation: Enforced fail-closed verification on peer NIST P-256 public key blobs during ECDH key exchange. Hardened TOTP HMAC generation against malformed secret decodes.
- Clipboard & Directory Sandboxing: Strengthened path normalization across file transfer and clipboard managers to prevent directory traversal and circular symlink escapes.
- Media & Session Recording: Added automatic RIFF AVI container finalization and audio track flushing when closing the window during an active recording. Added clamp guards against zero or negative dimensions in the rewind scrubber.
- Relay Server Connection Guards: Added duplicate Desk ID collision detection to the standalone .NET 10 relay server, ensuring active host connections cannot be hijacked.
- Windows Packaging & Version Resource: Configured Windows application manifest execution level to
asInvokerfor standard user startup. Added Win32VERSIONINFOresource metadata (FILEVERSION 3,6,0,0) incppdesk.rcand enabled resource compiler support inCMakeLists.txt. - Automated Verification: Replaced test placeholders with deterministic post-condition assertions across all 51 test suites, with 31,603 passing assertions.
CppDesk 3.5.3
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required). - macOS (Apple Silicon & Intel): Download
CppDesk-v3.5.3-macos.tar.gz, extract, and run./build.shto buildCppDesk.appandCppDesk-macos.tar.gz.
What's New in CppDesk 3.5.3
- Full Audio Device Name Resolution: Bypassed the legacy 32-character WinMM
szPnametruncation limit using Windows CoreAudio WASAPI endpoint property resolution (PKEY_Device_FriendlyName). Audio devices now display full, untruncated names (e.g. "Microphone (High Definition Audio Device)" and "Speakers (High Definition Audio Device)"). - Audio Device Selection Dropdowns: Replaced cycle buttons in Settings with interactive combobox dropdowns for both microphone input and speaker output devices. Features floating acrylic cards with smooth spring transitions, selection checkmarks, default indicators, and backdrop dismissal scrims.
- Live Microphone Monitor & Logarithmic VU Meter: Added real-time microphone monitoring when viewing Settings > Audio & Voice. Normalizes raw voice signals through a calibrated -45 dBFS logarithmic curve with an interactive peak follower for accurate input level visualization.
- Format Negotiation & Bluetooth Hands-Free Fallback: Added audio format candidate probing across 48 kHz mono, 48 kHz stereo (with software downmixing), 44.1 kHz mono/stereo, and 16 kHz (Bluetooth Hands-Free Profile AG mode) with automatic fallback to
WAVE_MAPPER. - Fullscreen Top Navigation Parity: Integrated the Task Manager button ("Task Mgr") into the Dynamic Island floating toolbar in fullscreen mode, matching windowed session bar functionality.
- Hard Disconnect Teardown: Updated session disconnection routines on both client and host to perform abortive TCP resets (
shutdown(SD_BOTH),SO_LINGER {1, 0},closesocket), join worker threads under mutex locks, clear target Desk IDs, and wipe stale framebuffers. - Session Background Refresh: Returning to the session tab or refocusing the window triggers
markViewerCanvasFullDirty()and resetsdisplayedFrameSeq_ = 0, eliminating canvas freezing when switching between tabs or applications. - UI Copy Correction: Updated the update button text in Settings > About to "Check for updates".
CppDesk 3.5.2
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required). - macOS (Apple Silicon & Intel): Download
CppDesk-v3.5.2-macos.tar.gz, extract, and run./build.shto buildCppDesk.appandCppDesk-macos.tar.gz.
What's New in CppDesk 3.5.2
- Curved Button Click Feedback: Replaced rectangular clipping in
drawButtonwithfillRoundRect(animRect, radius, ...). Click ripples strictly honor each button's curved corner radius without straight-edge rectangular artifacts. Transparent tabs use a subtle rounded tint while the liquid sliding spring pill handles primary selection. - Top Navigation Hover Line Fix: Removed the 1px white highlight line from the sliding pill in
drawTopNavBarand guarded specular rim highlights to prevent light leakage on tab hover. - 4-Tier Connection Quality Presets & FPS Targets: Expanded presets into four tiers paired with explicit frame rate targets:
- Low Bandwidth (15 FPS, LowBandwidth preset, Adaptive FPS ON)
- Balanced Bandwidth (30 FPS, Balanced preset, Adaptive FPS ON)
- High Bandwidth (45 FPS, Balanced preset, Adaptive FPS ON)
- Very High Bandwidth (60 FPS, Ultra preset, Adaptive FPS OFF)
- Setting Help Badges & Glassmorphic Tooltips: Added 15px circular
(?)help badges after toggle switch labels. Badges expand subtly on hover and reveal floating acrylic dark tooltips rendered with second-order spring dynamics, elevation, specular borders, and directional pointer beaks. - 2FA Key Notification & Tagline Removal: Updated the 2FA key generation toast to display "New 2FA key generated" with a shorter 1800ms duration. Removed the tagline "Zero-install high-speed remote access with end-to-end encryption" from Settings and the About dialog.
- Audited UX Edge Cases & Focus Trapping:
- Modal backdrops now dismiss cleanly when clicking outside the card, with hit absorbers preventing misclicks inside modal content.
- Tab key navigation traps focus inside active modal dialogs (TOTP challenge and Command Palette) instead of escaping to background inputs.
- Added ESC key dismissal across all dialogs and modals.
- Added stream offset bounds checks in session recording playback and network frame bounds validation.
CppDesk 3.5.1
Downloads
- Windows (x64): Download
CppDesk.exe(standalone portable executable, no installation required). - macOS (Apple Silicon & Intel): Download
CppDesk-v3.5.1-macos.tar.gz, extract, and run./build.shto buildCppDesk.appandCppDesk-macos.tar.gz.
Security & Cross-Platform Fixes in 3.5.1
- File Sync Path Traversal Hardening: Rejected drive colons (
:),..traversal segments, and absolute paths inFileSyncManager::normalizePath(), and added canonical root-prefix containment checks before writing incoming delta blocks. - POSIX 64-Bit File I/O: Replaced Windows-only
_wfopenand_fseeki64calls on non-Windows targets with UTF-8fopenand 64-bitfseeko(_FILE_OFFSET_BITS=64) to support >2 GB files on macOS and Linux. - CoreGraphics Alpha Channel Normalization: Enforced
0xFFopaque alpha during macOS screen capture row copies so translucent windows do not corrupt dirty-tile diffing or SIMD tile hashes. - macOS TCC Permissions &
CppDesk.appBundle: Addedplatform/macos/Info.plistwith Screen Recording, Accessibility, and Microphone usage descriptions, configured CMakeMACOSX_BUNDLEpackaging, and added runtimeCGPreflightScreenCaptureAccess/CGRequestScreenCaptureAccessprompts. - Cross-Platform Clipboard & File Transfer: Added Apple CommonCrypto
CC_SHA256_CTXstreaming SHA-256 verification,std::filesystem::spacedisk space checks, andHOMEdownloads resolution on macOS.
CppDesk 3.5.0
CppDesk 3.5.0: Universal Cross-Platform Workstation (macOS & Windows Support)
CppDesk 3.5.0 introduces native multiplatform support across macOS and Windows, enabling low-latency remote desktop streaming, full-screen canvas viewing, and interactive input forwarding across mixed-OS environments.
Highlights & New Features
-
Cross-Platform Foundation:
- Portable socket engine unifying WinSock and POSIX with scatter-gather transmission (
WSASend/writev) andSO_NOSIGPIPEsignal protection. - Dual-engine cryptography with 100% wire format parity across Windows CNG BCrypt and Apple CommonCrypto / Security framework.
- macOS CoreGraphics display capture backend (
CGDisplayCreateImage,CGDisplayBounds) normalizing frames to 32-bit BGRA format. - macOS Quartz Event Services input injection (
CGEventCreateMouseEvent,CGEventCreateKeyboardEvent,CGEventPost) and virtual keycode translation. - macOS AudioQueue VoIP intercom capture and playback.
- SIMD runtime fallbacks supporting ARM64 Apple Silicon and non-AVX2 CPUs.
- Portable socket engine unifying WinSock and POSIX with scatter-gather transmission (
-
Native macOS Viewer Architecture:
- Dedicated Cocoa
NSWindowwith dark theme styling (NSAppearanceNameDarkAqua), transparent titlebar, and full-size content view. - Flipped
NSViewcanvas with top-left origin alignment matching remote desktop coordinates. - High-performance 60 FPS CoreGraphics Quartz 2D frame rendering with little-endian BGRA pixel blitting.
- Continuous mouse tracking area for zero-click cursor monitoring.
- Bidirectional input forwarding: normalized mouse motion/dragging, mouse buttons, trackpad precise delta scaling, and keyboard/modifier transition tracking.
- Multiplatform application entry point with POSIX argument parsing and advisory single-instance file locking (
flock).
- Dedicated Cocoa
Downloads & Assets
- Windows: Download
CppDesk.exe(standalone executable for Windows 10/11 x64, no installation required). - macOS: Download
CppDesk-v3.5.0-macos.tar.gz. Extract and run./build.sh(orcmake -B build && cmake --build build) to build the native macOS desktop application.
CppDesk 3.4.2
CppDesk v3.4.2 Release Notes
Highlights & Fixes
- Session Rewind Past Frames: Resolved frame indexing and timestamp offset calculations in
SessionRewindBuffer, ensuring past recorded session frames render accurately during backward timeline scrubbing. - Display Stability & Screen Blanking: Completely eliminated low-level hardware DPMS monitor power cutoffs to prevent host display dropouts, GPU driver resets, and cursor freezing.
- Silent Background Self-Updater: Updated native updater process execution to run completely hidden (
SW_HIDE), eliminating intrusive command console windows and automatically restarting CppDesk upon completion. - UI & Control Bar Improvements: Refined dragging mechanics for the session rewind scrubber, enhanced connection status indicators, and updated semantic protocol handshake.
- Verification: Verified end-to-end functionality across all 49 test suites (10,341 assertions passed, 0 failed).
Binaries
- Standalone executable:
CppDesk.exe