What's Changed
Note: Flatpak release will follow after March 18, 2026, when GNOME 50 runtime is published on Flathub.
Added
- RDP file import in GUI —
.rdpfiles can now be imported via the Import dialog (Ctrl+I); previously only available through file association and CLI - CLI import: 4 new formats —
rustconn-cli importnow supports--format rdp,rdm,virt-viewer, andlibvirtin addition to the existing 7 formats - Split view for Telnet, Serial, Kubernetes — split view now works with all VTE terminal-based protocols, not just SSH/SFTP/Local Shell
- Statistics: Most Used & Protocol Distribution — statistics dialog now shows top-3 most used connections and protocol usage breakdown with progress bars
- 5 new customizable keybindings — Toggle Sidebar (F9), Connection History (Ctrl+H), Statistics (Ctrl+Shift+I), Password Generator (Ctrl+G), Wake On LAN (Ctrl+Shift+L); total now 31 actions
- Sidebar keyboard shortcuts — F2 renames selected connection/group, Ctrl+C/Ctrl+V copies/pastes connections, Ctrl+M moves to group; all scoped to sidebar focus so they don't intercept VTE terminal or embedded viewer input
- Dynamic inventory sync — new
rustconn-cli synccommand synchronizes connections from external JSON/YAML inventory files; matches by source tag + name + host; supports--remove-staleto clean absent connections and--dry-runfor preview (#56) - RDP file association — double-clicking an
.rdpfile opens RustConn and connects automatically; supports address, credentials, gateway, resolution, audio, and clipboard fields (#54) - FreeRDP bundled in Flatpak — FreeRDP 3.24.0 SDL3 client built into the Flatpak; external RDP works out of the box on Wayland without
DISPLAY sdl-freerdp3detection — FreeRDP detection now includes SDL3 variants (sdl-freerdp3,sdl-freerdp); Wayland priority:wlfreerdp3>wlfreerdp>sdl-freerdp3>sdl-freerdp>xfreerdp3
Improved
- i18n: hardcoded English strings wrapped — ~40 user-visible strings across sidebar, embedded viewers (RDP, VNC, SPICE), session status overlays, and toolbar buttons now use
i18n()for translation - i18n: accessible labels translatable — ~25
update_propertyaccessible labels in sidebar, window UI, embedded toolbar, and viewer controls wrapped withi18n() - i18n: protocol display names — wrapped
display_name()call sites withi18n()and added translations for 15 strings across all 15 languages - User-friendly VNC error messages — raw error variants in VNC session toasts replaced with actionable messages ("Authentication failed. Check your credentials.", "Connection error")
- VTE context menu moved off terminal widget —
GestureClickcontroller for the right-click context menu moved from the VTE terminal to its container widget; prevents interference with VTE's internal mouse event processing in ncurses/slang applications - VTE terminal no longer wrapped in ScrolledWindow — redundant
ScrolledWindowwrappers removed since VTE implementsGtkScrollablenatively - Monitoring module property tests — 12 new tests covering
MonitoringSettings,MonitoringConfig,MetricsParser, andMetricsComputer - Stale X11 comment removed —
embedded.rscomment referencingGtkSocket/ X11 embedding updated to reflect native protocol clients
Fixed
- Secret backend default mismatch —
SecretBackendTypedefault changed fromKeePassXctoLibSecretto match User Guide and provide a universal out-of-the-box experience on all Linux desktops
Flatpak sandbox
- waypipe not detected — C-only build installs as
waypipe-c, notwaypipe; addedpost-installsymlink in Flatpak manifest;detect_waypipe()now also trieswaypipe-cas fallback;which_binary()checks/app/bin/directly in sandbox - SFTP file manager ignores SSH key — external file managers (Dolphin, Nautilus) launched via
xdg-openrun outside the sandbox and cannot access the sandbox's SSH agent;sftp_use_mcnow defaults totruein Flatpak so Midnight Commander (bundled) is used instead - ssh-agent socket in read-only
~/.ssh—ensure_ssh_agent()now uses-a $XDG_RUNTIME_DIR/rustconn-ssh-agent.sockinside Flatpak so the agent socket is created in a writable directory - KeePassXC not detected —
keepassxc-clion the host system is now detected and executed viaflatpak-spawn --host; all KDBX operations work transparently inside the sandbox; "Open Password Manager" button launches KeePassXC on the host - SSH jump host broken — replaced
-Jwith-o ProxyCommand=ssh -W %h:%p ...that passesStrictHostKeyChecking,UserKnownHostsFile, and identity file to the jump host process - mc wrapper not found — stripped host-exported
mc()bash function via--unset-env=BASH_FUNC_mc%%; installed sandbox wrapper for correct directory-change-on-exit - ZeroTrust and Kubernetes connections broken — CLI tools (
aws,gcloud,az,kubectl) now detected and executed viaflatpak-spawn --host; cloud CLI config dirs mounted into sandbox so credentials are shared between sandbox and host - mc mouse clicks produce artifacts — the
xterm-256colorterminfo entry'sXMextended capability tells ncurses/slang to negotiate SGR mouse mode (1006) with VTE 0.80; mc cannot parse SGR-encoded mouse events, causing raw escape fragments like7;6M7;6mon every click; fix: compiled a customrustconn-256colorterminfo entry (identical toxterm-256colorbut withoutXM); VTE child processes in Flatpak useTERM=rustconn-256colorto prevent the negotiation; additionally switched mc build from ncurses to slang and mc SFTP uses-g(--oldmouse) flag as defense-in-depth
Terminal / mc
- mc SFTP: initial window not fullscreen — mc read terminal dimensions before VTE widget received its GTK size allocation; added 150ms delay before spawning mc
- Split view: text selection broken —
GestureClickhandler no longer claims clicks onVteTerminalwidgets
RDP
- Crash on RDP connect (RefCell already borrowed) — the IronRDP event polling loop held an immutable
client_ref.borrow()whilehandle_ironrdp_errorattemptedclient_ref.borrow_mut().take(), causing a double-borrow panic; error handling is now deferred until after the borrow is dropped (#57) - RDP gateway ignored in embedded mode — IronRDP doesn't support RD Gateway; now falls back to external xfreerdp with a toast (#53)
- External RDP sidebar icon stays green after tab close — fixed session ID / connection ID mismatch in
add_embedded_session_tab; external xfreerdp process is now killed on tab close
SSH
- Custom options format unclear — subtitle now reads "Key=Value, comma-separated" with an example placeholder so users don't have to guess the format (#58)
UserKnownHostsFiledefaults to Flatpak path on native build —is_flatpak()now requiresFLATPAK_IDto match our app ID, preventing false positives when the env var leaks from another Flatpak process (#59)
Terminal
- Ctrl+W closes tab instead of deleting word — changed close-tab shortcut from Ctrl+W to Ctrl+Shift+W (GNOME standard); Ctrl+W now passes through to the shell for backward-kill-word; close-pane moved to Ctrl+Shift+X (#60)
UI / Clippy
- Default window size too small on first start — minimum size increased to 800×500; welcome screen adapts to narrow windows (#55)
- CSS parser warning:
@media (prefers-reduced-motion)— GTK4 CSS parser requires explicit value; changed to@media (prefers-reduced-motion: reduce) - Clippy:
RdpCommand::Connectlarge enum variant — boxedRdpConfigpayload to reduce enum size from 240 to 16 bytes - Clippy: case-sensitive
.rdpextension check — now usesPath::extension()witheq_ignore_ascii_case - Clippy: collapsible
ifandif-not-else— cleaned up nested conditionals in protocols, window, and main modules
Changed
- GTK4/libadwaita/VTE crate upgrade — gtk4 0.10→0.11, libadwaita 0.8→0.9, vte4 0.9→0.10; unlocks GNOME 48–50 APIs
- MSRV bumped to 1.92 — required by updated GTK-rs bindings
- Flatpak runtime bumped to GNOME 50 — all three manifests now use
org.gnome.Platform50 with VTE 0.80 - AdwSpinner migration — replaces
gtk::Spinnerin export dialog; cfg-gatedadw-1-6 - AdwShortcutsDialog migration — replaces deprecated
gtk::ShortcutsWindow; cfg-gatedadw-1-8 - AdwSwitchRow migration — replaces manual
ActionRow+Switchin monitoring, logging, and secrets settings tabs - AdwWrapBox for protocol filters — sidebar filters wrap on narrow sidebars; cfg-gated
adw-1-7withGtkBoxfallback - Welcome screen refreshed — updated feature highlights, replaced performance internals with Quick Access tips, added Command Palette / Import / Settings shortcuts
- CSS
prefers-reduced-motion— transitions disabled when reduced motion is requested - Tiered distro feature flags —
adw-1-8for Tumbleweed/Fedora 43+,adw-1-6for Leap 16.0/Fedora 42, baseline for older distros - Codebase cleanup — removed 25+ unused CSS classes, consolidated
futures-utilintofutures, fixed metainfo.xml duplicates, added k8s keywords, removed dead code
Dependencies
- clap 4.5.60→4.6.0, gtk4 0.11.0→0.11.1, gdk4 0.11.0→0.11.1, gsk4 0.11.0→0.11.1, glib 0.22.2→0.22.3, openssl 0.10.75→0.10.76, tracing-subscriber 0.3.22→0.3.23
- Transitive: anstream 0.6.21→1.0.0, anstyle 1.0.13→1.0.14, anstyle-parse 0.2.7→1.0.0, cc 1.2.56→1.2.57, clap_complete 4.5.66→4.6.0, clap_mangen 0.2.31→0.2.33, colorchoice 1.0.4→1.0.5, glib-sys 0.22.0→0.22.3, once_cell 1.21.3→1.21.4, roff 0.2.2→1.1.0, tinyvec 1.10.0→1.11.0, uds_windows 1.2.0→1.2.1
Installation
Debian/Ubuntu
sudo dpkg -i rustconn_0.10.0_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora
sudo dnf install rustconn-0.10.0-1.fc41.x86_64.rpmAppImage
chmod +x RustConn-0.10.0-x86_64.AppImage
./RustConn-0.10.0-x86_64.AppImageopenSUSE (OBS)
Packages available at: https://build.opensuse.org/package/show/home:totoshko88:rustconn/rustconn
# Tumbleweed
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Tumbleweed/ rustconn
sudo zypper ref
sudo zypper in rustconn
# Leap 16.0
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/16.0/ rustconn
sudo zypper ref
sudo zypper in rustconn