LinuxCommandLibrary

topgrade

Upgrade your system using multiple package managers

TLDR

Run updates

$ topgrade
copy

Say yes to all updates
$ topgrade [[-y|--yes]]
copy

Cleanup temporary/old files
$ topgrade [[-c|--cleanup]]
copy

Disable a certain update operation
$ topgrade --disable [operation]
copy

Only perform a certain update operation
$ topgrade --only [operation]
copy

Edit the configuration file with default editor
$ topgrade --edit-config
copy

SYNOPSIS

topgrade [OPTIONS]

PARAMETERS

-h, --help
    Displays help information and exits.

-V, --version
    Prints version information and exits.

-y, --yes
    Assumes "yes" to all prompts, running non-interactively.

--no-self-update
    Prevents topgrade from attempting to update itself.

--no-parallel
    Disables parallel execution of updaters, running them sequentially.

--disable <UPDATER>
    Disables a specific updater (e.g., apt, pip). Can be specified multiple times.

--only <UPDATER>
    Runs only the specified updater(s). Can be specified multiple times.

--print-commands
    Prints the commands that would be run without actually executing them.

--config <PATH>
    Specifies an alternative configuration file path.

DESCRIPTION

topgrade is an intelligent, cross-platform command-line utility designed to streamline the process of updating various software components on your system. Instead of manually running `apt update && apt upgrade`, `dnf update`, `pacman -Syu`, `brew update && brew upgrade`, `pip install --upgrade`, `cargo update`, or specific updates for tools like `oh-my-zsh`, topgrade automates this entire sequence.

It acts as a meta-updater, orchestrating updates across a wide array of package managers (e.g., apt, dnf, pacman, Homebrew, Chocolatey, Nix), programming language environments (e.g., pip, cargo, npm, go), and other tools. This consolidation saves significant time and effort, ensuring your system, development tools, and applications are consistently up-to-date with a single command. topgrade is highly configurable via a `~/.config/topgrade.toml` file, allowing users to enable or disable specific updaters, add custom commands, and control its behavior.

CAVEATS

topgrade relies on the underlying package managers and tools being correctly installed and configured. Issues with a specific package manager will manifest through topgrade.

Running with --yes can sometimes lead to unexpected behavior if an underlying update has critical prompts or requires manual intervention. It's generally safer to review updates before confirming.

While topgrade simplifies updates, it doesn't replace the need to understand how your system's primary package manager works or to review significant changes before applying them.

CONFIGURATION

topgrade is highly customizable through its configuration file, typically located at ~/.config/topgrade.toml (or %APPDATA%\topgrade\topgrade.toml on Windows). This TOML file allows users to:

  • Enable or disable specific updaters.
  • Define custom commands to run before or after updates.
  • Override default command arguments for updaters.
  • Control parallel execution, confirmation prompts, and more.
This flexibility makes topgrade adaptable to diverse system setups and personal preferences.

CROSS-PLATFORM SUPPORT

One of topgrade's most significant features is its broad cross-platform compatibility. It supports Linux distributions (Debian/Ubuntu, Fedora, Arch, NixOS, etc.), macOS (via Homebrew), and Windows (via WSL, Chocolatey, Scoop). This makes it an ideal tool for users who work across multiple operating systems or development environments, providing a consistent update experience regardless of the underlying platform.

HISTORY

topgrade was created to address the common frustration of needing to run multiple update commands across various software ecosystems (system packages, programming language tools, dotfiles, etc.). It emerged as a solution to automate this fragmented update process, gaining popularity due to its simplicity, cross-platform compatibility, and extensive support for different updaters. Its development is community-driven, focusing on adding support for more tools and improving user experience through configuration options.

SEE ALSO

apt(8), dnf(8), pacman(8), brew(1), pip(1), cargo(1), npm(1)

Copied to clipboard