Skip to content

mzored/update-all-mac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

update-all-mac

One-command macOS updater for Homebrew formulae and casks, Mac App Store apps, global npm packages, Oh My Zsh, pipx packages, uv tools, and optional macOS update checks.

The recommended installation path is Homebrew. It avoids the common macOS Gatekeeper friction that happens when unsigned .command files are downloaded through a browser and opened from Finder.

What It Updates

  • Homebrew formulae and casks
  • Global npm packages
  • Mac App Store apps through mas
  • Oh My Zsh
  • pipx packages and shared pipx libraries
  • uv tools and, when possible, uv itself
  • Optional macOS update check through softwareupdate -l

Missing tools are skipped. The script does not install package managers for you.

Requirements

  • macOS
  • Bash available at /bin/bash (included with macOS)
  • Optional tools depending on what you want to update: brew, npm, mas, git, python3/pip3, pipx, and uv

Install

Recommended Homebrew install:

brew tap mzored/update-all-mac https://github.com/mzored/update-all-mac
brew install update-all-mac

Then run:

update-all-mac

Alternative install from Git:

git clone https://github.com/mzored/update-all-mac.git
cd update-all-mac
chmod +x update-all-mac.command
./update-all-mac.command

Alternative direct script download:

curl -fsSL -o update-all-mac.command https://raw.githubusercontent.com/mzored/update-all-mac/main/update-all-mac.command
chmod +x update-all-mac.command
./update-all-mac.command

Avoid piping the network directly into a shell. Download the file first, review it, then run it.

Migrating From the Old Tap

Earlier versions used a separate Homebrew tap repository. If you installed with the old tap, move to the single-repository tap:

brew uninstall update-all-mac
brew untap mzored/tap
brew tap mzored/update-all-mac https://github.com/mzored/update-all-mac
brew install update-all-mac

The source code and Homebrew formula now live in this repository.

macOS Gatekeeper and Browser Downloads

If you use GitHub's Download ZIP button or download update-all-mac.command through a browser, macOS may attach a quarantine marker. Because this project ships a shell script rather than a signed and notarized macOS app, double-clicking the downloaded .command file in Finder can show a Gatekeeper warning.

Use Homebrew, git clone, or the Terminal curl -o flow above when possible. If you intentionally downloaded the script through a browser, review it first and then remove the quarantine marker:

xattr -d com.apple.quarantine update-all-mac.command

After that, run it from Terminal:

./update-all-mac.command

Usage

Run all default update steps:

update-all-mac

If you installed from Git or downloaded the script directly, use:

./update-all-mac.command

Show help:

update-all-mac --help

List step IDs:

update-all-mac --list-steps

Run only selected steps:

update-all-mac --only homebrew,mas

Skip selected steps:

update-all-mac --skip npm,pip

Check macOS updates too:

update-all-mac --macos

Useful non-interactive run:

UPDATE_ALL_NO_PAUSE=1 update-all-mac --no-color

Options

--only <id1,id2>       Run only selected steps
--skip <id1,id2>       Skip selected steps
--fail-fast            Stop after first failure
--strict               Exit non-zero on warnings as well as failures
--exit-zero            Always exit 0
--no-color             Disable ANSI colors in stdout
--macos                Add macOS updates check step (softwareupdate -l)
--greedy-casks         Include Homebrew casks marked auto_updates/latest
--force-cask-repair    Allow forced cask uninstall+install fallback
--mas-accurate         Use slower, more accurate mas outdated detection
--log-file <path>      Override log file path
--lock-dir <path>      Override lock directory path
--list-steps           Print available step IDs and exit
-h, --help             Show help and exit

Step IDs:

homebrew   Homebrew
npm        npm
mas        Mac App Store
ohmyzsh    Oh My Zsh
pip        pip
pipx       pipx
uv         uv
macos      macOS (only when --macos is used)

Environment Variables

Every CLI option has an environment-friendly path for automation:

UPDATE_ALL_ONLY=homebrew,mas
UPDATE_ALL_SKIP=npm,pip
UPDATE_ALL_EXIT_ZERO=1
UPDATE_ALL_STRICT=1
UPDATE_ALL_FAIL_FAST=1
UPDATE_ALL_NO_COLOR=1
UPDATE_ALL_MACOS=1
UPDATE_ALL_HOMEBREW_GREEDY_CASKS=1
UPDATE_ALL_FORCE_CASK_REPAIR=1
UPDATE_ALL_PIPX_INCLUDE_INJECTED=0
UPDATE_ALL_MAS_ACCURATE=1
UPDATE_ALL_LOG_FILE=/path/to/update-all-mac.log
UPDATE_ALL_LOCK_DIR=/tmp/update-all-mac.lock
UPDATE_ALL_NO_PAUSE=1

Logs and Locking

By default, logs are written to:

~/Library/Logs/update-all-mac.log

A lock directory prevents concurrent runs:

/tmp/update-all-mac.lock

If a previous run crashed, the script detects stale locks and removes them when safe.

Safety Notes

  • Review scripts before running them from the internet.
  • Some updates can close, replace, or relaunch apps. The script warns when Homebrew cask apps appear to be running.
  • --force-cask-repair can uninstall and reinstall a cask as a recovery fallback. Use it only when you understand the risk.
  • The macOS step checks for system updates but does not install them.
  • A signed and notarized .app or .pkg would be required for the cleanest double-click Finder experience. This repository currently distributes a CLI script.

Troubleshooting

If double-clicking does nothing, run from Terminal to see output:

./update-all-mac.command --no-color

If macOS blocks a browser-downloaded script, review the file and remove quarantine:

xattr -d com.apple.quarantine update-all-mac.command

If mas cannot see updates, make sure App Store apps are indexed by Spotlight and that you are signed in to the App Store.

License

MIT. See LICENSE.

About

One-click macOS updater for Homebrew, Mac App Store apps, npm, pipx, uv, and Oh My Zsh.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors