A unified system update manager for Linux
Update-All is a command-line tool that orchestrates updates across multiple package managers and system components. Instead of running separate update commands for APT, Flatpak, Snap, pipx, and others, Update-All handles them all with a single command.
- Unified Updates — Update all your package managers with one command
- Multiple Package Managers — Supports APT, Flatpak, Snap, pipx, Cargo, npm, and Rustup
- Smart Execution — Plugins run in the correct order with dependency awareness
- Progress Display — Rich terminal UI showing real-time progress for each plugin
- Dry Run Mode — Preview what will be updated before making changes
- Update History — Track past update runs and their results
- Configuration — Enable/disable plugins and customize behavior
- Remote Updates — Update multiple machines via SSH (coming soon)
- Scheduled Updates — Automatic updates via systemd timers (coming soon)
| Package Manager | Description |
|---|---|
| apt | Debian/Ubuntu system packages |
| flatpak | Flatpak applications |
| snap | Snap packages |
| pipx | Python CLI applications |
| cargo | Rust packages installed via cargo |
| npm | Global npm packages |
| rustup | Rust toolchain updates |
The easiest way to install Update-All is using pipx:
# Install pipx if you don't have it
sudo apt install pipx
pipx ensurepath
# Install update-all
pipx install git+https://github.com/adamryczkowski/updateall.git#subdirectory=cli
# Verify installation
update-all --versionFor development or if you want to modify the code:
Prerequisites:
- Python 3.11 or later
- Poetry 2.0 or later
- just command runner
- pre-commit for code quality hooks
# Clone the repository
git clone https://github.com/adamryczkowski/updateall.git
cd updateall
# Set up development environment (installs dependencies + pre-commit hooks)
just setup
# Verify installation
just run -- --version
# Run update-all
just run# Update all enabled plugins
update-all run
# Or using just
just run# See what updates are available without applying them
update-all check# Preview what would be updated
update-all run --dry-run# Update only apt and flatpak
update-all run --plugin apt --plugin flatpak# See which plugins are available and enabled
update-all status# Show recent update runs
update-all history
# Show more entries
update-all history --limit 20update-all plugins list# Disable a plugin
update-all plugins disable snap
# Enable a plugin
update-all plugins enable snapupdate-all config show# Create default configuration
update-all config init
# Show configuration file path
update-all config pathThe configuration file is located at ~/.config/update-all/config.yaml:
# Global settings
global:
max_parallel_tasks: 4
continue_on_error: true
verbose: false
# Plugin-specific settings
plugins:
apt:
enabled: true
timeout_seconds: 3600
flatpak:
enabled: true
snap:
enabled: false # Disable snap updates
pipx:
enabled: true| Command | Description |
|---|---|
update-all run |
Run system updates with orchestrator and UI |
update-all check |
Check for available updates |
update-all status |
Show system and plugin status |
update-all history |
Show update history |
update-simple |
Run plugins directly without orchestrator (simple mode) |
| Command | Description |
|---|---|
update-all plugins list |
List all available plugins |
update-all plugins enable <name> |
Enable a plugin |
update-all plugins disable <name> |
Disable a plugin |
| Command | Description |
|---|---|
update-all config show |
Show current configuration |
update-all config init |
Initialize configuration file |
update-all config path |
Show configuration file path |
| Option | Description |
|---|---|
--dry-run, -n |
Simulate updates without making changes |
--verbose, -v |
Enable verbose output |
--plugin, -p |
Specify plugins to run (can be repeated) |
--continue-on-error, -c |
Continue with remaining plugins after a failure |
--version, -V |
Show version and exit |
--help |
Show help message |
# Run all updates with verbose output
update-all run --verbose# 1. Check what's available
update-all check
# 2. Preview the updates
update-all run --dry-run
# 3. Run the actual updates
update-all run# Update only user-space package managers (no sudo required)
update-all run --plugin pipx --plugin flatpak --plugin cargoFor users who prefer a simpler, shell-script-like experience without the orchestrator overhead, use update-simple:
# List available plugins
update-simple --list
# Run specific plugins in sequence
update-simple apt pipx flatpak
# Run all available plugins
update-simple --all
# Dry run with verbose output showing all 4 steps
update-simple apt --dry-run --verbose
# Skip the separate download phase
update-simple apt --skip-downloadThe update-simple command runs each plugin through 4 steps:
- check_available() — Does plugin apply to this system?
- check_updates() — Are updates available?
- download() — Download updates (if supported separately)
- execute() — Apply updates
This is ideal for:
- Debugging individual plugins
- Scripting custom update sequences
- Users who prefer explicit control over execution order
# Enable weekly updates
update-all schedule enable --interval weekly
# Check schedule status
update-all schedule status
# Disable scheduled updates
update-all schedule disable# Update a remote host
update-all remote run server1
# Update multiple hosts in parallel
update-all remote run server1 server2 --parallel
# Check connectivity
update-all remote check server1If a plugin shows as "not available", ensure the corresponding package manager is installed:
# Check if apt is available
which apt
# Check if flatpak is available
which flatpakSome plugins (like apt) require sudo privileges. Update-All will prompt for your password when needed.
If updates are timing out, increase the timeout in your configuration:
plugins:
apt:
timeout_seconds: 7200 # 2 hoursFor detailed debugging information:
update-all run --verbose- Operating System: Linux (tested on Ubuntu 24.04)
- Python: 3.11 or later
- Package Managers: Only the ones you want to use need to be installed
MIT License - see LICENSE file for details.
Contributions are welcome! Please see the Plugin Development Guide for information on creating new plugins.