v0.19.17
What's Changed
Fixed
-
Opening Settings panel no longer wipes in-memory KeePassXC database password (issue #259) — closing the Settings dialog (even without making any changes) triggered a full settings save cycle. Because the password entry widget is intentionally left blank for security,
collect_secret_settings()returnedkdbx_password: None, andupdate_settings()unconditionally overwrote the in-memory settings struct — losing the runtime-only password that was loaded at startup from the encrypted file or system keyring. Subsequent credential lookups sawhas_password=falseand failed to open the KeePass database until restart. The fix preserves all six runtime-onlySecretStringfields (kdbx_password,bitwarden_password,bitwarden_client_id,bitwarden_client_secret,onepassword_service_account_token,passbolt_passphrase) from the previous settings when the incoming settings don't provide them — protecting all vault backends, not just KeePassXC. -
OCI CLI version detection no longer shows Python tracebacks — when the OCI CLI installation is broken (e.g. missing
oci_cliPython module),oci --versionemits a traceback to stderr. The version parser now detects traceback output and returns no version instead of displaying the raw error text in the Preferences panel. -
Encrypted-file backend no longer fails under parallel test execution — the machine-key derivation (
get_machine_key) now uses a process-wideOnceLockcache. Previously, concurrent first-time callers could each generate a different random key file, with the last writer winning and earlier encryptions becoming undecryptable. This also protects production use when multiple async tasks trigger credential operations simultaneously at first startup.
Improved
-
Settings dialog no longer saves to disk when nothing changed — dirty-tracking compares collected settings against the original snapshot; closing the dialog without modifications skips the save entirely, eliminating unnecessary disk writes and reducing the surface for state-corruption bugs.
-
Bitwarden Unlock and KeePass Check buttons are now asynchronous — previously both ran blocking
std::process::Commandon the GTK main thread, freezing the UI while the CLI responded (potentially seconds for vault unlock or argon2 key derivation). They now run viagio::spawn_blockingwith intermediate status feedback ("Unlocking…", "Checking…"). -
Keyring credential saves moved to background thread — writing passwords to the system keyring (D-Bus round-trip) previously happened synchronously inside the settings collect phase during dialog close. Saves now run asynchronously after
update_settings()succeeds, and failures are reported viatracing::warnwith a return value indicating success/failure. -
SSH Agent add-key failures now show an error toast — previously the error was only logged; now users see a toast with the failure reason when
ssh-addrejects a key (e.g. wrong passphrase, unsupported format). -
Clearer warning when system keyring is unavailable — the status label now reads "System keyring unavailable — install libsecret (secret-tool)" instead of the previous terse message, giving users actionable guidance.
-
Import dialog no longer blocks the UI during file parsing — SSH config, Remmina, Asbru, Ansible, and libvirt imports (including
virshsubprocess calls) now run on a background thread viaspawn_blocking_with_callback. The progress bar pulses while the operation runs, and results appear asynchronously when complete. -
Import dialog clearly reports failure when no connections are imported — previously a successful-looking "Successfully imported 0 connection(s)" appeared even when all entries failed. Now the result page explicitly states "Import failed with N error(s)" when the connections list is empty but errors were encountered.
-
Export "Open location" no longer blocks the main loop —
open::thatwas replaced withopen::that_in_background, preventing UI freezes whenxdg-openis slow to respond.
Installation
Flatpak (Recommended)
flatpak install flathub io.github.totoshko88.RustConnSnap
sudo snap install rustconnDebian/Ubuntu (.deb from this release)
sudo dpkg -i rustconn_0.19.17_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.19.17-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.19.17-x86_64.AppImage
./RustConn-0.19.17-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