New in 0.1.4 See which apps you actually use

Know what's out of date on your Mac.

Patchly checks every app in /Applications against the Mac App Store, Homebrew, its Sparkle feed, or its Electron manifest, and puts a count in your menu bar. Click Update and it installs the update, verified first.

New in 0.1.4

See which apps you actually use.

The Usage tab lists every app Patchly scanned with how often you've opened it, when you last did, and how much space it takes. Sort by Most Used, Least Used, or Largest, and click any row to see the app in Finder.

All three come from what macOS already records in Spotlight; an App Size Spotlight lacks is measured from the app bundle itself. Patchly records nothing of its own and needs no Full Disk Access. When macOS has no record, a row says No usage recorded, never "never opened": updating an app clears the record.

Five ways an app can update. Patchly reads all of them.

Each app gets one Update Source, decided by what's actually inside its bundle. If an app matches more than one, the first in this list wins.

Update SourceHow Patchly knowsWhere it checksHow it updates
App Store A receipt in the bundle, Contents/_MASReceipt mas outdated Runs mas upgrade
Homebrew The bundle matches an installed cask One brew info --cask --installed call covers every cask Runs brew upgrade --cask
Electron electron-builder's app-update.yml in the bundle GitHub Releases, or the app's own latest-mac.yml Downloads and installs after verifying, or opens the app so its updater runs
Sparkle SUFeedURL in the app's Info.plist The same appcast the app's own updater reads Downloads and installs after verifying the signature, or opens the app
Custom A short, hand-maintained list. Today that's Visual Studio Code, which ships its own updater The API the app's own updater calls Opens the app so its updater runs
CLI Toolsoptional Every Homebrew formula, from brew list --formula brew info --formula --installed Runs brew upgrade

Apps that match nothing are still listed, marked as having no source. A check that fails shows a red dot and simply tries again on the next Refresh.

It verifies before it replaces anything.

Homebrew and the App Store already download, verify, and install on their own, so Patchly hands those off. For Sparkle and Electron apps, Patchly does the install itself, and every step has to pass before the next one runs.

  1. 1

    Download

    The update the app's own feed or manifest points to. Nothing else.

  2. 2

    Verify

    The download has to prove it's the real thing. What that means depends on the source, see below.

  3. 3

    Quit

    If the app is running, it's asked to quit so its bundle isn't replaced under a live process.

  4. 4

    Replace

    The old bundle is swapped for the verified one. macOS asks for App Management permission the first time.

  5. 5

    Relaunch

    The app comes back on the new version, and the list refreshes.

Sparkle What gets checked

The update's Ed25519 signature, against the public key the installed app ships with. It's the same scheme Sparkle's own updater uses, so if the app would accept it, Patchly will, and not otherwise.

Electron What gets checked

The SHA-512 from the manifest must match, codesign --verify --deep --strict must pass, and the Team ID and bundle identifier must match the app already installed. Any mismatch stops the install.

If verification fails

The row turns to Check Failed with the reason. Patchly never installs an unverified download, and never falls back to opening the app either. A failed check means don't trust it.

If there isn't enough to verify

Some apps don't publish a signature or checksum. Their button reads Open to Update: Patchly opens the app and its own updater takes over. The label says what actually happens.

Quiet by design.

A menu bar app earns its place by staying out of the way. Here's what Patchly does, and doesn't, on its own.

Install

Patchly needs macOS 26 on Apple Silicon. It's MIT-licensed and the whole thing is on GitHub.

$ brew tap mberrishdev/patchly https://github.com/mberrishdev/Patchly
$ brew trust --tap mberrishdev/patchly
$ brew install --cask patchly

The cask clears the quarantine flag for you, so Patchly opens on first launch.

Questions

What is Patchly?
Patchly is a free, open-source macOS menu bar app that checks every app installed on your Mac for updates and installs them. It scans /Applications, /Applications/Utilities, and ~/Applications, works out how each app updates (Mac App Store, Homebrew, Sparkle feed, Electron manifest, or a small custom list), checks that source, and shows a badge count of apps with updates available.
Does Patchly install updates or only report them?
Both. Every app with an update available has an Update button. Homebrew and Mac App Store apps are updated by running brew upgrade or mas upgrade. Sparkle and Electron apps are downloaded and installed by Patchly itself after verifying the download, or, when the app doesn't publish enough to verify, opened so the app's own updater runs (the button then reads Open to Update).
Which Mac apps can Patchly check?
Any app with a Mac App Store receipt, any app installed as a Homebrew cask, any app with a Sparkle SUFeedURL in its Info.plist, any Electron app built with electron-builder (it ships an app-update.yml), and a short custom list that currently covers Visual Studio Code. Optionally, Homebrew formulae (command-line tools) can be shown in the same list. Apps that match none of these are still listed, marked as having no source.
How does Patchly verify an update before installing it?
For Sparkle apps, Patchly checks the update's Ed25519 signature against the public key the installed app ships with, the same scheme Sparkle's own updater uses. For Electron apps, the download's SHA-512 must match the manifest, codesign --verify --deep --strict must pass, and the Team ID and bundle identifier must match the installed app. If any check fails the update is marked Check Failed and nothing is installed; Patchly never falls back to an unverified download.
Does Patchly track how I use my apps?
No. The Usage view shows each app's Use Count, Last Used Date, and App Size, but all three come from Spotlight metadata macOS already keeps (kMDItemUseCount, kMDItemLastUsedDate, kMDItemPhysicalSize), the same "Last opened" date Finder shows. An App Size Spotlight doesn't have is measured from the app bundle itself. Patchly records nothing of its own, needs no Full Disk Access, and never reads other apps' data. When macOS has no record, the row says No usage recorded rather than Never opened, because updating an app clears the record.
Is Patchly free?
Yes. Patchly is free and open source under the MIT license. The source code is on GitHub at github.com/mberrishdev/Patchly. There is no account, no analytics, and the only network requests are the update checks themselves.
What are the system requirements?
macOS 26 (Tahoe) on Apple Silicon. Patchly does not ship an Intel build. Checking Mac App Store apps requires the mas command-line tool; if it's missing, Patchly offers to install it with brew install mas.
How do I install Patchly?
With Homebrew: brew tap mberrishdev/patchly https://github.com/mberrishdev/Patchly, then brew trust --tap mberrishdev/patchly, then brew install --cask patchly. Or download the DMG and drag Patchly to Applications. Or clone the repository and build it in Xcode.
macOS says Patchly is damaged and can't be opened. What do I do?
Patchly is ad-hoc signed for now (no Apple Developer ID yet), so a manually installed DMG is quarantined by Gatekeeper. It isn't damaged. Run xattr -cr /Applications/Patchly.app once and it will open. The Homebrew cask does this for you automatically.
How is Patchly different from running brew outdated or checking the App Store?
brew outdated only knows about Homebrew, the App Store only knows about App Store apps, and Sparkle or Electron apps only check when you open them. Patchly checks all of those sources at once, on a schedule and after your Mac wakes, and puts one count in the menu bar so nothing is missed.