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 |
- 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)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
# 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
