Repository navigation
v0.24.7
What's Changed
Added
- The Kubernetes connection editor can pick a context from the kubeconfig — the Context field keeps its free-text entry but gains a button that lists the contexts defined in the kubeconfig the connection names (or
$KUBECONFIG/~/.kube/configwhen the field is empty), with the current-context marked. The list is read withserde_yaml, taking only the context names andcurrent-contextand ignoring every other kubeconfig field; a missing or unreadable file simply offers nothing to pick. (rustconn-core/src/protocol/kubernetes.rs,rustconn-core/src/protocol/mod.rs,rustconn/src/dialogs/connection/kubernetes.rs) - A crash from a Rust panic is now recorded to a local log, and the next launch says so — a panic writes its message, location, backtrace and the build version to
$XDG_STATE_HOME/rustconn/crash-<timestamp>.log(the OS data directory where there is no state directory). The next start shows a banner with an Open Log button; once the log has opened the logs are cleared so a handled crash does not reappear (if it cannot be opened, the banner stays and a toast names the file). A panic the program survives (one caught internally, or one that only ends a background thread) is removed again on a clean exit, so the banner appears only when the previous run really did not finish. The log is owner-readable only, stays on the machine and is never sent anywhere — review it before sharing, as a panic message can contain formatted data. This catches Rust panics only; aSIGSEGVinside a C library (GTK, VTE) does not come through here. (rustconn-core/src/crash_report.rs,rustconn/src/main.rs,rustconn/src/app.rs,rustconn/src/window/mod.rs) - Run a saved snippet from the Command Palette, and save a terminal selection as a snippet — the palette's new
!prefix lists snippets and runs the chosen one; because the palette hangs off the main window, it always asks for confirmation first, so a snippet is never sent to the wrong terminal when a detached window or split pane holds focus (issue #315). The terminal right-click menu gains Save Selection as Snippet…, which opens the snippet editor with the selection of the terminal you right-clicked pre-filled (also in a split pane or a detached window) for you to name and trim — nothing is stored without your action. (rustconn-core/src/search/command_palette.rs,rustconn/src/dialogs/command_palette.rs,rustconn/src/dialogs/snippet.rs,rustconn/src/terminal/config.rs,rustconn/src/window/snippets.rs,rustconn/src/window/snippet_actions.rs)
Fixed
- A "Save N Files" RDP download no longer hangs on "Downloading…" when the clipboard channel is gone, and a failed save is now shown as a toast (issue #390) — if the CLIPRDR channel was unavailable when a file-contents request was made, the request returned silently and the button sat on "Downloading…" forever, because the error was raised through the clipboard backend that no longer existed. The failure is now reported straight through the session event channel, so the batch unwinds. A batch that could not save every file also raises an error toast, not just a 3-second inline status the user could miss. (
rustconn-core/src/rdp_client/client/commands.rs,rustconn/src/embedded_rdp/polling_handlers.rs) - Embedded RDP now locks the remote file clipboard during a copy, so a file copied in the session survives a focus change (issue #390, Fix B) — the embedded clipboard channel now advertises
CAN_LOCK_CLIPDATA. When the server also supports it (Windows does), IronRDP sends a Lock PDU after the Format List Response whenever the server announces a file list, carries theclipDataIdon each File Contents Request, and expires each lock on its own. Without it a server was free to drop the File Stream data the moment its clipboard changed — the "copy a file in the session, switch to another app, come back and Save" race that the earlier Fix A could not cover, because the focus-return format announce replaced the clipboard before the download even began. (rustconn-core/src/rdp_client/clipboard.rs) - A minimal RDP server that rejects the external client now says which client to use (issue #409) — against a screen-sharing server that implements only the rdpgfx/AVC (EGFX) capability set, such as KRDP, the external FreeRDP client advertises the full standard RDP capabilities in Demand Active and the server tears the session down during the capabilities exchange (
CAPABILITIES_EXCHANGE/STATE_RUN_FAILED). That failure used to surface as a bareRDP connection failed (exit status …). It now reports that the server only speaks the embedded client's protocol and tells the user to set the connection's Client Mode to Embedded, which negotiates only the EGFX caps and connects to the same server. (rustconn/src/embedded_rdp/connection.rs,po/)
Changed
- Importing connections with passwords no longer freezes the window — storing the imported credentials in the chosen secret backend now runs on a background task with a toast when it starts and another reporting how many were stored, instead of blocking the UI for the whole batch. The connections and groups still appear at once; only the credential storage, which is several seconds per credential for a CLI-backed backend such as Bitwarden, moves off the main thread. (An earlier fix had already stopped these passwords going to the system keyring regardless of backend; this removes the remaining freeze, W4/FC §6a.) (
rustconn/src/state/sync.rs,rustconn/src/window/connection_dialogs.rs,po/) - Opening the Passbolt vault and the export output folder now goes through the desktop portal — both used to spawn
xdg-open(oropenon macOS); they now usegtk4::UriLauncher/gtk4::FileLauncher, so they let the desktop choose the handler and work inside the Flatpak sandbox. The external file manager for ansftp://browse is deliberately left spawning directly, because it must inherit RustConn's ssh-agent socket, which a portal launch would not pass on. The now-unusedopencrate dependency is dropped. (rustconn/src/dialogs/settings/secrets_tab/mod.rs,rustconn/src/dialogs/export.rs,rustconn/Cargo.toml)
Dependencies
- Updated (semver-compatible): zip 9.3.0→9.4.0. Dropped with the
opencrate: open 5.4.5, is-docker 0.2.0, is-wsl 0.4.0.cargo deny check advisoriesis clean;cargo-sources.jsonregenerated for the Flatpak/Flathub manifests. Bundled Flatpak FreeRDP (3.33.0) and cJSON (1.7.19) are at their latest releases, and TigerVNC, the only pinned CLI download, is current at 1.16.2.
Known Issues
- Embedded RDP shared folders show only the first letter of their name, and a folder with a non-ASCII name (e.g. Cyrillic) is refused — since 0.24.3 the embedded client uses
ironrdp-rdpdr0.9, which announces the share name as UTF-16 as MS-RDPEFS asks, but Windows reads it as 8-bit characters. A share namedDownloadstherefore appears as\\tsclient\D(reported upstream for Windows 11 and Server 2022/2025), and one namedЗагрузкиis refused by Server 2019 and 2025 withSTATUS_UNSUCCESSFUL(the session continues and a toast names the folder, issue #407). The external FreeRDP client is not affected and shows both names correctly, so set the connection's Client Mode to External if you need the share name. The ASCII case is fixed upstream in IronRDP#2342 (not yet released), and a fix for non-ASCII names is proposed in IronRDP#2383 (IronRDP#2382); RustConn picks them up with the nextironrdp-rdpdrrelease that carries them.
Installation
Flatpak (Recommended)
flatpak install flathub io.github.totoshko88.RustConnSnap
sudo snap install rustconnDebian/Ubuntu (.deb from this release)
sudo dpkg -i rustconn_0.24.7_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.24.7-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.24.7-x86_64.AppImage
./RustConn-0.24.7-x86_64.AppImagemacOS (Homebrew)
brew tap totoshko88/rustconn
brew install rustconn
open $(brew --prefix)/opt/rustconn/RustConn.appAll dependencies (GTK4, libadwaita, VTE, Adwaita icons) are installed automatically.
Requires macOS 13 (Ventura) or later.
OBS Repositories
Packages available at: https://build.opensuse.org/package/show/home:totoshko88:rustconn/rustconn
# Debian 13 (Trixie)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Ubuntu 24.04 LTS (Noble)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Ubuntu 26.04 LTS (Resolute)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Fedora 44
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_44/home:totoshko88:rustconn.repo
sudo dnf install rustconn
# Fedora 43
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_43/home:totoshko88:rustconn.repo
sudo dnf install rustconn
# openSUSE Tumbleweed
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Tumbleweed/ rustconn
sudo zypper ref && sudo zypper in rustconn
# openSUSE Leap 16.0
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Leap_16.0/ rustconn
sudo zypper ref && sudo zypper in rustconnArch Linux (AUR)
yay -S rustconnFreeBSD (Ports)
pkg install rustconnFull installation guide: https://github.com/totoshko88/RustConn/blob/main/docs/INSTALL.md
Verifying your download
Every binary on this release (deb, rpm, AppImage, Flatpak) is covered two ways.
Plain checksums — download SHA256SUMS alongside the asset, then:
sha256sum -c SHA256SUMSSigned build provenance (SLSA, via Sigstore) — proves the file was built by this
workflow from this commit:
gh attestation verify RustConn-0.24.7-x86_64.AppImage --repo totoshko88/RustConn(The snap is signed by the Snap Store; the macOS build is delivered via the Homebrew tap.)