Skip to content

v0.23.3

Choose a tag to compare

@github-actions github-actions released this 06 Oct 21:55
· 50 commits to main since this release

What's Changed

Fixed

  • Compact mode now actually shrinks the header bar on Linux — the icon-only header buttons (content header: sidebar-toggle, menu, settings, split-H, split-V; sidebar header: search, menu) carried a hard Rust set_size_request(44, 44) as their GNOME-HIG tap-target floor. A GTK size request is a floor CSS cannot cross, and AdwHeaderBar takes its height from its tallest child, so on Linux the window.compact headerbar rules were dead — the header stayed ~44 px tall in compact (macOS was unaffected, its floor is 28 px). The 44 px floor moved to a .header-icon-button CSS class, so it still holds by default but can now be overridden. A new window.compact-manual class (added only when the user deliberately turns compact on via the toggle/menu/shortcut, not when auto-compact engages on a small window) lowers the floor to 28 px, so a deliberate compact finally shrinks the header. Auto-compact — which may be a tablet or touch convertible — keeps the full 44 px tap target. The now-unused HEADER_BUTTON_SIZE constant is removed.

  • Compact mode: welcome rows, bulk-actions bar and the banner note made consistent — a compact-mode UI audit found three density inconsistencies on top of the sidebar bottom-strip already fixed. (1) The Welcome-tab rows (list.boxed-list row) had a window.macos slim rule but no window.compact counterpart, so the one surface that most needs vertical savings on a small screen stayed at the full ~56 px height while the header, tabs and sidebar shrank — a mirrored window.compact list.boxed-list row rule now slims them. (2) The sidebar bulk-actions bar (shown in group-ops mode) kept its full margins and its .bulk-action pill metrics in compact; window.compact .bulk-actions-bar / .bulk-action rules now match compact density (no reserved-height trap — the revealer collapses cleanly when hidden). (3) The CSS note warning against a min-height on banner referred to "two banners"; there are actually five (config, sync, secret, touch, group-broadcast), so the note is corrected to prevent a future five-fold phantom-band regression. CSS-only; check-css.sh green.

  • External FreeRDP no longer exits 255 after an embedded-client hand-off because of a starved version probe — when the embedded IronRDP client cannot complete a session (RDS licensing on Windows Server 2019, or a TLS-only server such as KDE's KRdp) it hands off to the external FreeRDP client. Since the #351 FreeRDP-3 gate, that launch is only allowed for a client proven to be FreeRDP 3, decided by a --version probe — and the probe was fragile: its 2 s timeout was too short for a slow --version (notably when relayed out of a Flatpak sandbox via flatpak-spawn --host), and a timed-out/unparseable probe was cached as "unknown" for the whole process. A client whose version stayed unknown was then trusted purely by its 3-suffixed name, so a FreeRDP 2 behind a Debian/Ubuntu xfreerdp3 alternative was launched with a /args-from: command line it rejects → exit 255. The probe timeout is raised to 5 s and a failed probe is no longer cached (the next attempt re-probes instead of being poisoned), so a healthy FreeRDP 3 is now reliably identified; a launch that still falls back to trusting the name alone logs a warning naming the exit-255 risk. Name-suffix trust is intentionally kept (refusing it would turn a slow-but-healthy FreeRDP 3 into a spurious "install FreeRDP 3" error).

  • Compact mode: the empty strip below the sidebar's bottom toolbar is gone — in compact interface mode an empty horizontal band sat under the sidebar's bottom icon row (clock / sort / key / file). AdwToolbarView wraps its bottom bar in a GtkRevealer and libadwaita puts the .bottom-bar style class on the inner GtkWindowHandle, so the existing toolbarview > .bottom-bar compact rules collapsed the handle but never the enclosing revealer — whose own themed min-height stayed reserved as the empty strip. A new window.compact .sidebar toolbarview > revealer { min-height: 0 } rule collapses that revealer so it sizes to the already-shrunk bar inside it. The icons (inside the handle) and window-dragging (the GtkWindowHandle is untouched) are unaffected, and the rule is gated on compact only, so normal density is unchanged. Not platform-specific — fixes every package and the Flatpak alike.

  • Snap build reverted from core26 back to core24 — the 0.23.2 snap migration to base: core26 (for libadwaita 1.8 parity) never built: the snapcraft gnome extension, which provides the whole GTK4 platform, still rejects base: core26 even on current stable Snapcraft 9.1.3 (Extension 'gnome' does not support base: 'core26'). Snapcraft 9.0 added the core26 base, but not core26 support in the gnome extension, so the published 0.23.2 release notes' "Snap migrated to the core26 base" claim could not hold. The snap returns to base: core24 + the gnome-46-2404 platform and drops --features adw-1-8 (back to the libadwaita 1.5 cfg-gated fallbacks), the last known-good configuration. The Flatpak keeps its GNOME 51 / libadwaita 1.8 build; only the Snap is affected. Revisit once a snapcraft release lists core26 among the gnome extension's supported bases (snapcraft#6185, issue #174).

Changed

  • CI: informational macOS Homebrew build fixed, and false-positive CI annotations silenced — the advisory Build from source step now installs the formula through a real local tap with the published tarball's real SHA-256 (a bare-path install is rejected by modern Homebrew, and a placeholder hash fails the download check); the advisory semver job clears its stale baseline-checkout cache to stop ~20 spurious ENOENT annotations; and taiki-e/install-action is bumped to v2.87.25 so cargo-semver-checks installs from a prebuilt instead of a slow binstall fallback. All three jobs are non-gating; this only removes red annotations that masked real ones.

Dependencies

  • Updated: either 1.18.0 → 1.19.0, h2 0.4.19 → 0.4.20, hyper 1.11.1 → 1.12.0, zeroize 1.9.0 → 1.9.1. Flatpak/Flathub cargo-sources.json regenerated to match. No security advisories affected (cargo deny check advisories clean). picky-krb 0.12.5 remains held back for the same reason as 0.23.1/0.23.2: its GssApiMessageError variant breaks the pinned sspi 0.21.3, which does not match it exhaustively.

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

Fedora (.rpm from this release)

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

AppImage

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

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