tuxctl v0.2.7
v0.2.7 hardens tuxctl before v0.3.0. It ships the first prebuilt binaries, fixes terminal restoration when tuxctl is killed by a signal, and sets up a measured performance baseline that CI now checks on every push. No key bindings or screens changed.
New
- Prebuilt binaries. Statically linked binaries for x86_64 and aarch64 Linux are attached below, with
SHA256SUMS. They do not depend on the system C library, so they run on any distribution. - Release builds are about 35% smaller and use about 200 KiB less memory, with the same CPU usage.
Fixes
kill <pid>, closing the terminal window (SIGHUP), or SIGINT no longer leave your shell in raw mode on the alternate screen with the mouse captured. tuxctl now quits as it does withq: it restores the terminal and stopsjournalctl, then exits. A second signal ends it immediately.
Under the hood
- CI now runs a pseudo-terminal smoke test of the release binary on every push. It also fails the build if redraw rates exceed fixed limits: 31/s for mouse hover, 21/s for background updates, 3.5/s when idle.
- The smoke test now also checks that
journalctlstarts only when the Logs tab is opened, that nothing is left running after exit, and that SIGTERM/SIGHUP restore the terminal. - New command-line integration tests, and machine-readable CPU, memory and redraw measurements (
scripts/). - The README has a quick start, binary installation instructions and a performance section;
docs/performance.mdhas the method and history.
Measured with the release binary on an AMD Ryzen 5 7500F at the default interval: 0.6% CPU when idle on Overview, 13 redraws per second under 240 Hz mouse hover, and about 2.3 MiB of RSS after 15 minutes, with no growth after warm-up. Compared with v0.2.5 (same machine, 3 runs each), CPU and redraw rates are unchanged.
Verification
- 315 unit tests and 4 command-line integration tests passing (glibc and musl)
cargo fmt --checkPASScargo checkPASScargo clippy --all-targets --all-features -- -D warningsPASScargo testPASScargo build --releasePASSscripts/smoke.py32/32 on the glibc and musl release builds- CI green, including MSRV 1.88; release dry run green on x86_64 and aarch64
Minimum supported terminal size: 40×15. Minimum supported Rust version: 1.88.
Installation
Linux only
Prebuilt binary (x86_64 or aarch64):
arch=$(uname -m)
base=https://github.com/Seqat/tuxctl/releases/download/v0.2.7
curl -LO "$base/tuxctl-$arch-unknown-linux-musl.tar.gz" -LO "$base/SHA256SUMS"
sha256sum -c --ignore-missing SHA256SUMS
tar xzf "tuxctl-$arch-unknown-linux-musl.tar.gz"
install -Dm755 "tuxctl-$arch-unknown-linux-musl/tuxctl" ~/.local/bin/tuxctlFrom source:
cargo install --git https://github.com/Seqat/tuxctl --tag v0.2.7 --lockedThen run:
tuxctl
tuxctl --interval 2sFull Changelog: v0.2.5...v0.2.7