Safeguard
Developer Tools•

brew update vs brew upgrade vs brew outdated: what each one does

Homebrew's update refreshes definitions, outdated lists stale packages, and upgrade installs newer versions. Learn the order, pinning and auto-update.

Safeguard Security Team
3 min read

brew update refreshes Homebrew itself and its package definitions. brew outdated lists installed packages that have newer versions. brew upgrade installs those newer versions. Run them in that order, reading the outdated list before you upgrade, so you know what is about to change on your machine.

The three commands in order

The Homebrew FAQ answers "How do I update my local packages?" in three steps.

  1. First update all package definitions (formulae) and Homebrew itself with brew update.
  2. List which installed packages are outdated with brew outdated.
  3. Upgrade everything with brew upgrade, or one package with brew upgrade followed by its name.

The common mistake is thinking brew update upgrades your tools. It does not. It only refreshes what Homebrew knows. Your installed software stays at the same versions until you upgrade.

Why the middle step matters

Running brew outdated gives you a review point. You can see which tools will move, notice a major version jump, and decide whether to wait. Skipping straight to upgrade everything means a new release of any tool lands on a laptop that holds your credentials, with no look at all.

That is not an argument against updating. Security fixes only help once installed. It is an argument for a short, deliberate step between knowing and doing. Our post on automatic updates on a developer Mac covers the wider picture.

Holding something back

The FAQ documents brew pin, which stops a formula or cask from being updated or upgraded, and brew unpin to allow it again. It adds a caveat: a pinned, outdated formula that another formula depends on must be upgraded when required, because Homebrew does not allow formulae to be built against outdated versions.

If you also do not want Homebrew to learn about newer versions until you choose, the FAQ gives an environment variable, HOMEBREW_NO_AUTO_UPDATE set to 1, which disables auto-updating entirely. Think about that trade: you gain predictability and lose automatic awareness of new versions and fixes. If you set it, put a calendar reminder next to it.

Cleanup behaviour worth knowing

The FAQ states Homebrew automatically uninstalls old versions of each upgraded formula and periodically performs additional cleanup every 30 days. Settings exist to disable that. Old versions that linger are old software still on disk, so leave cleanup on unless you have a reason.

A monthly routine

brew update
brew outdated
brew upgrade
brew cleanup

Between the second and third lines, read the list. If a tool you do not recognise appears, that is a prompt to remove it or find out why it is installed. The Brewfile post shows how to keep a record.

Try it yourself

Click through it at your own pace, or open it full screen.

Watch how knowing a fix exists and applying it are two separate steps, just like update and upgrade.

Quick check

Does brew update upgrade my installed tools?

No. It refreshes Homebrew and its definitions. Use brew upgrade to install newer versions.

How do I stop one package from upgrading?

Use brew pin on it, and brew unpin to allow updates again.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.