Mỗi bản phát hành, công khai.
Từ v0.6 (Tháng 5 năm 2026) trở đi — mỗi build phát hành kèm ngày, tiêu đề và những thay đổi trọng yếu. Lịch sử phát hành thực tế, không phiên bản mang tính khát vọng.
v0.13.17
Android Direct APK rebuild — Russian locale fix, GoDesk-branded launcher icons, full 3-ABI native bundle
- FIXAndroid: Russian system locale was rendering Arabic onboarding instead of falling back to English. Root cause was Flutter's default `basicLocaleListResolution` returning `supportedLocales.first` for unmatched languages — and gen-l10n sorts ARB files alphabetically, so `app_ar.arb` happened to be index 0. Added an explicit `localeListResolutionCallback` that walks the device's preferred-locale list, matches by languageCode, and falls back to `Locale('en')` cleanly.
- FIXAndroid: launcher icon was the default cyan-blue Flutter placeholder, not the GoDesk brand mark. Replaced with the amber (#f0a020) + cream (#f0e8d8) brand mark from `branding/godesk-window-favicon.svg` — generated 5 ic_launcher.png densities (mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi) plus 5 ic_launcher_foreground.png at adaptive-icon densities (108..432px with 16% Material safe-zone inset), plus mipmap-anydpi-v26 adaptive-icon descriptor referencing the cream background color.
- FIXAndroid: previous APK was 124 MB but rebuild produced only 54 MB without the rustdesk native core. Native libs (`librustdesk.so` for arm64-v8a/armeabi-v7a/x86_64) live in `~/godesk-client/jniLibs/` from cargo-ndk but the Gradle source-set expected them at `flutter_godesk/android/app/src/main/jniLibs/`. Copied them into the right location + renamed the typo'd `liblibrustdesk.so` (arm64) to `librustdesk.so`. Final APK is 130 MB with all 3 ABIs bundled.
- FIXAndroid: build was failing with Jetifier transform error on byte-buddy-1.17.5.jar (`Unsupported class file major version 68`). byte-buddy 1.17.5 is compiled for Java 24, which Jetifier's bundled ASM doesn't understand. Set `android.enableJetifier=false` in gradle.properties — safe because all transitives are already AndroidX-native.
- ADRBuild pipeline: native Windows Flutter (`C:\src\flutter\bin\flutter.bat`) doesn't accept UNC paths as cwd (CMD limitation), and WSL's flutter expects Linux-native Java + Android SDK. New build flow: robocopy from `\\wsl.localhost\...` to `D:\godesk-build-tmp\`, build there, scp APK back. Documented in wiki/log.md so the next builder doesn't repeat the discovery.
v0.13.5
Reality-Checker UI audit response — 12 dead controls fixed, 6 documented for next Rust patch round
- FIXSecurity/trust: View-only mode chip now actually enforces view-only on the remote session. Previously the chip wrote a key the Rust core ignored, so users got a full-control session despite picking view-only.
- FIXSettings → Image Quality: Eco / Balanced / Quality / Lossless presets now apply to every connect. Previously persisted to a key with zero readers.
- FIXSettings → General → Startup: Launch-at-login wired through `launch_at_startup` (writes the platform-native autostart record). Check-for-updates re-keyed to the option Rust actually reads.
- FIXSettings → Defaults: 6 of 11 toggles now apply on connect via per-session option toggles (show-cursor, mute-audio, lock-on-end, view-only, hide-wallpaper, clipboard). 4 still cosmetic, scoped for next round.
- FIXSettings → Network → Proxy: each save now calls `mainSetSocks` so the proxy is applied at runtime instead of just being persisted to options.json (where the runtime path ignored it).
- FIXSettings → About: IPC + E2E status panels reflect the live FFI bridge state instead of a hardcoded `ok: true`. They'll go red if the Rust core stops responding.
- FIXSession → FIT cycle button: choice now persists across sessions via a dedicated `godesk-display-fit-last` key.
- FIXSession → MORE → REBOOT: shows a follow-up message if the remote doesn't reboot in 30s (typical cause: controllee not running with admin rights).
- NEWSettings → General → Language: manual locale picker added (System default + 12 native names). Previously the app only respected the system locale, so users on Russian Windows couldn't preview the German / Polish / Turkish translations we ship.
- NEWgodeskflow.com/c/<slug>: invite links now actually resolve. Decodes the embedded peer ID + OTP and offers a deep-link into the GoDesk client. Previously these URLs returned 404.
- NEWSettings → Network → Custom HTTP headers: hidden — no Rust consumer existed for the option, so the field was deceptive. Will return when the consumer ships.
- NEWAuth gate: dart-define flags for Supabase URL + anon key are now baked into every Win build. Earlier v0.13.4 build silently shipped without them, bypassing the AuthScreen entirely. The 12 client locales now correctly land on email-OTP for first-run.
v0.13.4
P1+P2 client UX polish — Simple/Advanced settings, mode chips, empty-state coaching, LCD palette differentiation
- NEWSettings has a Simple/Advanced toggle. Power-user sections (Network, Defaults, Encryption, Logs) hide by default and persist your choice across launches.
- BETTERConnect-mode chips reduced to [Full control] [View only] + Advanced ▾. File-transfer / TCP / RDP / Terminal modes still available, just one tap deeper.
- BETTERSession toolbar advanced ops (Privacy / Lock / Reboot) collapsed behind a single MORE ▾ menu. Reboot is visually flagged as destructive.
- BETTERLCD palettes differentiate by purpose: green for IDs and connection state, amber for file-transfer throughput, blue for diagnostics + encryption readouts.
- NEWEmpty-state coaching banner on Home shows ID-sharing tip when peer list is empty. Dismissible and persisted.
- NEWConnecting overlay stage labels (Resolving / NAT traversal / Encrypting / Connected) now i18n-keyed across all 12 locales.
- NEWAuthScreen has a Quit GoDesk option for users who don't want to authenticate.
- FIXAudio volume + mic-gain controls switched from rotary knobs to sliders — async cursor tracking on knobs felt unresponsive.
- NEWConcurrent-session enforcement live: tier limits (Free 1 / Lite 1 / Pro 3 / Team 10) gate at connect time via the active_session_count Supabase RPC. 30-minute stale-session window protects against crashed clients.
v0.13.1
Interactive-control audit + sound-output FFI + macOS notarization
- FIXOnboarding GRANT buttons now actually request OS permissions (Accessibility / Screen Recording / Input Monitoring on macOS). Earlier builds toggled a local boolean — gate could be passed without granting anything.
- FIXVolume + Mic-gain knobs in Settings → Audio now persist their value across restarts (godesk-audio-volume / godesk-audio-mic-gain options).
- NEWmacOS .dmg signed by Developer ID Application: UPDEVTEAM LTD — notarized + stapled by Apple. spctl reports 'Notarized Developer ID'.
- NEWSound-output FFI: Settings → Audio → Output device picker now enumerates real devices via cpal/PulseAudio.
- BETTERWindows installer (NSIS) bundles librustdesk.dll directly. v0.9.5 → v0.13.1 jump caught it missing.
v0.13.0
Full per-screen i18n coverage — Settings, Onboarding, Invite Manager
- NEWOnboarding (38 keys), Invite Manager (20 keys), Settings (26 keys: tabs + section labels + buttons) all read from AppLocalizations. 9 locales updated in lock-step.
- NEWmain_get_sound_outputs FFI exported from the Rust core. Linux uses a new get_pa_sinks helper (mirror of get_pa_sources).
v0.12.0
Phase F — tray status icon + client-side ban check + per-screen i18n start
- NEWTray menu now shows live account state (email, tier badge, device count) and a Sign out leaf wired to Supabase signOut.
- NEWis_account_banned Supabase RPC + client-side gate. Banned accounts can't open new sessions even with device-count headroom.
- NEWAuthScreen, Home tier banner, Connecting overlay password form, Session toolbar tooltips, Files toolbar buttons all i18n-keyed.
- FIXEmail field couldn't accept the letter 'O' (global keyboard handler ate it). Skip global shortcuts when EditableText has focus.
v0.11.0
Phase C/D/E — account enforcement, sessions audit, i18n scaffold
- NEWTier limits config table seeded (Free 30 devices / Lite 50 / Pro 200 / Team unlimited). RealBridge.connect() pre-gate refuses dials when the device cap is hit.
- NEWSessions audit telemetry — every successful connection inserts a row into Supabase 'sessions' with peer IDs + duration. Failures silent (don't kill an in-flight session if Supabase is down).
- NEWi18n scaffold for 9 locales: en, es, pt, fr, ar, hi, id, vi, zh. flutter_localizations + intl wired in main.dart.
- NEWTier usage banner pinned above YOUR ID — used / cap devices + amber-at-80% upgrade prompt.
v0.10.3
Phase A — Supabase magic-link auth + interactive-control audit
- NEWSupabase project (eu-west-1) — accounts, devices, subscriptions, sessions audit, ban_list. Magic-link OTP via Supabase signInWithOtp; AuthScreen accepts both 6-digit token and full URL paste.
- NEWComprehensive interactive-control audit: VIEW + FILES session-toolbar buttons wired, retryTransfer re-issues sessionSendFiles from _transferOrigins, defensive try-catch wraps every input handler.
- FIXMouse jitter (was 1000+ Hz pumping FFI). 8 ms throttle = 120 Hz on the wire.
v0.10.0
ScreenCaptureKit migration — replaces CGDisplayStream on macOS Tahoe
- FIXApple killed CGDisplayStream on Tahoe — Capturer::new succeeded but no frames came back. New ObjC bridge (libs/scrap/native/macos_sck/sck_bridge.{h,m}) exposing C ABI to Rust. Verified 25 fps capture.
- BETTERPermission prompts (Accessibility, Screen Recording, Input Monitoring) fired at startup instead of mid-session for clearer UX.
v0.9.5
Mac↔Win remote-desktop end-to-end on godeskflow.com infra
- NEWMigrated rendezvous + relay off rustdesk.com onto self-hosted hbbs/hbbr at id.godeskflow.com / relay.godeskflow.com.
- NEWSingle-binary architecture (ADR-014): try_start_cm bypassed when CM binary missing, desktop_changed loop bypassed in user-mode GUI launch.
- NEWmacOS Hardened Runtime + cs.disable-library-validation so dlopen of librustdesk.dylib works under notarization.
v0.7.0
Address book — ADD PEER, hotkeys, latency graph, inline logs
- NEWADD PEER dialog with OS picker + ID validation. Address book persists via bridge.upsertPeer / forgetPeer.
- NEWLatency sparkline panel (live diagnostics stream).
- NEWHotkeys: Ctrl+L for ID input focus, Ctrl+1..9 for display switch in active session.
v0.6.0
Drag-drop, sort menu, inline theme controls, multi-monitor
- NEWFiles screen: drag-drop file paths from explorer, drag handle to reorder transfer queue.
- NEWSettings → General → inline theme controls (dark mode toggle, accent palette, LCD palette, intensity slider).
- NEWMulti-monitor support: switchDisplay FFI + display switcher PopupMenuButton in session toolbar.
Tải build mới nhất.
v0.13.17 là phiên bản hiện tại. Win NSIS chưa ký (chờ xác nhận ký EV), macOS pkg đã ký + đã chứng nhận, Linux .deb cho Debian/Ubuntu/Mint.