A macOS CLI tool that discovers every installed application, SDK, runtime, developer tool, and library on your Mac and checks each one for available updates. All state is in-memory -- every run re-scans and re-checks from scratch.
The tool is non-destructive: it reports what is outdated but never performs updates itself.
- Scans GUI applications from
/Applicationsand~/Applications - Discovers Homebrew formulas and casks, App Store apps
- Checks developer SDKs and runtimes: .NET, Node.js, Go, Xcode
- Inspects globally installed tools: dotnet global tools, npm -g packages, Go binaries
- Detects IDE extensions: VS Code, JetBrains plugins
- Examines Docker images for digest changes
- Identifies Electron apps and resolves their GitHub or generic update feeds
- Parses Sparkle appcasts for indie macOS apps
- Reports macOS Software Update items
- Streams results live as checks complete
The tool uses a three-stage concurrent pipeline:
- Discovery — all scanners run in parallel, streaming results through a bounded channel. Update-source matching ( e.g. Homebrew cask/formula resolution) happens inside each scanner.
- Update Check — discovered apps are grouped back by their owning scanner; all scanners check concurrently, and results stream to a live renderer as each completes.
- Security Audit — all auditable packages are batch-queried against OSV.dev for known CVEs, then enriched with patched-version info from the GitHub Advisory Database.
- macOS 13 or later
apps # scan + check for updates (show only outdated)
apps --all | -a # show all apps (outdated + up-to-date)
apps --kind | -k <kind> # show all apps of a specific kind
apps --dry-run | -d # scan only -- discover apps without checking for updates
apps --pin | -p <name> # pin a package at its current version (suppresses updates)
apps --unpin <name> # remove a pin from a package
apps --install # install "apps" to /usr/local/bin so it can be run from anywhere
apps --upgrade | -u # update "apps" to the latest version if a newer one is available
apps --version | -v # show the current version of apps
| Value | What it shows |
|---|---|
app |
GUI .app bundles (including Electron apps) |
package |
Globally installed tools, runtimes, Homebrew formulas/casks, Docker |
service |
Background daemons (LaunchAgents/Daemons, Login Items) |
ext |
IDE extensions and editor plugins (VS Code, JetBrains) |
| Component | What it covers |
|---|---|
| Audit | CVE scanning via OSV.dev + GitHub Advisory Database |
| Chrome | Chrome extensions |
| Docker | Docker images (local digest vs Hub) |
| Dotnet | .NET SDKs, runtimes, NuGet global tools |
| Go | Go binaries and tools in GOPATH/bin |
| JetBrains | JetBrains IDE plugins (IDEA, Rider, WebStorm, etc.) |
| MacOs | GUI .app bundles, Homebrew formulas/casks, App Store apps, Sparkle & Electron apps, macOS Software Update, Xcode, Safari extensions |
| Node | Node.js, npm global packages |
| VsCode | VS Code extensions (marketplace) |
- .NET 10 SDK (for building from source)
git clone https://github.com/iamr8/apps.git
cd apps
dotnet publish apps/apps.csproj -c Release -r osx-arm64 -o publishFor Intel Macs, use -r osx-x64 instead.
The self-contained, trimmed, AOT-compiled binary will be at publish/apps.
To make it available system-wide:
sudo cp publish/apps /usr/local/bin/appsNow you can run apps from any directory.
This project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License.
You are free to use, share, and adapt this software for non-commercial purposes only.