Skip to content

v0.22.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 22:06
· 338 commits to main since this release

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 own XmlConnectionNodeSerializer/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 encrypted Password attribute 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 by reg 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 .reg file — 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 prepends RustConn/ itself, so it looked up RustConn/RustConn/Groups/… and never matched what the save path had written at RustConn/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 shared KeePassHierarchy::build_group_entry_name that 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_layout only replayed the split actions and a freshly created split defaults to 0.5. It now writes the saved root split_ratio back into the layout model after the splits are created (new SplitViewBridge::set_root_split_position / SplitViewAdapter::set_root_split_position, reusing the existing update_split_position and 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 Snippet from one grouped context instead of ten loose arguments — SnippetDialog::build_snippet_from_fields took the ten form widgets and state cells one by one, which required a #[expect(clippy::too_many_arguments)] and forced the save-button closure in run() to clone all ten fields separately. They are now grouped into a private SnippetFormWidgets struct that owns the build logic (SnippetFormWidgets::build), so the closure captures a single clone and the lint suppression is gone. No behaviour change — the same Snippet is produced from the same fields.

Documentation

  • Documented why the GUI binary's argument parser prints to the terminal — parse_cli_args/print_usage in rustconn/src/main.rs use println!/eprintln! for --version, --help and 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 omits print_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.sh is 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 on core24 with the gnome-46-2404 extension because no core26 GNOME extension exists yet (issue #174).

Installation

Flatpak (Recommended)

flatpak install flathub io.github.totoshko88.RustConn

Snap

sudo snap install rustconn

Debian/Ubuntu (.deb from this release)

sudo dpkg -i rustconn_0.22.0_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (.rpm from this release)

sudo dnf install rustconn-0.22.0-1.fc44.x86_64.rpm

AppImage

chmod +x RustConn-0.22.0-x86_64.AppImage
./RustConn-0.22.0-x86_64.AppImage

macOS (Homebrew)

brew tap totoshko88/rustconn
brew install rustconn
open $(brew --prefix)/opt/rustconn/RustConn.app

All 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 rustconn

Arch Linux (AUR)

yay -S rustconn

FreeBSD (Ports)

pkg install rustconn

Full installation guide: https://github.com/totoshko88/RustConn/blob/main/docs/INSTALL.md