A fast, beautiful CLI for managing system updates on Linux. Runs package manager updates concurrently with real-time progress tracking.
| Package Manager | Distribution |
|---|---|
| APT | Debian, Ubuntu, Linux Mint, Pop!_OS |
| DNF | Fedora, RHEL, CentOS, Rocky Linux |
| Pacman | Arch Linux, Manjaro, EndeavourOS |
| Flatpak | All distributions |
| Snap | All distributions |
| AUR | Arch-based, with yay or paru |
| mise | All distributions |
| Omarchy | Omarchy (migrations) |
Also updates these CLI tools when installed: Claude Code (claude update) and Codex CLI (codex update). Under sudo they run as the invoking user, so per-user installs in ~/.local/bin are found and stay owned by that user. A dry run lists nothing for them, since neither has a check-only mode.
AUR updates use yay (or paru when yay is missing) and run as the invoking user, since makepkg refuses to run as root; they are skipped when sysupdate runs as root without sudo. mise tools are upgraded with mise upgrade, also as the invoking user. On Omarchy, pending migrations are applied with omarchy-migrate, and Pacman runs with --overwrite /usr/share/omarchy/* as Omarchy's own updater does.
Pacman runs first. Omarchy migrations start after Pacman finishes, and AUR after both, because of the pacman lock and because migrations need the new packages. If Pacman fails, the updaters that wait for it are skipped and reported as failures. Everything else runs concurrently.
- Concurrent Updates: All available package managers run in parallel
- Multi-Distro Support: Works on Debian, Fedora, Arch-based systems and more
- Parallel Downloads: Uses aria2c for faster APT package downloads (optional)
- Real-time Progress: Live progress bars with package names and speed
- Self-Update: Built-in command to update sysupdate itself from GitHub Releases
- Gorgeous Terminal UI: Animated startup banner with a diagonal sheen reveal, truecolor gradient progress bars, and per-manager accent colors — with graceful fallbacks for narrow, non-Unicode, or piped output
- Detailed Logging: Timestamped logs saved for troubleshooting
Grab a self-contained binary from the latest release — no Python or uv required. Replace x86_64 with aarch64 on ARM systems.
# Download the binary for your architecture
curl -LO https://github.com/cosmix/sysupdate/releases/latest/download/sysupdate-linux-x86_64
# (Optional) verify the checksum
curl -LO https://github.com/cosmix/sysupdate/releases/latest/download/SHA256SUMS.txt
sha256sum --check --ignore-missing SHA256SUMS.txt
# Install onto your PATH (the filename must stay 'sysupdate' for self-update to work)
chmod +x sysupdate-linux-x86_64
sudo mv sysupdate-linux-x86_64 /usr/local/bin/sysupdate
# Run
sysupdateOnce installed this way, sysupdate self-update upgrades the binary in place from future releases.
# Clone the repository
git clone https://github.com/cosmix/sysupdate.git
cd sysupdate
# Install with uv
uv sync
# Run
uv run sysupdateInstall aria2 for faster parallel package downloads:
sudo apt install aria2# Run updates
sysupdate
# Dry run (show what would be updated)
sysupdate --dry-run
# Verbose mode (detailed package info)
sysupdate --verbose
# Disable banner/summary animations (or set SYSUPDATE_NO_ANIMATION=1)
sysupdate --no-animation
# Show version
sysupdate --version
# Check for sysupdate updates
sysupdate self-update --check-only
# Update sysupdate to latest version
sysupdate self-updateOn Fedora, APT is replaced with DNF. On Arch, it's replaced with Pacman. Narrow or non-Unicode terminals automatically fall back to compact ASCII art.
- Python 3.11+
- Linux (Debian/Ubuntu, Fedora/RHEL, Arch, or derivatives)
sudoprivileges- At least one supported package manager (APT, DNF, or Pacman)
flatpak(optional)snap(optional)claude/codex(optional, updated via their ownupdatecommand)aria2(optional, for parallel APT downloads)
Logs are saved to /var/log/sysupdate/ when running as root, or ~/.local/state/sysupdate/logs/ for non-root users:
sysupdate_YYYYMMDD_HHMMSS_main.log
sysupdate_YYYYMMDD_HHMMSS_apt.log # Debian/Ubuntu
sysupdate_YYYYMMDD_HHMMSS_dnf.log # Fedora/RHEL
sysupdate_YYYYMMDD_HHMMSS_pacman.log # Arch
sysupdate_YYYYMMDD_HHMMSS_flatpak.log
sysupdate_YYYYMMDD_HHMMSS_snap.log
sysupdate_YYYYMMDD_HHMMSS_claude.log
sysupdate_YYYYMMDD_HHMMSS_codex.log
# Run tests
uv run pytest
# Run with verbose output
uv run pytest -v
# Test with downgraded packages
./test_downgrade.sh --count 3
uv run sysupdateUtility to simulate package downgrades for testing:
./test_downgrade.sh --dry-run # Preview
./test_downgrade.sh --count 5 # Downgrade 5 packages
./test_downgrade.sh # Downgrade 3 packages (default)The original bash script is available as sysupdate-legacy.sh:
./sysupdate-legacy.shMIT - See LICENSE
