Skip to main content

Selective update manager for Linux — update your apps, leave the OS alone

Project description

⚡ ArchBooster

Update your apps, leave the OS alone.

A selective update manager for Linux, built with Python + Textual. ArchBooster gives you one unified, checkbox-driven view across every package source on your machine — official repos, AUR, Flatpak, apt, dnf, Snap, and Homebrew — categorizes updates by risk, and refuses to let a partial system upgrade slip through by accident.

Runs on Arch (+ Arch-based) via pacman/AUR, Debian/Ubuntu via apt, Fedora/RHEL via dnf, and any distro with Flatpak, Snap, or Homebrew.


Why this, when flatpak update and yay -Sua already exist?

Each package manager already has its own "update everything" command. What none of them gives you:

  • One list across all of them. pacman, AUR, and Flatpak updates in a single screen instead of three terminals.
  • A safety guardrail. ArchBooster knows the difference between an app (Firefox, a Flatpak, an AUR -bin package) and the system (kernel, mesa/nvidia drivers, glibc, systemd). Cherry-picking individual packages is safe for apps — but a partial upgrade of the system layer is exactly how a rolling-release install breaks. ArchBooster locks system-layer packages out of selective updates entirely; they can only be bumped together via a full -Syu.
  • Categorization, history, and a background check — updates are sorted 🔴 critical / 🟡 normal / 🟢 optional, every run is logged, and a systemd timer can check on a schedule and notify you without auto-updating anything.

That combination — unification + the app/system guardrail — is the thing no single command does.


Features

  • Unified scan across pacman + AUR (yay/paru), Flatpak, apt, dnf, Snap, and Homebrew, grouped by source
  • 🔴 Critical / 🟡 Normal / 🟢 Optional categorization (configurable overrides, with distro-specific system-package lists for apt/dnf too)
  • Select individual packages to update — never forced, system packages locked
  • Live streaming output during update (real pacman/yay/flatpak/apt/dnf output)
  • Changelog / PKGBUILD diff viewer (C) — see what actually changed in an AUR package (PKGBUILD diff) or a Flatpak (OSTree commit log) before updating
  • Snapshot + rollback — a full system upgrade (F) takes a snapper/ timeshift snapshot first when one's installed; roll back anytime from the Snapshots screen (B)
  • Update profiles (P) — cycle named groups of packages (e.g. "browsers") from config, auto-selecting just that group; also drives opt-in scheduled auto-update of a chosen safe subset (system packages always excluded)
  • Update history log
  • Background daemon via systemd timer (checks every N hours) with a desktop notification (notify-send) when updates are found
  • Graceful degrade: a backend that isn't installed just reports itself unavailable, so e.g. a Fedora box with only Flatpak gets a clean Flatpak-only list instead of a misleading empty one

Requirements

  • Python 3.11+
  • At least one supported backend:
    • Arch / Arch-based: pacman-contrib (for checkupdates) and yay or paru for AUR — sudo pacman -S pacman-contrib
    • Debian / Ubuntu: apt (present by default)
    • Fedora / RHEL: dnf (present by default)
    • Any distro: flatpak, with at least one remote added (e.g. Flathub)
    • Any distro: snap (snapd)
    • Any distro: brew (Homebrew/Linuxbrew)
  • Optional: notify-send (libnotify) for desktop notifications from the background daemon — installed by default on almost every desktop distro
  • Optional: snapper or timeshift for pre-upgrade snapshots + rollback
  • Optional: systemd user services, for the background timer

Install

Three ways to get it, pick whichever fits:

Method Command Best for
pipx (PyPI) pipx install archbooster Any distro with Python 3.11+
Static binary Download archbooster-linux-x86_64 from Releases Zero-Python install, quick try
AUR yay -S archbooster (source) or archbooster-bin (prebuilt) Arch / Arch-based — pending, see note below
# pipx (recommended)
pipx install archbooster

# from source, with the bundled installer (also sets up the systemd timer)
git clone https://github.com/ansu555/archbooster
cd archbooster
bash install.sh

# static binary
curl -LO https://github.com/ansu555/archbooster/releases/latest/download/archbooster-linux-x86_64
chmod +x archbooster-linux-x86_64
./archbooster-linux-x86_64

Installing pipx first, if needed: sudo pacman -S python-pipx / sudo apt install pipx / sudo dnf install pipx.

AUR note: the PKGBUILDs are ready in packaging/aur/, but new-account registration on aur.archlinux.org is currently closed on Arch's side, so the packages aren't pushed yet. Use pipx or the binary until that reopens.


Usage

Command Action
archbooster Open the full TUI dashboard
archbooster --scan Print available updates and exit
archbooster --daemon Run one background check (systemd)

Keybindings (inside TUI)

Key Action
A Select all packages
N Deselect all
I Invert selection
Enter Update selected (app layer)
F Full system upgrade (snapshot first, if enabled)
R Re-scan for updates
C Changelog / PKGBUILD diff for the highlighted row
P Cycle update profiles (see [profiles] in config)
H Open history
S Open settings
B Open snapshots (rollback: R to arm, Y to confirm)
Q Quit

ArchBooster dashboard


Config

Auto-created at ~/.config/archbooster/config.toml on first run:

[general]
aur_helper     = "yay"   # or "paru"
check_interval = 4       # hours between background daemon scans
confirm        = false   # false: run pacman/yay/flatpak non-interactively
                          #        (your selection in the TUI is the
                          #        confirmation).
                          # true:  also show the package manager's own
                          #        prompts (best from a plain terminal).
notify         = true    # desktop notification (notify-send) when the
                          # background daemon finds updates. No-ops quietly
                          # if notify-send isn't installed.

[categories]
extra_critical = []      # extra package name prefixes to force "critical"
extra_optional = []      # extra package name prefixes to force "optional"

[ignore]
packages = []            # packages to hide from the update list entirely

[snapshot]
enabled = true           # snapshot (snapper/timeshift) before a full upgrade
backend = "auto"          # "auto" | "snapper" | "timeshift" | "none"

[profiles]
# named package-name pattern groups for the [P] filter, e.g.:
# browsers = ["firefox", "chromium", "*chrome*"]

[automation]
auto_update         = false  # opt-in: daemon auto-updates auto_update_profile
auto_update_profile = ""     # name of a [profiles] entry

See docs/config.md for a field-by-field reference.


Project Structure

archbooster/
├── main.py                     # Entry point + CLI flags
├── app.py                      # Textual app root + screen router
├── daemon.py                   # Background check loop (systemd) + notify
├── core/
│   ├── scanner.py              # Package dataclass + line parsing
│   ├── categorizer.py          # critical / normal / optional + guardrail
│   │                           #   (per-distro pattern lists: Arch/apt/dnf)
│   ├── updater.py               # runs yay/pacman, streams output
│   ├── procutil.py              # shared subprocess-streaming helper
│   ├── notify.py                # notify-send wrapper
│   ├── history.py               # read/write history.json
│   ├── config.py                # load/write config.toml
│   ├── snapshot.py               # snapper/timeshift snapshot + rollback
│   ├── profiles.py               # [profiles] pattern matching
│   └── backends/
│       ├── base.py              # Backend interface
│       ├── pacman.py            # official repos + AUR (+ PKGBUILD diff)
│       ├── flatpak.py           # Flatpak — the cross-distro path
│       ├── apt.py                # Debian/Ubuntu
│       ├── dnf.py                # Fedora/RHEL
│       ├── snap.py                # snapd
│       ├── brew.py                # Homebrew/Linuxbrew
│       └── registry.py          # auto-detects installed backends
├── screens/
│   ├── dashboard.py             # Main checklist UI, grouped by source
│   ├── progress.py              # Live update output (+ pre-upgrade snapshot)
│   ├── changelog.py              # Changelog / PKGBUILD diff viewer
│   ├── snapshots.py               # Snapshot list + rollback
│   ├── history.py                # Past updates log
│   └── settings.py               # Settings editor
├── systemd/
│   ├── archbooster.service       # Systemd user service
│   └── archbooster.timer         # Systemd timer (every N hours)
├── packaging/                    # PyInstaller binary + AUR PKGBUILDs
└── install.sh                    # One-shot pipx-based installer

Roadmap

  • Phase 0 — Release hardening (license, pipx installer, config-driven confirm, tests + CI)
  • Phase 2 — Full Textual dashboard + Backend abstraction
  • Phase 3 — Flatpak backend (cross-distro milestone)
  • Phase 4 — Packaging: pipx/PyPI, static binary, AUR PKGBUILDs, release CI
  • Phase 5 — Desktop notifications, docs, v0.2 public release
  • Phase 6 — Changelog/diff viewer, snapshot + rollback, apt/dnf/Snap/ Homebrew backends, update profiles + opt-in auto-update — see the roadmap doc for details

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

archbooster-0.2.0.tar.gz (53.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

archbooster-0.2.0-py3-none-any.whl (50.1 kB view details)

Uploaded Python 3

File details

Details for the file archbooster-0.2.0.tar.gz.

File metadata

  • Download URL: archbooster-0.2.0.tar.gz
  • Upload date:
  • Size: 53.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for archbooster-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1a97a71b6cb85cc35d289d985a47f2ad76e5b5bb1c487842c68eff31e4cc1094
MD5 6458e603205cf8e9d809762822c1a274
BLAKE2b-256 49a25fdb1a64ca1d0b3200b05cb51b80394f90cb2d1ef2f03d20cce523356e90

See more details on using hashes here.

File details

Details for the file archbooster-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: archbooster-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 50.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for archbooster-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9673a4e7fd1725c80547055347ee43641ee3642436c536eca02585271257316c
MD5 c37c391ecd2d6ad8249b5c436bc9217e
BLAKE2b-256 5676c883ff3f4b31e408ab3af8ceda1b2aefba1e9cd498a803d3c52a239a9f45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page