topgrade 1.12.0

Upgrade all the things
topgrade-1.12.0 is not a library.


Travis AppVeyor GitHub release AUR homebrew

Alt Text

Keeping your system up to date mostly involves invoking more than a single package manager. This usually results in big shell one-liners saved in your shell history. Topgrade tries to solve this problem by detecting which tools you use and run their appropriate package managers.

Supported Platforms

Topgrade should probably work on whichever platform it can be build. The real question is whether Topgrade knows that platform and can utilize its unique features, such as the operating system's pacakge manager. Topgrade is tested on and knows the following platforms:

  • Linux
    • Arch
    • CentOS/RHEL
    • Fedora
    • Debian/Ubuntu
    • Gentoo
    • openSUSE
    • Void
  • FreeBSD
  • macOS
  • Windows


Arch Linux users can use the AUR package.

macOS users can install topgrade via Homebrew.

Other systems users can either use cargo install or use the compiled binaries from the release page. The compiled binaries contain a self-upgrading feature.

Topgrade isn't guaranteed to work on Rust versions older than the latest stable release. If you intend to install Topgrade using Cargo then you should either install Rust using rustup or use a distribution which ships the latest version of Rust, such as Arch Linux.


Just run topgrade. It will run the following steps:

  • Try to self-upgrade if compiled with this feature. On Unix systems Topgrade will also respawn itself if it was upgraded
  • Linux: Run the system package manager:
    • Arch: Run yay or fall back to pacman
    • CentOS/RHEL: Run yum upgrade
    • Fedora: Run dnf upgrade
    • Debian/Ubuntu: Run apt update && apt dist-upgrade
    • Gentoo: Run layman -s ALL && emerge --sync -q && eix-update && emerge -uDNa world
    • openSUSE: Run zypper refresh && zypper dist-upgrade
    • Void: Run xbps-install -Su
  • Linux: Run etc-update:
  • FreeBSD: Upgrade and audit packages
  • Unix: Run brew update && brew upgrade. This should handle both Homebrew and Linuxbrew
  • Unix: Run nix upgrade-nix && nix --upgrade.
  • Unix: Run Pearl pearl update.
  • Windows: Upgrade Powershell modules
  • Windows: Upgrade all Chocolatey packages
  • Windows: Upgrade all Scoop packages
  • Check if the following paths are tracked by Git. If so, pull them:
    • ~/.emacs.d (Should work whether you use Spacemacs or a custom configuration)
    • ~/.zshrc
    • ~/.oh-my-zsh
    • ~/.tmux
    • ~/.config/fish
    • ~/.config/nvim
    • ~/.vim
    • ~/.config/openbox
    • ~/.config/bspwm
    • ~/.config/i3
    • Powershell Profile
    • Custom defined paths
  • Unix: Run zplug update
  • Unix: Run fisher
  • Unix: Upgrade tmux plugins with TPM. Note: Do not use the -b flag in your configuration as suggested by the TPM readme.
  • Update Rustup by running rustup update. This will also attempt to run rustup self update when Rustup is installed inside the home directory.
  • Run Cargo install-update
  • Upgrade Emacs packages (You'll get a better output if you have Paradox installed)
  • Upgrade OCaml packages
  • Upgrade vcpkg globally installed packages
  • Upgrade myrepos managed sourcecode repositories
  • Upgrade Python packages installed using pipx
  • Upgrade R globally installed packages
  • Upgrade Vim/Neovim packages. Works with the following plugin frameworks:
  • Node
    • Run yarn global update if yarn is installed.
    • Run npm update -g if NPM is installed and npm root -g is a path inside your home directory.
  • Run composer global update if Composer's home directory is inside the home directory of the user. Run valet install after.
  • Upgrade Atom packages
  • Run gem upgrade --user-install if ~/.gem exists
  • Linux: Update Flatpak packages
  • Linux: Update snap packages
  • Linux: Run fwupdmgr to show firmware upgrade. (View only. No upgrades will actually be performed)
  • Linux: Run rpi-update to update Raspberry Pi Firmware
  • Linux: Run pihole updater
  • Run custom defined commands
  • Final stage
    • Linux: Run needrestart
    • Windows: Run Windows Update (You'll have to install PSWindowsUpdate)
    • macOS: Upgrade App Store applications
    • FreeBSD: Run freebsd-upgrade


  • -t/--tmux - Topgrade will launch itself in a new tmux session. This flag has no effect if Topgrade already runs inside tmux. This is useful when using topgrade on remote systems.
  • -c/--cleanup - Topgrade will instruct package managers to remove old or unused files
  • -n/--dry-run - Print what should be run.
  • --disable [STEPS] - Disable one or more steps:
    • system - Skip the system upgrade phase.
    • git-repos - Don't pull custom git repositories.
    • emacs - Don't upgrade Emacs packages or configuration files.
    • vim - Don't upgrade Vim/NeoVim packages or configuration files.
    • gem - Don't upgrade ruby gems.
  • --no-retry - Don't ask to retry failed steps.


Here's an example for a configuration file:

git_repos = [

# Same options as the command line flag
disable = ["system", "emacs"]

"Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak"

"Python Environment" = "~/dev/.env/bin/pip install -i -U --upgrade-strategy eager jupyter"
  • git_repos - A list of custom Git repositories to pull
  • pre_commands - Commands to execute before starting any action. If any command fails, Topgrade will not proceed
  • commands - Custom upgrade steps. If any command fails it will be reported in the summary as all upgrade steps are reported, but it will not cause Topgrade to stop.

Configuration path

The configuration should be placed in the following paths depending by the operating system:

  • macOS - ~/Library/Preferences/topgrade.toml
  • Windows - %APPDATA%/topgrade.toml
  • Other Unix systems - ~/.config/topgrade.toml