MacAppUpdate

Update every Mac app
in one place.

MacAppUpdate scans /Applications, matches every app to Homebrew, Sparkle, or the App Store, and installs updates with a strict Team-ID safety check. Local-first, aggregate telemetry only.

Download alpha Contact

macOS 14+ · Universal (Apple Silicon & Intel) · Self-signed alpha, notarization next

MacAppUpdate ↻ Rescan Outdated only ▾ Update Checked (6) Major (2) Minor (5) Bug fix (7) Name Installed Latest Source Size Status Rectangle com.knollsoft.Rectangle 0.84 0.86 Homebrew 4.6 MB Update available IINA com.colliderli.iina 1.3.4 1.3.5 Sparkle 72 MB Downloading 51 / 72 MB Google Drive com.google.drivefs · pkg 128.0 129.0.1 Homebrew 140 MB Needs admin iTerm2 com.googlecode.iterm2 3.5.0 3.5.2 Sparkle 64 MB ⛔ SEC_TEAMID_MISMATCH Spark com.readdle.smartemail-Mac · MAS 2.11.66 App Store ℹ Informational 5 shown · 14 outdated · 61 hidden by filter Last scan: 3 min ago

Built for people who read logs.

Every source, one table

Homebrew Cask, Sparkle appcasts, Mac App Store, .pkg installers — all routed through one classifier. See exactly which source resolved each app.

Refuses to install compromised updates

Every download is verified: SHA-256 match, codesign valid, and — the one nobody else does — Team ID identical to the currently installed copy. Server compromises abort loudly.

Atomic swap, real rollback

FileManager.replaceItem with a same-volume staging dir. Interrupt at any point and the app on disk stays working. Old version kept for 7 days.

Nothing you didn't ask for

No account. No bundle IDs sent by default. No auto-install without your click. All events grep-able as JSON Lines under ~/.local/state.

Filters that respect your workflow

"Outdated & idle" filter — batch update everything you're not currently using. Bucket chips split updates into major / minor / patch.

Falls back to Homebrew gracefully

Casks that need custom install scripts hand off to brew install --cask with one click. Best of both worlds.

Compared to what you do today.

MacAppUpdate Manual clicking brew upgrade --cask App Store only
Homebrew casks
Sparkle appcastsmanual
App Store appsreports
.pkg installers✓ (with admin)manualpartial
Team-ID safety checkApple
Atomic installvaries
Runs on your Mac, no account

FAQ

Do you send my list of installed apps anywhere?

No, not by default. The list is stored locally as JSON Lines. Bundle IDs go to Sentry (only) when an update fails, so we can fix the underlying bug — you can turn that off in Settings > Advanced. Aggregate counts (outcome, source, error class) go to TelemetryDeck, always anonymous.

Why not just use brew upgrade --cask?

brew handles ~70% of Mac apps and does it well. What it doesn't do: check whether the download's Team ID matches your installed copy (i.e. detect a compromised CDN), fall back to Sparkle appcasts for the 20% brew doesn't cover, or refuse safely when a bundle ID unexpectedly changes. We use brew as a fallback and add the safety layer.

Why can't you update App Store apps?

Apple doesn't allow it: MAS binaries only download from Apple's CDN with device attestation, the app is root-owned, and overwriting the bundle breaks the App Store receipt (kills in-app purchases and subscriptions). We surface the outstanding update and one-click into the App Store's Updates page. If you install the free mas CLI, we can trigger the upgrade directly.

What does "Team ID mismatch" mean if I see one?

The downloaded update is signed by a different Apple Developer than the copy already on your Mac. This is either (a) the vendor legitimately changed their signing identity — rare — or (b) the update server was compromised. We abort the install unconditionally in both cases. You can grant an exception per-app in overrides.json if it's (a).

Does it need admin privileges?

Only for apps whose bundle in /Applications is owned by root (usually pkg-installed: Google Drive, Nextcloud, Microsoft apps). For those, macOS shows its standard admin password prompt once per install. Regular DMG-installed apps update without any prompt.

How much does it cost?

Alpha is free. Post-1.0 pricing will be announced separately — early adopters get grandfathered.