{"id":51671145,"url":"https://github.com/mzored/update-all-mac","last_synced_at":"2026-07-15T00:41:48.307Z","repository":{"id":366922993,"uuid":"1219540471","full_name":"mzored/update-all-mac","owner":"mzored","description":"One-click macOS updater for Homebrew, Mac App Store apps, npm, pipx, uv, and Oh My Zsh.","archived":false,"fork":false,"pushed_at":"2026-07-01T02:02:41.000Z","size":50,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-01T04:06:12.217Z","etag":null,"topics":["bash","homebrew","macos","shell-script","updater"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mzored.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-24T01:26:35.000Z","updated_at":"2026-07-01T02:02:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mzored/update-all-mac","commit_stats":null,"previous_names":["mzored/update-all-mac"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/mzored/update-all-mac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzored%2Fupdate-all-mac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzored%2Fupdate-all-mac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzored%2Fupdate-all-mac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzored%2Fupdate-all-mac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mzored","download_url":"https://codeload.github.com/mzored/update-all-mac/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzored%2Fupdate-all-mac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35485403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-14T02:00:06.603Z","response_time":114,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","homebrew","macos","shell-script","updater"],"created_at":"2026-07-15T00:41:47.730Z","updated_at":"2026-07-15T00:41:48.301Z","avatar_url":"https://github.com/mzored.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# update-all-mac\n\nOne-command macOS updater for Homebrew formulae and casks, Mac App Store apps, global npm packages, Oh My Zsh, pipx packages, uv tools, Rust/cargo, mise, asdf, gcloud components, and optional macOS update checks.\n\nThe 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.\n\n## What It Updates\n\n- Homebrew formulae and casks\n- Global npm packages\n- Mac App Store apps through [`mas`](https://github.com/mas-cli/mas)\n- Oh My Zsh\n- pipx packages and shared pipx libraries\n- uv tools and, when possible, uv itself\n- Rust toolchains (`rustup`) and globally installed crates (`cargo install-update`)\n- mise-managed tools (`mise upgrade`)\n- asdf plugins (`asdf plugin update --all`)\n- Google Cloud CLI components (`gcloud components update`)\n- Optional macOS update check through `softwareupdate -l`\n\nEvery step self-detects its tool and is skipped when the tool is absent, so the same\ncommand works on any Mac. The script does not install package managers for you, except\nthat `--install-homebrew` will bootstrap Homebrew on a fresh Mac when you opt in.\n\n## Requirements\n\n- macOS\n- Bash available at `/bin/bash` (included with macOS)\n- Optional tools depending on what you want to update: `brew`, `npm`, `mas`, `git`, `python3`/`pip3`, `pipx`, `uv`, `rustup`/`cargo`, `mise`, `asdf`, and `gcloud`\n\n## Install\n\nRecommended Homebrew install:\n\n```bash\nbrew tap mzored/update-all-mac https://github.com/mzored/update-all-mac\nbrew install update-all-mac\n```\n\nThen run:\n\n```bash\nupdate-all-mac\n```\n\nAlternative install from Git:\n\n```bash\ngit clone https://github.com/mzored/update-all-mac.git\ncd update-all-mac\nchmod +x update-all-mac.command\n./update-all-mac.command\n```\n\nAlternative direct script download:\n\n```bash\ncurl -fsSL -o update-all-mac.command https://raw.githubusercontent.com/mzored/update-all-mac/main/update-all-mac.command\nchmod +x update-all-mac.command\n./update-all-mac.command\n```\n\nAvoid piping the network directly into a shell. Download the file first, review it, then run it.\n\n## Migrating From the Old Tap\n\nEarlier versions used a separate Homebrew tap repository. If you installed with the old tap, move to the single-repository tap:\n\n```bash\nbrew uninstall update-all-mac\nbrew untap mzored/tap\nbrew tap mzored/update-all-mac https://github.com/mzored/update-all-mac\nbrew install update-all-mac\n```\n\nThe source code and Homebrew formula now live in this repository.\n\n## macOS Gatekeeper and Browser Downloads\n\nIf 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.\n\nUse 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:\n\n```bash\nxattr -d com.apple.quarantine update-all-mac.command\n```\n\nAfter that, run it from Terminal:\n\n```bash\n./update-all-mac.command\n```\n\n## Usage\n\nRun all default update steps:\n\n```bash\nupdate-all-mac\n```\n\nIf you installed from Git or downloaded the script directly, use:\n\n```bash\n./update-all-mac.command\n```\n\nShow help:\n\n```bash\nupdate-all-mac --help\n```\n\nList step IDs:\n\n```bash\nupdate-all-mac --list-steps\n```\n\nReport which tools are detected on this Mac (and their versions):\n\n```bash\nupdate-all-mac --doctor\n```\n\nPreview what would be updated without changing anything:\n\n```bash\nupdate-all-mac --dry-run\n```\n\nBootstrap a fresh Mac by installing Homebrew if it is missing:\n\n```bash\nupdate-all-mac --install-homebrew\n```\n\nRun only selected steps:\n\n```bash\nupdate-all-mac --only homebrew,mas\n```\n\nSkip selected steps:\n\n```bash\nupdate-all-mac --skip npm,pip\n```\n\nCheck macOS updates too:\n\n```bash\nupdate-all-mac --macos\n```\n\nUseful non-interactive run:\n\n```bash\nUPDATE_ALL_NO_PAUSE=1 update-all-mac --no-color\n```\n\n## Options\n\n```text\n--only \u003cid1,id2\u003e       Run only selected steps\n--skip \u003cid1,id2\u003e       Skip selected steps\n--fail-fast            Stop after first failure\n--strict               Exit non-zero on warnings as well as failures\n--exit-zero            Always exit 0\n--no-color             Disable ANSI colors in stdout\n--macos                Add macOS updates check step (softwareupdate -l)\n--greedy-casks         Include Homebrew casks marked auto_updates/latest\n--force-cask-repair    Allow forced cask uninstall+install fallback\n--mas-accurate         Use slower, more accurate mas outdated detection\n--parallel             Run npm, pipx, and Mac App Store steps concurrently\n--dry-run              Show what would be updated without changing anything\n--install-homebrew     Install Homebrew if it is missing (bootstrap a Mac)\n--log-file \u003cpath\u003e      Override log file path\n--lock-dir \u003cpath\u003e      Override lock directory path\n--list-steps           Print available step IDs and exit\n--doctor               Report detected tools/versions and exit\n-h, --help             Show help and exit\n```\n\nThe `--parallel` flag runs the independent npm, pipx, and Mac App Store steps at the\nsame time as the heavier Homebrew step, which can shorten total run time. Homebrew, pip,\nand uv always run sequentially because they share state. With `--parallel`, the npm, pipx,\nand Mac App Store blocks are printed together after the sequential steps so the log stays\nreadable, and `--fail-fast` only stops the sequential steps.\n\nStep IDs:\n\n```text\nhomebrew   Homebrew\nnpm        npm\nmas        Mac App Store\nohmyzsh    Oh My Zsh\npip        pip\npipx       pipx\nuv         uv\nrust       Rust (rustup + cargo)\nmise       mise\nasdf       asdf\ngcloud     gcloud\nmacos      macOS (only when --macos is used)\n```\n\n`--dry-run` runs each step's read-only detection and prints what it *would* update,\nwithout refreshing the Homebrew catalog or changing anything. `--doctor` prints the\ntools detected on the current Mac and their versions, then exits. `--install-homebrew`\ninstalls Homebrew non-interactively when it is missing (opt-in bootstrap for a new Mac).\n\n## Environment Variables\n\nEvery CLI option has an environment-friendly path for automation:\n\n```text\nUPDATE_ALL_ONLY=homebrew,mas\nUPDATE_ALL_SKIP=npm,pip\nUPDATE_ALL_EXIT_ZERO=1\nUPDATE_ALL_STRICT=1\nUPDATE_ALL_FAIL_FAST=1\nUPDATE_ALL_NO_COLOR=1\nUPDATE_ALL_MACOS=1\nUPDATE_ALL_HOMEBREW_GREEDY_CASKS=1\nUPDATE_ALL_FORCE_CASK_REPAIR=1\nUPDATE_ALL_PIPX_INCLUDE_INJECTED=0\nUPDATE_ALL_MAS_ACCURATE=1\nUPDATE_ALL_PARALLEL=1\nUPDATE_ALL_DRY_RUN=1\nUPDATE_ALL_INSTALL_HOMEBREW=1\nUPDATE_ALL_LOG_FILE=/path/to/update-all-mac.log\nUPDATE_ALL_LOG_MAX_BYTES=1048576\nUPDATE_ALL_NET_TIMEOUT=600\nUPDATE_ALL_LOCK_DIR=/tmp/update-all-mac.lock\nUPDATE_ALL_NO_PAUSE=1\n```\n\n`UPDATE_ALL_NET_TIMEOUT` caps how long the npm step may run (in seconds) when `gtimeout`\nor `timeout` is available, so a stuck download cannot hang the whole run.\n\n## Logs and Locking\n\nBy default, logs are written to:\n\n```text\n~/Library/Logs/update-all-mac.log\n```\n\nEach step's full command output is captured in the log, so a failed upgrade can be\ndiagnosed after the fact. When the log grows past `UPDATE_ALL_LOG_MAX_BYTES` (1 MiB by\ndefault), it is rotated once to `update-all-mac.log.1` before the next run starts.\n\nA lock directory prevents concurrent runs:\n\n```text\n/tmp/update-all-mac.lock\n```\n\nIf a previous run crashed, the script detects stale locks and removes them when safe.\n\n## Safety Notes\n\n- Review scripts before running them from the internet.\n- Some updates can close, replace, or relaunch apps. The script warns when Homebrew cask apps appear to be running.\n- `--force-cask-repair` can uninstall and reinstall a cask as a recovery fallback. Use it only when you understand the risk.\n- The macOS step checks for system updates but does not install them.\n- A signed and notarized `.app` or `.pkg` would be required for the cleanest double-click Finder experience. This repository currently distributes a CLI script.\n\n## Troubleshooting\n\nIf double-clicking does nothing, run from Terminal to see output:\n\n```bash\n./update-all-mac.command --no-color\n```\n\nIf macOS blocks a browser-downloaded script, review the file and remove quarantine:\n\n```bash\nxattr -d com.apple.quarantine update-all-mac.command\n```\n\nIf `mas` cannot see updates, make sure App Store apps are indexed by Spotlight and that you are signed in to the App Store.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmzored%2Fupdate-all-mac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmzored%2Fupdate-all-mac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmzored%2Fupdate-all-mac/lists"}