Homebrew: Check for outdated packages and upgrade them

Updated: January 28, 2024 By: Guest Contributor Post a comment

Introduction

Homebrew is a package manager for macOS that makes it easy to install and manage tools and applications. Like any package manager, it’s critical to keep the software up to date for both security and performance reasons. In this tutorial, we’ll explore how to check for outdated Homebrew packages and update them as needed.

Getting Started

Before we begin, ensure that you have Homebrew installed on your macOS. You can install Homebrew by running the following in your terminal:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

After installation, it’s good practice to make sure we’re working with the latest version of Homebrew and its formulae:

brew update

With Homebrew up to date, we can begin checking for outdated packages.

Checking for Outdated Packages

To list outdated packages, use the following command:

brew outdated

This command outputs a list of installed packages that have a newer version available. If you see no output, that means all your packages are up to date.

Updating Specific Packages

To update a specific package, run:

brew upgrade <formula>

Replace with the name of the package you wish to upgrade. For example, to upgrade wget:

brew upgrade wget

The terminal will then show the progress of the upgrade process.

Updating All Outdated Packages

If you’d rather update all outdated packages at once, you can use the following command:

brew upgrade

This command will upgrade every outdated package to the latest version.

Understanding the Upgrade Output

During the upgrade process, Homebrew provides output regarding the actions it takes:

==> Upgrading 1 outdated package:
curl 7.64.1 -> 7.76.0

This example shows curl being upgraded from version 7.64.1 to 7.76.0.

Options When Upgrading Packages

There are several options you can append to brew upgrade:

  • --verbose – Provides more detailed output about the upgrade process.
  • --dry-run – Simulates an upgrade without actually performing it, so you can see what would happen.
  • --force – Forces the reinstallation of the current package version.

For example, to simulate an upgrade without performing it, you would use:

brew upgrade --dry-run

Cleaning up Old Versions

After upgrading, old versions of packages are typically left on your system, taking up storage space. To remove them, run:

brew cleanup

You can also see what would be removed, without actually removing it, by using the --dry-run option:

brew cleanup --dry-run

Homebrew will list the files it would delete if you ran without the dry-run option.

Pin and Unpin Packages

If you want to prevent a package from being updated, you can pin it:

brew pin <formula>

Conversely, to allow a pinned package to receive updates again, unpin it:

brew unpin <formula>

When you run brew upgrade, pinned packages will be ignored.

Upgrading to Specific Versions

While Homebrew typically upgrades to the latest version, there may be times when you want to install a specific version of a package. Homebrew doesn’t support this natively, but you can create your own tap or use a tap that contains the versioned formula, for example:

brew tap homebrew/cask-versions

Once tapped, you can install different versions of certain applications.

Checking Upgrade History

You can check the history of installed and upgraded packages by using:

brew log <formula>

Or, more generally, to see which packages were updated recently:

brew list --versions

Dealing with Issues

Sometimes, an upgrade may fail or cause issues with the package’s functionality. In such a case, you might want to check for any known issues with:

brew doctor

It can diagnose issues and suggest fixes. For individual packages, referencing the package’s documentation or searching for relevant issues on their repository or forums may help.

Conclusion

Regularly checking for and upgrading outdated packages in Homebrew keeps your system secure and functional. While it’s a straightforward process, you now have a deeper understanding of the available commands and options to manage packages effectively on your macOS device.