There is now finally an official upgrade mechanism for Homebrew Cask (see Issue 3396 for the implementation)! To use it, simply run this command:

brew upgrade --cask

However this will not update casks that do not have versioning information (version :latest) or applications that have a built-in upgrade mechanism (auto_updates true). To reinstall these casks (and consequently upgrade them if upgrades are available), run the upgrade command with the --greedy flag like this:

brew upgrade --cask --greedy

To get outdated:

brew outdated --cask --greedy --verbose

Answer from scribblemaniac on Stack Overflow
🌐
Homebrew
docs.brew.sh › FAQ
Homebrew Documentation: FAQ (Frequently Asked Questions)
Naming a cask explicitly, using --greedy-auto-updates or using the broader --greedy option can include casks that the default checks skip. Set HOMEBREW_UPGRADE_GREEDY=1 to apply --greedy persistently to all cask upgrades, or list selected casks ...
Discussions

macos - How can I update everything installed through Homebrew after OSX upgrade? - Ask Different
As for rebuilding all of your programs for the new OS build, there is no reason to do this as the compiled binary should result as the same. If you are noticing any issues, I would just uninstall and reinstall the packages that you are having issues with. ... Seems like brew cask upgrade is ... More on apple.stackexchange.com
🌐 apple.stackexchange.com
July 14, 2012
macos - How to update packages installed via Homebrew? - Ask Different
I've installed packages in my macOS using Homebrew, and installed GUI apps using Homebrew Cask. ... Note, I had to add my own answer for this since I got here looking for just one, and noticed the top answer had brew upgrade --cask, while I got the following from here: More on apple.stackexchange.com
🌐 apple.stackexchange.com
April 22, 2020
Homebrew doesn't update casks?
I use an add on app called "homebrew-cask-upgrade" it allows me to updates the casks by typing, brew cu --all link https://github.com/buo/homebrew-cask-upgrade More on reddit.com
🌐 r/MacOS
5
7
May 1, 2022
bash - How to update a list of applications with brew? - Stack Overflow
When it needs fresh information about packages, Homebrew runs brew update --auto-update and caches the information for about 10 minutes. ... Read below about the meaning and usage of brew outdated and brew upgrade. brew outdated is not really needed but it helps you to have an overview of what needs to be upgraded, before doing the actual upgrade. You can decide to not update all formulae and casks ... More on stackoverflow.com
🌐 stackoverflow.com
🌐
GitHub
github.com › buo › homebrew-cask-upgrade
GitHub - buo/homebrew-cask-upgrade: A command line tool for upgrading every outdated app installed by Homebrew Cask · GitHub
In order to simply verify that ... command and see if the repo is included: > brew tap buo/cask-upgrade homebrew/bundle homebrew/cask homebrew/core ... While running the brew cu command without any other further options, the script automatically ...
Author   buo
🌐
Mchael Poncardas
poncardas.com › home › blog › how to update homebrew and formulae
How to Update Homebrew and Formulae | Mchael Poncardas
December 15, 2024 - All-in-one command you can run to update everything (formulae, casks, and Homebrew itself) and clean up old versions afterward · brew update && brew upgrade && brew upgrade --cask && brew cleanup · brew update Updates Homebrew itself (the ...
🌐
Nickjvturner
nickjvturner.com › posts › upgrade-all-your-brew-packages
Upgrade ALL your Brew packages - Nick Turner
September 10, 2023 - It is possible to exclude specific packages from examination with grep -v 'package' ... brew update && brew list --casks | grep -v 'autodesk-fusion360' | xargs brew upgrade --cask && brew cleanup
Top answer
1 of 3
20

If you're only trying to upgrade one package:

brew upgrade package_name

All packages

brew update && brew outdated && brew upgrade && brew cleanup

Note, I had to add my own answer for this since I got here looking for just one, and noticed the top answer had brew upgrade --cask, while I got the following from here:

During 2020 the sub-commands of the cask command were gradually integrated into the core of Homebrew and were deprecated. The core commands now operate on both formulae and casks. To limit their scope to only formulae or casks add the --formula or --cask option to the command line.

The cask command has been completely removed from Homebrew in version 2.6.0, released in December 2020.

There is a unified flow now for both formulae and casks:

brew update
brew outdated
brew upgrade

The first command (brew update) gets from the Homebrew servers the information about the most recent versions of the available formulae and casks.

The second command (brew outdated) lists the outdated installed formulae and casks. Add --formulae or --casks to the command line to limit the command scope to formulae or casks. Add --greedy to the command line to include in its output the casks that are marked as "auto-updateable". This command is not needed. It can be used to see what programs will be upgraded before doing the actual upgrade.

The third command (brew upgrade) upgrades the packages listed by brew outdated. It also supports the options listed above for brew outdated and operates accordingly.

2 of 3
12

To have your packages and apps you just need to run these commands in your terminal:

brew update && brew upgrade && brew upgrade --cask && brew cleanup
Find elsewhere
🌐
Commands.dev
commands.dev › workflows › upgrade_all_installed_homebrew_casks
Upgrade all installed Homebrew casks
This will not update casks that do not have versioning information or applications that have a built-in upgrade mechanism. To reinstall these casks, append the `--greedy` flag.. Command is `brew upgrade --cask`
🌐
ITECH4MAC
itech4mac.net › home › 2026 › march › how to update all homebrew packages at once (and fix broken dependencies)
How to Update All Homebrew Packages at Once (And Fix Broken Dependencies) – ITECH4MAC
March 31, 2026 - Each command plays a specific role: brew update # Fetch latest formula information from GitHub brew outdated # Preview what will be upgraded (optional but useful) brew upgrade # Upgrade all outdated formulae and casks brew autoremove # Remove ...
🌐
Didoesdigital
didoesdigital.com › blog › homebrew-package-maintenance-macos
Diving Deeper Into Homebrew to Better Manage Packages on Your macOS Machine · DiDoesDigital
November 8, 2024 - To see all the packages that have an updated version available, run: ... There are some useful variations to add after brew outdated if you only want to see some details like: ... --greedy-auto-updates, --greedy-latest, and --greedy to show outdated casks with auto_updates true, version :latest, or both, respectively
🌐
Brtkwr
brtkwr.com › posts › 2025-10-10-brew-upgrade
Keeping Homebrew packages up to date · brtkwr.com
October 10, 2025 - I hadn’t run brew upgrade in a couple of months and suddenly gh started failing with cryptic errors. Turned out I was three major versions behind. Now I upgrade weekly - it’s less painful than debugging version mismatches.
🌐
GitHub
github.com › Homebrew › homebrew-cask › blob › main › USAGE.md
homebrew-cask/USAGE.md at main · Homebrew/homebrew-cask
May 9, 2023 - Since the Homebrew Cask repository is a Homebrew tap, you’ll pull down the latest casks every time you issue the regular Homebrew command brew update. You can check for outdated casks with brew outdated and install the outdated casks with ...
Author   Homebrew
Top answer
1 of 2
114

2023 update

Running brew update is not needed any more since Homebrew version 3.0 or so. When it needs fresh information about packages, Homebrew runs brew update --auto-update and caches the information for about 10 minutes.

The commands to run now are:

brew outdated
brew upgrade
brew cleanup

Read below about the meaning and usage of brew outdated and brew upgrade.

brew outdated is not really needed but it helps you to have an overview of what needs to be upgraded, before doing the actual upgrade. You can decide to not update all formulae and casks blindly (by running brew upgrade without arguments) but to upgrade only some packages (by adding the package name(s) in the command line).

You may also decide to pin some formulae to their current versions using brew pin <formula>; brew upgrade ignores the pinned formulae.
A command to pin the casks is not provided because it is not possible to pin a cask to a certain version. As Homebrew FAQ explains, when a software program uses built-in mechanisms to upgrade itself, pinning the cask to a certain version can lead to inconsistency between the version reported by Homebrew (the one that it tries to pin the cask to) and the actual version of the software, updated by its built-in mechanism. For such software programs, the pin does not actually work, but only produces confusion.

The last command (brew cleanup) removes the old versions of the installed packages from its local cache. Homebrew keeps in a cache the package used to install the current version of a formula or cask.
This command is also not really needed any more, Homebrew cleans the old source packages after it upgrades a formula or a cask. However, brew cleanup is still helpful because it removes (many and small) other files that are not needed any more (logs, caches, etc.)

2021 update

During 2020 the sub-commands of the cask command were gradually integrated into the core of Homebrew and were deprecated. The core commands now operate on both formulae and casks. To limit their scope to only formulae or casks add the --formula or --cask option to the command line.

The cask command has been completely removed from Homebrew in version 2.6.0, released in December 2020.

There is a unified flow now for both formulae and casks:

brew update
brew outdated
brew upgrade

The first command (brew update) gets from the Homebrew servers the information about the most recent versions of the available formulae and casks.

The second command (brew outdated) lists the outdated installed formulae and casks. Add --formulae or --casks to the command line to limit the command scope to formulae or casks. Add --greedy to the command line to include in its output the casks that are marked as "auto-updateable".
This command is not needed. It can be used to see what programs will be upgraded before doing the actual upgrade.

The third command (brew upgrade) upgrades the packages listed by brew outdated. It also supports the options listed above for brew outdated and operates accordingly.


The original answer and the 2018 update are kept for historical reasons.


2018 update

In the meantime, the command brew cask upgrade has been implemented and can be used instead of brew cask reinstall in the script provided in the original answer.

It also works without arguments and upgrades all the casks displayed by brew cask outdated. It can replace the for block in the script that now becomes:

# Upgrade Homebrew and the information about formulas
$ brew update
# List the outdated casks (optional)
$ brew cask outdated
# Upgrade all outdated casks
$ brew cask upgrade

Additional info

Sometimes, brew cask outdated does not list all the outdated casks. This is by design. Some casks mark themselves as auto-updateable while others use the keyword latest as their version. These two categories of casks are not listed by brew cask outdated. To list them one have to add the --greedy option in the command line of brew cask outdated:

$ brew cask outdated --greedy

This command includes in its output the casks mentioned above. Those having latest as their version cannot be checked and are always listed, those marked as auto-updateable are checked and listed only if they are outdated indeed.

The command brew cask upgrade also accepts the --greedy option (internally it uses brew cask outdated to find the list of packages to upgrade). Using it ensures your system is up to date with the additional cost of reinstalling some applications that are not outdated.


The original answer (July 2017)

You are mixing brew commands with brew cask commands and it doesn't work this way.

Homebrew Cask is a component of Homebrew that allows management of graphical applications. It started as an extension of the original Homebrew; it is now an integrated command of brew. Homebrew itself manages only command line applications.

Upgrading command line programs

Upgrading all outdated programs installed with brew (command line programs) is easy:

# Tell Homebrew to update itself and its taps (repositories of programs)
$ brew update
# List the outdated programs
$ brew outdated
# Upgrade all the outdated programs and their dependencies
$ brew upgrade

The brew update and brew outdated steps are optional. brew upgrade internally calls brew update if the last update happened too much time in the past. brew outdated only lists the outdated installed programs; it is useful if you do the upgrade manually and you don't want to upgrade everything. In this case you can pick the programs you want to upgrade and run brew upgrade <program> for each program you want to update. Replace <program> with the package name displayed by brew outdated.

Upgrading graphical programs

Upgrading all outdated graphical programs is not that straightforward at the moment. The process is slightly different than the above.

The first step is to run brew update. It updates Homebrew code and the taps (a tap is a repository of programs managed by Homebrew). Homebrew Cask provides the sub-command brew cask update but it is just an alias of brew update. You can use any of them; brew update is preferred because it is shorter.

The second step is to run brew cask outdated. This command shows the list of outdated programs managed by Cask, together with the installed version and the new version. The option --quiet tells it to show only the package names, without versions. You'll need this for automation on the third step.

The next paragraphs are deprecated since 2018, when the command brew cask upgrade has been implemented. The new flow is described in the section "2018 update" above.

Unfortunately there is no brew cask upgrade command at this moment (it is planned but not implemented yet). brew upgrade doesn't know how to handle the programs installed by brew cask either.

brew cask reinstall can be used instead of the missing brew cask upgrade. Unlike brew upgrade, that upgrades all the outdated packages, brew cask reinstall requires the name of one and only one package. This requires looping through the list returned by brew cask outdated.

A short shell script that upgrades all outdated programs installed using Homebrew Cask can look like this:

brew update
for i in $(brew cask outdated --quiet); do
    brew cask reinstall $i
done

Drawbacks

There are programs that require administrator rights to install drivers or other system components. Some of them ask for your password or for various confirmations using a graphical dialog box. brew cask itself sometimes asks for your password in the command line.

All these make upgrading the outdated programs automatically not always possible.

You may think that all these can be circumvented using sudo. However, the Homebrew developers know better and they programed the brew command to display a message and exit when it is executed as root (and this is the right way to do it.)

2 of 2
8

In 2020

axiac's response is basically perfect. Just to note that brew cask upgrade is disabled in the latest versions of Homebrew, so you should use brew upgrade --cask instead.

🌐
MacPowerUsers
talk.macpowerusers.com › tech support
Using brew update, brew upgrade, and brew cleanup when installing, uninstalling and updating packages - Tech Support - MPU Talk
February 21, 2024 - I was told by one guy that it is best to use brew update, brew upgrade and brew cleanup as often as possible. That is, that … … the most safe and clean way to install a package is brew update brew upgrade brew install foo brew cleanup … the most safe and clean way to uninstall a package is brew update brew upgrade brew uninstall --ignore-dependencies foo brew cleanup and the most safe and clean way to update a package is brew update brew upgrade foo brew cleanup Is it really so?
🌐
GitHub
gist.github.com › tfeldmann › ee7e81708d7926454867bd0a7e7b916d
Update all pip packages, brew and brew casks (macOS) and backup a list of the installed software · GitHub
echo "Update all python packages..." for line in $(pip3 list --local --format=freeze); do package=${line%%=*} $PIP install -U $package done · echo "Update pipx apps..." pipx upgrade-all pipx list > "$listsdir/pipx_list.txt" echo "Update homebrew..." brew update brew upgrade brew list > "$listsdir/brew_list.txt" echo "Update all brew casks..." brew list --cask | xargs brew upgrade --cask --greedy brew list --cask > "$listsdir/brew_cask_list.txt"
🌐
Homebrew
docs.brew.sh › Manpage
Homebrew Documentation: brew(1) – The Package Manager for Everywhere
This is a good replacement for brew update in scripts where you want the no-op case to be both possible and really fast. Fetch and reset Homebrew and all tap repositories (or any specified repository) using git(1) to their latest origin/HEAD. Note: this will destroy all your uncommitted or committed changes. Upgrade outdated, unpinned packages using the same options they were originally installed with, plus any appended brew formula options. If cask or formula are specified, upgrade only the given cask or formula (unless they are pinned; see pin, unpin).
🌐
Andrew Odendaal
andrewodendaal.com › home › articles › how to update/upgrade all homebrew packages
How to update/upgrade all Homebrew packages | Andrew Odendaal
December 11, 2021 - With this solution, you can brew update all packages and brew upgrade all packages. ... In older versions or Homebrew, you may have used casks.
🌐
GitHub
github.com › Homebrew › brew › issues › 8228
brew upgrade upgrades all casks unexpectedly · Issue #8228 · Homebrew/brew
August 6, 2020 - I was trying to upgrade all outdated packages by running brew upgrade like I usually do. Up until this version (2.4.9), brew upgrade did not upgrade all outdated casks, and I had installed many casks with the knowledge that they would NOT be upgraded by brew upgrade; in many cases because these pieces of software have their own mechanisms and channels for checking for updates ...
Author   Homebrew
🌐
Reddit
reddit.com › r/osx › brew & cask update application
r/osx on Reddit: Brew & Cask update application
April 10, 2017 -

Hi all,

Is there a way to update applications (e.g. Firefox/Slack) that has been installed via brew. Cask in particular.

I have run 'brew update' and 'brew upgrade' but I'm not sure if the app has updated?

When I run 'brew cask outdated' is show a list of older version of application, but its not clear how to 'purge' them?

When I search for the app via alfred there are loads of recent versions - I assume if I cleanup via brew/cask this will sort itself?