tui-tools

tui-update

Pending package updates, what they restart, and a snapshot first

v0.1.1packagesMIT
The pending list: current to new, repository, size and the security flag, kernel and firmware first
The pending list: current to new, repository, size and the security flag, kernel and firmware first

A terminal UI for the updates waiting on your machine. It reads them from whichever package manager the machine actually runs — pacman, apt or dnf — and shows what a list of versions never tells you: what applying them will cost.

Every pending update is on one screen, with its current and new version, its repository, its size and its security flag where the manager publishes one, and the kernel and firmware sorted to the top because they are what turns an upgrade into a reboot.

enter gives you the plan: the manager's own dry run, the restart classification — nothing, the services still holding replaced code open, or a reboot with the reason — whether a snapper snapshot can be taken first and the exact command that would take it, and the whole sequence, in order, before anything runs.

U applies it behind a confirm dialog carrying that sequence, streaming the output as it goes. It never reboots by itself: when the upgrade needs one it offers R, with its own confirmation.

Run tui-update --demo to drive a sample machine: every key works, every command is built and previewed for real, and nothing touches your system.

Keys

KeyAction
enter / pPlan: what applying the updates would do
UApply the plan, after confirming the whole sequence
mOn apt, switch between upgrade and dist-upgrade
hThe package manager's own transaction history
tThe unattended-update timers, with enable and disable
e / dOn the timers screen: enable or disable the unit
RRe-read; on a finished upgrade, offer the reboot
/Filter the packages across every column
?Help
qQuit

Press ? inside the tool for the full help screen, which is generated from the same action table as the key map.

Compatibility

This tool is a face on the program below, so its version matters.Tested is not a claim: a version lands there only after the tool's own suite passed against it on a real machine in the lab, and the run is kept as evidence in the repository. At startup the tool probes the backend once and says what it found in its header — a version nobody has run against is shown as(untested) in the warning colour, one older than the minimum as (below minimum) in the error colour. Neither stops it: the backend still refuses what it cannot do, in its own words.

pacman

pacman ≥ 6.0
Binary
pacman
Minimum
6.0
Probed with
pacman --version
Tested
7.1.0

What changes on older versions

  • pacman >=6.0

    pacman publishes no security metadata, so no update is ever marked as a security fix here; the column reads n/a rather than no

  • pacman >=6.0

    there is no dry run that does not first synchronise the databases, which needs root, so the plan quotes the pending list instead of a simulated transaction

  • pacman >=6.0

    checkupdates needs pacman-contrib *and* fakeroot, since it builds its private copy of the sync database under it; without either the pending list falls back to pacman -Qu, which is whatever the last pacman -Sy left on disk, and the screen says so

  • pacman >=6.0

    on Omarchy Server the upgrade runs through omarchy-server-update run --no-reboot, and omarchy-server-update-restart --dry-run is what classifies the restarts; on plain Arch there is no classifier and the package names decide

apt

apt ≥ 2.0
Binary
apt
Minimum
2.0
Probed with
apt --version
Tested
2.8.3

Needs a version this new

  • solver3since 2.9.3

What changes on older versions

  • apt >=2.0

    a security update is one whose pocket ends in -security; apt publishes no advisory id, so that pocket name is the whole reference

  • apt >=2.0

    neither apt list --upgradable nor apt-get -s upgrade reports a per-package size, so the size column is not shown; the plan carries apt's own download and disk totals instead

  • apt >=2.0

    the services to restart come from needrestart -b, which reads other processes' memory maps and therefore needs root; without it the package names decide

dnf

dnf ≥ 4.0
Binary
dnf
Minimum
4.0
Probed with
dnf --version
Tested
5.2.185.4.1

Needs a version this new

  • dnf5since 5.0

What changes on older versions

  • dnf >=5.0

    dnf --version prints dnf5 version 5.2.18.0, where dnf4 prints a bare 4.24.0 on its first line; both are read by the same pattern, which keeps three components because a four-part version is not one the family schema records

  • dnf >=5.0

    dnf needs-restarting refreshes the repository metadata before answering, which a read path must not do, so the standalone needs-restarting binary from dnf-plugins-core is used instead and its absence falls back to the package names

  • dnf >=4.0

    dnf check-update exits 100 when there are updates, so its exit code is interpreted rather than treated as a failure; it also prints only the new version, and the installed one is read from rpm

Install

Once per machine, then every tool in the family is one pacman away.

Add the repository
$ curl -fsSL https://pkgs.tui.tools/install.sh | sh
Or run the same thing yourself, one command at a time

A family whose whole promise is preview before you run is not going to insist you pipe a script into a shell. These are the commands that script runs.

The one-time setup, by hand
$ curl -fsSL -o /tmp/tui-tools.asc https://pkgs.tui.tools/pubkey.asc
  sudo pacman-key --add /tmp/tui-tools.asc
  sudo pacman-key --lsign-key \
    "$(gpg --show-keys --with-colons /tmp/tui-tools.asc | awk -F: '/^fpr:/{print $10; exit}')"
  printf '[tui-tools]\nServer = https://pkgs.tui.tools/arch/$arch\n' \
    | sudo tee -a /etc/pacman.conf
  sudo pacman -Sy
Arch Linux · tui-update
$ sudo pacman -S tui-update

Upgrades then arrive with the rest of your system updates.

What it can do to your machine

  • Preview, then confirm

    Every change is shown as an exact command line and confirmed before it runs. The dialog and the runner receive the same value, so the preview cannot drift from what executes.

  • Escalates for actions

    Reads are unprivileged and never refresh the manager's metadata: checkupdates, apt list --upgradable, dnf check-update and rpm -q all answer to any user from what is on disk. Escalation is sudo -n, which never prompts, and covers the restart classifiers plus every change.

  • No daemon, no state of its own

    Nothing keeps running after you quit, and nothing is installed to run later. The system is the source of truth; the tool re-reads it after every change.

  • No network access

    The tool opens no network connection of its own. No telemetry, no update check, no phone home.

  • Static binary

    Released statically linked, with no runtime dependencies to install.

  • Releases are not signed yet

    Releases carry SHA-256 checksums but no signature. Verify the checksum, and read this as the open item it is.

Reporting

Report a security issue privately, through GitHub's private vulnerability reporting on the repository's Security tab. The family-wide policy, and what counts as in scope, is on the security page.

Downloads

v0.1.1 · 2026-08-30
FileSizeSHA-256
checksums.txt792 B
tui-update-0.1.1-1-aarch64.pkg.tar.zst1.7 MBd252a00a3d710b51680b05ecc5116bbd3f8f2111bb1a1c5f67fe350c429f956c
tui-update-0.1.1-1-x86_64.pkg.tar.zst1.8 MBcf0db068607f2b8ba98a37966f73d5a7455f10c3cfe3666df802a86eec7b7f6f
tui-update-0.1.1-1.aarch64.rpm1.7 MBeee54b10cea38fb646ed5ff74eedbb63633b6484651fd0a6bc7a4324ab985306
tui-update-0.1.1-1.x86_64.rpm1.8 MB36932e1142bdf39d24399b37651b79ad9525189aa6306cbe24d0a57cf367c1bb
tui-update_0.1.1_amd64.deb1.8 MBb8bd825d10e89daff6165a3abcc8b8917f19deda9016e5be2d09054125f71540
tui-update_0.1.1_arm64.deb1.7 MBeec0a6f1f42b6fd995ed7c1c48dbf8225963d910605534f4cd998667c2fe8c56
tui-update_0.1.1_linux_amd64.tar.gz1.8 MB130a6c1515432708c5441dc639c6a18f46f1ebe41dfef6b3f39c47babde320fc
tui-update_0.1.1_linux_arm64.tar.gz1.7 MBa4ae6c9c157fe327c941909960326a2ad7e0fe8db884c09175abe5c3aa5ffb33

Every release ships a checksums.txt. Download it next to the archive and run sha256sum -c checksums.txt --ignore-missing. See verifying a download.

Releases

v0.1.1

2026-08-30
## Changelog
* 6e872cc9b7abad19ddb1c868899e70d58f3b81df Packages are available from pkgs.tui.tools
* 250cde4e769a6120d4907b5aa6ef944267140bf5 Re-pin the kit at v0.2.3
* d9c3ed1e2a9654203aa7fe29a022bf9f4782066d Read the pending list on a machine checkupdates cannot run on
* 043fce7b7933b4c59931515c9c0fc8becc780d07 Read the version banners from the captured fixtures
* 43d2b76c3bc5d3e0d8a1fe004e9763af1eeebee4 Ship the tool as a .deb, an .rpm and a pacman package
* 4f49f0f222f37e2be5cd8f81e29e35f60449ea96 Show the apply screen the README was missing

v0.1.0

2026-08-30
## Changelog
* 7429a1b25376a82aae1d0d75ffa9410d7c0e3682 Initial commit
* 30753be833bd60f2b7d1085c988d38d5c089b865 Make tui-update the machine's update screen