Homebrew compares installed formulae and casks with the versions available in its current package metadata. Checking the outdated list before running upgrades shows which command-line tools or apps need attention without changing installed versions.
The default report covers packages that Homebrew would normally consider for an upgrade. --verbose keeps installed and available versions visible, while --formula and --cask separate command-line formulae from app-style casks.
Casks can need a second pass because some declare version :latest or update themselves outside Homebrew. Pinned packages also deserve a separate check before upgrade planning because Homebrew skips pinned items during normal upgrades.
Related: How to upgrade Homebrew packages
$ brew update Already up-to-date.
brew update fetches Homebrew and tap metadata. It does not upgrade installed formulae or casks by itself.
$ brew outdated --verbose
No output means Homebrew did not find outdated packages in the default formula and cask set.
$ brew outdated --formula --verbose
No output means the installed formulae are current according to the available metadata.
$ brew outdated --cask --greedy --verbose iterm2 (3.4.16) != 3.6.11 vlc (3.0.17.3) != 3.0.23 zoom (5.14.6.17822) != 7.1.0.83064
--greedy includes casks with version :latest and auto_updates true metadata that Homebrew normally leaves out of the default cask check.
$ brew outdated --cask --greedy --json=v2
{
"formulae": [],
"casks": [
{
"name": "iterm2",
"installed_versions": [
"3.4.16"
],
"current_version": "3.6.11",
"pinned": false,
"pinned_version": null
}
]
}
Use --json=v2 so the output keeps separate formulae and casks arrays.
$ brew list --pinned
No output means no Homebrew packages are currently pinned. Pinned packages are intentionally skipped by normal upgrades.
Related: How to pin a Homebrew package