Skip to content

tuxctl v0.2.7

Choose a tag to compare

@Seqat Seqat released this 23 Sep 00:52
· 74 commits to main since this release
cee16da

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 with q: it restores the terminal and stops journalctl, 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 journalctl starts 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.md has 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 --check PASS
  • cargo check PASS
  • cargo clippy --all-targets --all-features -- -D warnings PASS
  • cargo test PASS
  • cargo build --release PASS
  • scripts/smoke.py 32/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/tuxctl

From source:

cargo install --git https://github.com/Seqat/tuxctl --tag v0.2.7 --locked

Then run:

tuxctl
tuxctl --interval 2s

Full Changelog: v0.2.5...v0.2.7