Update one app or all Homebrew casks
Save your work before installing updates. First refresh Homebrew and review the apps it manages:
brew update
brew list --cask
brew outdated --cask
For one installed app, replace rectangle with its token from brew list --cask. Inspect the proposed version before upgrading:
brew info --cask rectangle
brew upgrade --cask rectangle
To upgrade all eligible outdated casks instead, use:
brew upgrade --cask
brew update refreshes Homebrew and its package definitions; brew upgrade installs newer packages. Adding --cask limits the upgrade to casks. See the Homebrew command reference for current options.
Why an app may be missing from brew outdated
Check that the app appears in brew list --cask, then inspect brew info --cask for its token. A vendor release may not have reached the cask yet. Self-updating apps and unversioned downloads also need different checks.
Current Homebrew can compare a readable app bundle with a versioned auto_updates cask. It may include an older app in a normal upgrade; when it cannot compare reliably, it skips that case. version :latest has no comparable version and is excluded from ordinary upgrades. See Homebrew’s explanation of self-updating apps.
To inspect the broader set before deciding what to install:
brew outdated --cask --greedy
The --greedy flags broaden eligibility. They are not a reason to reinstall every app or bypass a warning. Check the app’s own version and release notes when the result is surprising.
Choose a narrow --greedy option
| Option | Additional candidates to consider |
|---|---|
| --greedy-auto-updates | Self-updating casks normally skipped |
| --greedy-latest | Casks using version :latest |
| --greedy | Both groups |
After reviewing the candidate list, you can use the selected option with brew upgrade --cask. For :latest casks, current Homebrew can compare a newly downloaded artifact with the recorded checksum and skip an unchanged download. --greedy does not mean every :latest app is always reinstalled.
Hold a cask before a major upgrade
Current Homebrew supports cask pinning. Pin an installed cask to keep brew upgrade from changing it, and unpin it when you are ready:
brew pin --cask rectangle
When you are ready to allow Homebrew upgrades again, remove the pin:
brew unpin --cask rectangle
Pinning does not stop the app’s own updater. Older Homebrew installations may differ; check brew pin --help. A versioned cask can track a particular release stream when the publisher and cask maintainers provide one.
Before a major upgrade, protect documents and settings as well as the app. A copied bundle cannot undo every data migration or installer change. See how to back up a Mac app before updating.
Troubleshoot an update that will not install
| What you see | What to check next |
|---|---|
| App is not listed | Use brew list --cask. A matching catalog name does not make a manual or App Store installation Homebrew-managed. |
| Cask is pinned | Review why you held it before using brew unpin --cask with that token. |
| Cask is disabled or deprecated | Read brew info --cask and the vendor’s notice; use the supported route. |
| App was moved or renamed | Find the installed copy and the expected location before creating another copy. |
| Version does not match the vendor website | Compare release channel, architecture and the cask’s version; allow for catalog delay. |
| Checksum or signing check fails | Stop and investigate the source or use the publisher’s updater. Do not disable verification to complete the update. |
Adopting a manual install is a separate migration choice. Homebrew’s --adopt requires an existing artifact identical to the one it would install; a matching version label alone is insufficient. Keep the vendor-managed route when ownership is unclear.
Casks, formulae and the rest of your Mac
Casks commonly distribute GUI apps and other prebuilt artifacts; formulae manage command-line software and libraries. Casks can also run installers, so an upgrade is not always a simple app-bundle replacement. Homebrew does not cover every App Store or manually installed app.
macCurrent puts Homebrew-managed apps alongside other update sources and shows when an app needs its own updater or a manual handoff. Use the update-source guide to map those boundaries, or follow the installation steps to review your own library.
Frequently asked questions
What is the command to update all Homebrew casks?
Use brew upgrade --cask after reviewing brew outdated --cask. Run brew update first to refresh package definitions. Only eligible Homebrew-managed casks are included.
How do I update just one Homebrew app?
Use brew upgrade --cask followed by the installed cask token, for example rectangle. Inspect brew info --cask for that token first.
Why does brew update not update my apps?
brew update refreshes Homebrew and package definitions. brew upgrade installs package updates; use --cask to limit it to casks.
Why is a self-updating app skipped?
The installed app may already be current, or Homebrew may lack enough comparable version information. Review the wider candidate list with brew outdated --cask --greedy before choosing an update.
Can I pin a Homebrew cask?
Yes, current Homebrew supports brew pin --cask. This holds Homebrew upgrades, but does not control updates performed by the app itself.
Does Homebrew update App Store apps?
An App Store installation should use the App Store. The presence of a similarly named Homebrew cask does not establish ownership of that installed copy.