yup is a cross-platform command-line tool designed to update packages across multiple package managers with a single command. It detects how tools were installed (e.g., Homebrew, asdf, nvm, pyenv, rbenv, conda, etc.) and updates them using their respective managers.
Key Features:
Package Manager Detection: Automatically identifies the package managers used to install tools on your system.
Interactive Configuration Wizard: On first run, it guides you through selecting which managers to update and saves these preferences for future use.
Cross-Platform Support: Works seamlessly on macOS, Linux, and Windows, with installation available via winget for Windows users.
Privilege Handling: Manages sudo requirements for updates, prompting for your password once and elevating privileges as needed.
Audience & Benefit:
Ideal for developers and system administrators managing multiple tools across different package managers. Yup streamlines the update process by automating package upgrades, saving time and reducing the risk of errors associated with manual installations or updates. Its efficiency and reliability make it a valuable tool for maintaining a consistent and up-to-date development environment.
README
yup
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.
Installation
Cargo (recommended)
cargo install yup
Homebrew (macOS/Linux)
brew tap izantech/tap
brew install yup
winget (Windows)
winget install izantech.yup
Chocolatey (Windows)
choco install yup
From source
git clone https://github.com/izantech/yup
cd yup
cargo install --path .
Usage
yup [OPTIONS] [COMMAND]
Commands
Command
Description
config
Re-run the configuration wizard
log
Show the last run log
Options
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
Only update specified managers (comma-separated)
--skip
Skip specified managers (comma-separated)
--status
Check for outdated packages without updating
Examples
# 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 log
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.
Toolchain
This repo pins a Rust toolchain via rust-toolchain.toml. With rustup installed,
cargo build and cargo clippy will use the pinned version automatically.
Privilege Handling
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 sudo to those commands
This means you only enter your password once, not for each command.