Skip to content

v0.23.13

Choose a tag to compare

@github-actions github-actions released this 14 Oct 16:46
· 13 commits to main since this release

What's Changed

Added

  • Expand and collapse sidebar groups with the arrow keys (issue #380) — the connection tree is a GTK4 ListView + TreeListModel + TreeExpander, and that modern list stack (unlike the deprecated GtkTreeView) binds no bare Left/Right to the expander — only Ctrl+Space — so a keyboard user could not open or close a group without Enter or the mouse. Right now expands the focused collapsed group; Left collapses an expanded group, and on a leaf or an already-collapsed group moves the selection up to its parent group (the behaviour users notice missing most). In right-to-left layouts the two keys swap, so the arrow that points into the tree expands and the opposite one collapses. The handling lives in the sidebar's existing key controller, acts on the single focused row in multi-selection mode, and leaves Enter untouched (it still toggles a group or connects a leaf via activate). Both shortcuts are listed in the Ctrl+? shortcuts dialog — which also feeds the keybinding-conflict checker — and in the user guide. (rustconn/src/sidebar/mod.rs, rustconn/src/dialogs/shortcuts.rs, docs/USER_GUIDE.md)
  • Optional drag-to-resize for the sidebar (issue #3) — by default the sidebar keeps the fixed width of libadwaita's adaptive sidebar pattern: one Sidebar width value in Settings ▸ Interface (180–500, default 320), exactly as in 0.23.12. A new Resize sidebar by dragging toggle (off by default) lets you drag the sidebar's inner edge instead. The drag rewrites that same Sidebar width within the same 180–500 range, narrowed to what the sidebar can actually show — no narrower than its own buttons allow and no wider than the window leaves room for — so the edge stays under the pointer, the saved width is the width on screen, the spin row and the drag never disagree, and a dragged width survives a restart; it is saved when the drag ends. The edge follows the pointer under text scaling (Large Text) and in right-to-left layouts. The handle is hidden entirely — no separator, no resize cursor, no extra width — while the option is off and on narrow windows where the sidebar is a swipe-driven overlay, and toggling the option applies as soon as Settings closes. Screen readers announce the handle as a separator labelled "Resize sidebar"; the keyboard way to change the width remains the Sidebar width spin row. The option is opt-in because a draggable edge is not part of that pattern: GNOME Files lost its draggable sidebar in GNOME 43 when it moved to libadwaita's adaptive sidebar. The sidebar stays an AdwOverlaySplitView (not a GtkPaned), so adaptive collapse, overlay and swipe behaviour are untouched. (rustconn-core/src/config/settings.rs, rustconn/src/window/sidebar_resize.rs, rustconn/src/window/mod.rs, rustconn/src/dialogs/settings/ui_tab.rs, rustconn/src/state/mod.rs, rustconn/assets/style.css)

Fixed

  • Bitwarden root-search now finds an entry titled by the leaf of a slash-separated connection name (issue #353) — with "search entire vault" enabled, a connection named by a path such as AME/DE/11/hanfile03 still failed to resolve against a Bitwarden vault entry simply titled hanfile03, while the same vault resolved correctly under KeePass. The two backends had diverged: KeePass's root matcher already extracts the basename of each candidate (candidate.rsplit('/')), but the Bitwarden path only ever offered the full name/host as candidates and matched entry titles exactly, so the bare leaf was never searched for. The fix moves the leaf extraction into the shared LookupIdentity::aliases (rustconn-core/src/secret/backend.rs), so every root-search backend — Bitwarden, 1Password, pass, and the KDBX wrapper — now offers the slash-leaf as an additional candidate, placed right after the full alias so an exact full-title match still wins first. Matching stays exact (not substring), so a bare db can never steal a database-prod entry. Verified: the settings toggle already reaches the live backend correctly (SecretManager::rebuild_from_settings runs on every Secrets-tab save), so this was purely the missing leaf candidate, not a stale-settings bug. New unit tests cover the slash-leaf alias extraction and its edges (plain name, trailing slash, absent fields) and a Bitwarden lookup resolving a slash-named connection to a leaf-titled entry. (rustconn-core/src/secret/backend.rs, rustconn-core/src/secret/bitwarden.rs)

Dependencies

  • Updated: rustls 0.23.45 → 0.23.46, sha2 0.11.0 → 0.11.1, tokio 1.53.2 → 1.53.3, zip 9.0.2 → 9.0.3, zerocopy 0.8.62 → 0.8.63, zerocopy-derive 0.8.62 → 0.8.63, deranged 0.5.8 → 0.5.9, equivalent 1.0.2 → 1.0.3. All semver-compatible patch bumps; no security advisories affected (cargo deny check advisories clean). CLI download versions all current (TigerVNC pinned at 1.16.2, confirmed latest upstream); the RustCrypto release-candidate family and the out-of-range majors remain held back, pinned transitively by the sspi/picky-krb stack exactly as in 0.23.1–0.23.12. The Flatpak/Flathub manifests are in sync (GNOME runtime 51, FreeRDP 3.32.1, cJSON 1.7.19, OpenH264 2.6.0).

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.23.13_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (.rpm from this release)

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

AppImage

chmod +x RustConn-0.23.13-x86_64.AppImage
./RustConn-0.23.13-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

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 SHA256SUMS

Signed build provenance (SLSA, via Sigstore) — proves the file was built by this
workflow from this commit:

gh attestation verify RustConn-0.23.13-x86_64.AppImage --repo totoshko88/RustConn

(The snap is signed by the Snap Store; the macOS build is delivered via the Homebrew tap.)