Repository navigation
v0.22.0
What's Changed
Added
- Import mRemoteNG connections from
confCons.xml— a new "mRemoteNG (confCons.xml)" import source reads the mRemoteNG connection tree: container nodes become nested connection groups and each connection node becomes a connection built from its XML attributes (host, port, username, and RDP domain). The attribute names and protocol values were verified against mRemoteNG's ownXmlConnectionNodeSerializer/XmlConnectionsDeserializer. SSH1/SSH2 import as SSH; RDP, VNC and Telnet keep their protocol; Raw and Rlogin become Telnet connections (Rlogin on port 513); HTTP and HTTPS become Web bookmarks, with the host rebuilt into a URL that keeps an explicit scheme or a non-default port. Protocols with no RustConn equivalent (Citrix ICA, PowerShell, Winbox, external apps) and host-less nodes are reported as skipped rather than imported wrong. Only unencrypted documents are read — a file saved with full-file encryption is reported with guidance to export it unencrypted first, and the per-connection encryptedPasswordattribute is never decoded, so no password is imported. - Import PuTTY and KiTTY sessions from a registry export — a new "PuTTY (.reg)" import source reads saved sessions from a Windows Registry export of
HKCU\Software\SimonTatham\PuTTY\Sessions(produced byreg export), so a PuTTY or KiTTY setup can be carried to RustConn without retyping every host. Each session becomes a connection: SSH sessions bring across their private key file, agent forwarding, X11 forwarding and compression; Telnet, Raw and Rlogin sessions are imported as Telnet connections (Rlogin keeps port 513); host, port and username are read for all of them. The "Default Settings" template, host-less sessions, and protocols with no RustConn equivalent (Serial and others) are reported as skipped rather than imported wrong. PuTTY never stores a password in its export, so none are imported. RustConn does not read the live registry — only the exported.regfile — which keeps the importer cross-platform.
Fixed
- KeePass group passwords could be saved but not loaded (issue #327) — a password set on a group was written to the KDBX database correctly, but "Load password from vault" immediately reported "No password found for this group". The load path fed the full
RustConn/Groups/…entry path into a helper that prependsRustConn/itself, so it looked upRustConn/RustConn/Groups/…and never matched what the save path had written atRustConn/Groups/…. Per-connection (entry-level) passwords were unaffected because their load calls already strip the prefix. Both group load sites (the group editor and the new-group dialog) now go through a sharedKeePassHierarchy::build_group_entry_namethat returns the entry name without the root prefix, symmetric with how the password is saved; the credential-transfer key builder was moved onto the same helper so the key is formed in one place.
Improved
- Welcome screen no longer lists Import twice, and its columns are balanced — the Features column had an "Import from PuTTY, mRemoteNG, and more" row that duplicated the dedicated Import Formats panel on the right. That row is removed, and the Import Formats panel now lists every supported source — including the previously missing PuTTY, KiTTY, mRemoteNG, SecureCRT and CSV — grouped onto four lines, so the two-group right column ends up the same height as the nine-row Features and Keyboard Shortcuts columns.
- Split view divider ratio is restored from a workspace profile — a workspace already saved the split layout's ratio (for example 30/70), but restoring it always opened the panels at an even 50/50 because
apply_layoutonly replayed the split actions and a freshly created split defaults to 0.5. It now writes the saved rootsplit_ratioback into the layout model after the splits are created (newSplitViewBridge::set_root_split_position/SplitViewAdapter::set_root_split_position, reusing the existingupdate_split_positionand the divider idle-poll), so the remembered ratio is reapplied. Only the root split's ratio is restored; the balanced sub-panels of a multi-panel grid still open evenly, since a profile records a single fraction. - The snippet dialog builds a
Snippetfrom one grouped context instead of ten loose arguments —SnippetDialog::build_snippet_from_fieldstook the ten form widgets and state cells one by one, which required a#[expect(clippy::too_many_arguments)]and forced the save-button closure inrun()to clone all ten fields separately. They are now grouped into a privateSnippetFormWidgetsstruct that owns the build logic (SnippetFormWidgets::build), so the closure captures a single clone and the lint suppression is gone. No behaviour change — the sameSnippetis produced from the same fields.
Documentation
- Documented why the GUI binary's argument parser prints to the terminal —
parse_cli_args/print_usageinrustconn/src/main.rsuseprintln!/eprintln!for--version,--helpand argument errors. A doc comment now records that this is the intended terminal interface of a CLI invocation (output happens before any window opens) and the one sanctioned exception to the M-LOG-STRUCTURED "use tracing" rule, matching the GUI crate's lint table which omitsprint_stdout/print_stderr.
Dependencies
- Updated: cfg-if 1.0.4→1.0.5, redox_users 0.5.2→0.5.3, rustix 1.1.4→1.1.5, syn 3.0.5→3.0.6, unicode-ident 1.0.24→1.0.26, yuv 0.8.18→0.8.19
- Unchanged, checked:
./scripts/check-cli-versions.shis clean — every CLI download endpoint is current (TigerVNC pinned at 1.16.2; kubectl, Tailscale, Teleport, Boundary, Hoop, Bitwarden, 1Password resolve latest at runtime). The bundled Flatpak sources are unchanged and still current — FreeRDP 3.31.1, cJSON 1.7.19, openh264 2.6.0, VTE 0.80.5, waypipe 0.11.2, mc 4.8.33 — and the local and Flathub manifests stay on GNOME runtime 50 (supported until GNOME 52 in April 2027). GNOME 51 reached Flathub stable but is deferred: it drops libhandy/gcr-3 and the manifest's feature flags are tuned to the libadwaita 1.9.3 / GTK 4.22.4 that runtime 50 provides, so the bump needs its own build-and-test pass. Snap stays oncore24with thegnome-46-2404extension because nocore26GNOME extension exists yet (issue #174).
Installation
Flatpak (Recommended)
flatpak install flathub io.github.totoshko88.RustConnSnap
sudo snap install rustconnDebian/Ubuntu (.deb from this release)
sudo dpkg -i rustconn_0.22.0_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.22.0-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.22.0-x86_64.AppImage
./RustConn-0.22.0-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