Repository navigation
v0.23.19
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-creditsstring, 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'sLast-Translatorheader — 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_allshort-circuits on anis_sortedoptimisation flag, butsort_by_recentandsort_groupreordered connections without clearing that flag. After sorting by recency (or a group), the flag stayedtrue, so the nextsort_allreturned early and the sidebar kept its previous order; alternating A–Z and by-recent appeared to do nothing. Bothsort_by_recentandsort_groupnow resetis_sorted = falseafter 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_sortedinvalidation gap was closed in every other reorder/reparent path — an audit of the sidebar and main menus found four more mutation paths that rewrotesort_order/parent_id/group_idbut left theis_sortedguard 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_groupandmove_group. All four now clear the flag through a shared privatemark_unsorted()helper, placed next tosort_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 nextsort_allre-alphabetises; each fails against the old code. Separately, the search-cache invalidation that onlyreload_sidebarperformed is now centralised at the single rebuild choke pointrebuild_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 rustconnno longer prints post-install command lines before the JSON, which broke JSON consumers (issue #386) — v0.23.16 renamed the formula'sdef post_installtodef post_install_stepsto silence Homebrew's newFormulaAudit/InstallStepscop, butpost_install_stepsis 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 whatbrew info --json=v2does. The threesystemcalls (LaunchServiceslsregister,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, sobrew info … --json=v2for the formula and for--installedenumeration produced invalid JSON and tools like Brew Browser failed withjson_parse. The declarative form cannot express an arbitrary command likelsregister(its runner only knows a fixed set of named actions), so the formula reverts to thepost_installhook, which Homebrew runs only in the real install phase inside a sandboxed, logged child process and never duringbrew info. Registration atbrew installis therefore unchanged.post_installisodeprecatedin favour of the declarative form it cannot use, soFormulaAudit/InstallStepsis waived in the CIbrew stylestep alongside the existingFormulaAudit/Textwaiver; the deprecation only becomes a hard error underHOMEBREW_DEVELOPER=1, which neither a normalbrew installnor 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.jsonregenerated 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 oncore24+gnome-46-2404(nocore26GNOME extension 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.23.19_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.23.19-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.23.19-x86_64.AppImage
./RustConn-0.23.19-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
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 SHA256SUMSSigned 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.)