Skip to content

v0.23.19

Choose a tag to compare

@github-actions github-actions released this 21 Oct 17:48
· 32 commits to main since this release

What's Changed

Added

  • About → Credits now names the people who contributed — the About dialog lists code contributors alongside the maintainer (Felipe Schneider, Naim Shafiev, dwetscher, Henrik, cocide, Austin Eschweiler) in Developers, and names every translator (Albano Battistella — Italian, Ekaterine Papava — Georgian, GaaChun — Simplified Chinese, Jürgen Hörmann — German, Mykola Zubkov — Ukrainian, p-bo — Czech) in the Translated-by section. The translator list is a fixed, language-independent set rather than the per-locale translator-credits string, so every translator is shown at once and the running language's translator is no longer both listed twice and the only one visible; its heading is one of GTK's own strings and stays localised in every language with nothing added to our catalogues. Every name is drawn from the git history, a merged or adopted pull request, or a translation catalogue's Last-Translator header — no name is invented, and catalogues credited only to "RustConn Team" name no individual. Where a public profile or e-mail exists the entry links to it. (rustconn/src/app.rs)

Fixed

  • Sidebar sort modes now re-apply when switched — "Sort alphabetically" after "Sort by recent" no longer did nothing — ConnectionManager::sort_all short-circuits on an is_sorted optimisation flag, but sort_by_recent and sort_group reordered connections without clearing that flag. After sorting by recency (or a group), the flag stayed true, so the next sort_all returned early and the sidebar kept its previous order; alternating A–Z and by-recent appeared to do nothing. Both sort_by_recent and sort_group now reset is_sorted = false after reordering, so every mode switch re-sorts while a repeated same-mode click stays a cheap no-op. A regression test (alternating_sort_modes_each_reapply_their_order) drives A–Z → recent → A–Z and fails against the old code. (rustconn-core/src/connection/manager.rs)
  • The same is_sorted invalidation gap was closed in every other reorder/reparent path — an audit of the sidebar and main menus found four more mutation paths that rewrote sort_order/parent_id/group_id but left the is_sorted guard set, so "Sort alphabetically" after a drag-drop reorder or a move-to-folder also silently did nothing: reorder_connection, reorder_group, move_connection_to_group and move_group. All four now clear the flag through a shared private mark_unsorted() helper, placed next to sort_all, so the "mutate ⇒ invalidate" convention has one named home instead of a scattered inline assignment. Three deterministic regression tests (reorder_then_sort_all_reapplies_alphabetical, reorder_group_then_sort_all_reapplies, move_to_group_then_sort_all_reapplies) reorder/reparent into a non-alphabetical order and assert the next sort_all re-alphabetises; each fails against the old code. Separately, the search-cache invalidation that only reload_sidebar performed is now centralised at the single rebuild choke point rebuild_sidebar_sorted, so the direct-rebuild paths (sort_connections, sort_recent, handle_drag_drop) no longer leave a stale search filter after a re-sort. (rustconn-core/src/connection/manager.rs, rustconn/src/window/sorting.rs)
  • Homebrew: brew info --json=v2 rustconn no longer prints post-install command lines before the JSON, which broke JSON consumers (issue #386) — v0.23.16 renamed the formula's def post_install to def post_install_steps to silence Homebrew's new FormulaAudit/InstallSteps cop, but post_install_steps is a declarative DSL registrar, not a hook for arbitrary Ruby. Defining a method of that name shadowed the registrar, and Homebrew invokes it while serialising the formula to a hash (Formula#to_hash) — exactly what brew info --json=v2 does. The three system calls (LaunchServices lsregister, glib-compile-schemas, gtk4-update-icon-cache) then ran during a read-only metadata query and wrote their ==> command lines to stdout before the JSON document, so brew info … --json=v2 for the formula and for --installed enumeration produced invalid JSON and tools like Brew Browser failed with json_parse. The declarative form cannot express an arbitrary command like lsregister (its runner only knows a fixed set of named actions), so the formula reverts to the post_install hook, which Homebrew runs only in the real install phase inside a sandboxed, logged child process and never during brew info. Registration at brew install is therefore unchanged. post_install is odeprecated in favour of the declarative form it cannot use, so FormulaAudit/InstallSteps is waived in the CI brew style step alongside the existing FormulaAudit/Text waiver; the deprecation only becomes a hard error under HOMEBREW_DEVELOPER=1, which neither a normal brew install nor the informational build step sets. (packaging/macos/rustconn.rb, .github/workflows/ci.yml)

Dependencies

  • Updated: ppmd-rust 1.5.1 → 1.5.2 (transitive, under the archive import/export path). Semver-compatible patch bump; cargo-sources.json regenerated for the Flatpak/Flathub manifests. No security advisories affected. Every direct dependency and the bundled Flatpak stack were already current: GNOME runtime 51, FreeRDP 3.32.2, cJSON 1.7.19, OpenH264 2.6.0 (each confirmed latest upstream), and all downloadable CLI tools resolve current (TigerVNC pinned 1.16.2, the rest auto-latest). The Snap stays on core24 + gnome-46-2404 (no core26 GNOME extension 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.23.19_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (.rpm from this release)

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

AppImage

chmod +x RustConn-0.23.19-x86_64.AppImage
./RustConn-0.23.19-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.19-x86_64.AppImage --repo totoshko88/RustConn

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