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.
- Use CountHow many times you've opened it. 400 opens
- Last Used DateThe same "Last opened" date Finder shows. 13 hours ago
- App SizeThe bundle's size on disk, measured directly when Spotlight has none. 6.07 GB
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 Source | How Patchly knows | Where it checks | How 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
Download
The update the app's own feed or manifest points to. Nothing else.
-
2
Verify
The download has to prove it's the real thing. What that means depends on the source, see below.
-
3
Quit
If the app is running, it's asked to quit so its bundle isn't replaced under a live process.
-
4
Replace
The old bundle is swapped for the verified one. macOS asks for App Management permission the first time.
-
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.
-
Opens instantlyThe dropdown shows the last results right away while a fresh Refresh runs behind it.
-
Refreshes every six hoursPick anything from one hour to a day. It also checks after your Mac wakes, but never more often than the interval you chose.
-
The badge only counts real updatesFailed checks and apps with no source never inflate it.
-
Update several at onceTick the boxes, click Update Selected, confirm once.
-
Search as you typeFilters the list without touching anything else.
-
Click a rowReveals that app in Finder.
-
Homebrew formulae tooTurn on Show CLI Tools and ripgrep, jq, and friends join the list.
-
Keeps itself currentThrough Sparkle, separately from everything else it checks.
-
No account, no analyticsThe only network calls are the update checks. Patchly never touches another app's files unless you click Update.
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.
Drag Patchly to Applications. Patchly is ad-hoc signed for now, no Apple Developer ID yet. If macOS says it's damaged, it isn't; run this once:
$ xattr -cr /Applications/Patchly.app
$ git clone https://github.com/mberrishdev/Patchly.git $ cd Patchly && open Patchly.xcodeproj
Then ⌘R in Xcode. Swift 6, SwiftUI, one dependency (Sparkle, for self-update).
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 upgradeormas 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
SUFeedURLin its Info.plist, any Electron app built with electron-builder (it ships anapp-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 --strictmust 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
mascommand-line tool; if it's missing, Patchly offers to install it withbrew install mas. - How do I install Patchly?
- With Homebrew:
brew tap mberrishdev/patchly https://github.com/mberrishdev/Patchly, thenbrew trust --tap mberrishdev/patchly, thenbrew 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.apponce and it will open. The Homebrew cask does this for you automatically. - How is Patchly different from running
brew outdatedor checking the App Store? brew outdatedonly 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.