Safe, cross-platform updater that upgrades packages across your installed managers.
yup detects your installed package managers and updates them all with a single command. On first run, it shows an interactive configuration wizard to select which managers to update. Subsequent runs execute directly with saved preferences.
cargo install yupbrew tap izantech/tap
brew install yupwinget install izantech.yupchoco install yupgit clone https://github.com/izantech/yup
cd yup
cargo install --path .yup [OPTIONS] [COMMAND]| Command | Description |
|---|---|
config |
Re-run the configuration wizard |
log |
Show the last run log |
| Flag | Description |
|---|---|
-h, --help |
Show help message |
-V, --version |
Show version |
-n, --dry-run |
Preview commands without executing |
-y, --yes |
Skip prompts, use saved config defaults |
-v, --verbose |
Show command output during execution |
--only <managers> |
Only update specified managers (comma-separated) |
--skip <managers> |
Skip specified managers (comma-separated) |
--status |
Check for outdated packages without updating |
# First run: interactive configuration wizard
yup
# Subsequent runs: execute with saved config
yup
# Preview what would happen
yup --dry-run
# Non-interactive with all detected managers
yup --yes
# Re-configure which managers to update
yup config
# Only update Homebrew and npm
yup --only brew,npm
# Skip slow managers
yup --skip softwareupdate,mas
# Check for outdated packages
yup --status
# View last run log
yup logOn first run, yup shows an interactive wizard to:
- Select which detected managers to update
- Preview the commands that will run
- Save configuration and execute
Configuration is stored at:
- macOS:
~/Library/Application Support/yup/config.toml - Linux:
~/.config/yup/config.toml - Windows:
%APPDATA%/yup/config.toml
Run yup config to reconfigure at any time.
yup focuses on package managers that support global package upgrades. Currently supporting 20 managers across platforms.
- brew - Homebrew (macOS/Linux)
- port - MacPorts (macOS)
- mas - Mac App Store CLI (macOS)
- softwareupdate - macOS updates
- apt - Debian/Ubuntu (Linux)
- dnf - Fedora/RHEL (Linux)
- pacman - Arch Linux
- flatpak - Flatpak (Linux)
- snap - Snap (Linux)
- winget - Windows Package Manager
- choco - Chocolatey (Windows)
- scoop - Scoop (Windows)
- mise - Modern polyglot runtime manager (formerly rtx)
- conda/mamba - Python/data science environments
- npm - Global Node.js packages
- pnpm - Global Node.js packages
- pipx - Python CLI applications (isolated environments)
- gem - Ruby gems
- rustup - Rust toolchains
- cargo - Rust packages (via cargo-update)
Logs are stored in platform-appropriate directories:
- macOS:
~/Library/Application Support/yup/ - Linux:
~/.local/share/yup/ - Windows:
%APPDATA%/yup/
Daily rotation with filenames like yup.2026-01-11.log.
This repo pins a Rust toolchain via rust-toolchain.toml. With rustup installed,
cargo build and cargo clippy will use the pinned version automatically.
Some package managers require root/admin privileges (sudo) to run updates:
- Linux: apt, dnf, pacman, snap
- macOS: port, mas, softwareupdate
When privileged commands are queued, yup will:
- Show
[sudo]markers next to commands that need elevation - Prompt for your password once before execution (via
sudo -v) - Automatically prepend
sudoto those commands
This means you only enter your password once, not for each command.
- macOS, Linux, or Windows