https://github.com/ihazgithub/TopOff
Stop forgetting brew update && brew upgrade. A menu bar app that keeps your Homebrew packages fresh — automatic checks, one-click updates, zero terminal required.
https://github.com/ihazgithub/TopOff
brew developer-tools homebrew homebrew-cask homebrew-updater macos macos-app menu-bar-app menubar package-manager productivity swift swiftui utility
Last synced: 4 months ago
JSON representation
Stop forgetting brew update && brew upgrade. A menu bar app that keeps your Homebrew packages fresh — automatic checks, one-click updates, zero terminal required.
- Host: GitHub
- URL: https://github.com/ihazgithub/TopOff
- Owner: ihazgithub
- License: mit
- Created: 2026-01-25T19:26:43.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-02-05T04:49:59.000Z (4 months ago)
- Last Synced: 2026-02-05T17:38:07.385Z (4 months ago)
- Topics: brew, developer-tools, homebrew, homebrew-cask, homebrew-updater, macos, macos-app, menu-bar-app, menubar, package-manager, productivity, swift, swiftui, utility
- Language: Swift
- Size: 1.92 MB
- Stars: 37
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-swift-macos-apps - TopOff - commit/ihazgithub/TopOff?style=flat&label=" /> - Automatically checks Homebrew updates, with one-click upgrades and configurable check intervals. (Downloader / iOS / macOS)
README
# TopOff 🍺
Your Homebrew is running low. TopOff keeps your packages fresh from the menu bar — automatic checks, one-click refills, no terminal tab required.



## Download
**[Download TopOff v1.5.0](https://github.com/ihazgithub/TopOff/releases/latest/download/TopOff-v1.5.0.dmg)** (macOS 14+)
Or view all releases [here](https://github.com/ihazgithub/TopOff/releases).
## Why TopOff?
If you use Homebrew, you've probably forgotten to run `brew update && brew upgrade` for weeks at a time. Packages get stale, security patches wait, and when you finally remember, you're stuck watching terminal output scroll.
TopOff fixes this — it checks in the background and shows you at a glance when your system needs a refill. One click and you're up to date.
## Features
- **One-click updates** — Run `brew update && brew upgrade` from your menu bar
- **Automatic update checking** — Periodically checks for outdated packages in the background
- **Smart icon status** — Full mug when up-to-date, half-full when updates are available, animated spinner when actively updating
- **Real-time progress** — See exactly which package is being updated as it happens — click the menu bar during updates to watch live
- **Package details at a glance** — See outdated package names and version changes directly in the menu
- **Selective updates** — Update or skip individual packages
- **Greedy mode** — Optionally include apps that handle their own updates (Chrome, Slack, etc.) in both scheduled checks and upgrades
- **Auto cleanup** — Automatically runs `brew cleanup` after upgrades to free disk space
- **Admin retry for protected packages** — If a cask needs admin access, TopOff prompts for your password and retries automatically
- **Update history** — View recently updated packages with version changes
- **Configurable check interval** — Check every hour, 4 hours (default), 12 hours, 24 hours, or manually
- **Launch at login** — Always have TopOff ready
- **Automatic retry on network restore** — If the app launches without internet (e.g., at startup before WiFi connects), it automatically checks for updates once connectivity is restored
- **Update notifications** — Checks GitHub for new releases on launch and lets you know when an update is available
- **See what changed** — View upgraded packages and freed disk space in the menu
## Screenshots

The menu bar icon tells you at a glance if updates are available:
| Icon | Meaning |
|------|---------|
| Full mug | All packages are up-to-date |
| Half-full mug | Updates are available (needs a refill!) |
| Spinning arrows | Checking for updates or updating — click to see live progress |
| Checkmark | Update completed successfully |
## Installation
### Download (Recommended)
1. Download the [latest DMG](https://github.com/ihazgithub/TopOff/releases/latest/download/TopOff-v1.5.0.dmg)
2. Open the DMG and drag TopOff to your Applications folder
3. **First launch:** macOS will block the app since it's not notarized. To open it:
- Go to **System Settings → Privacy & Security**
- Scroll down and click **Open Anyway** next to the TopOff message
- You only need to do this once (and again after each update)
### Build from Source
1. Clone this repository
2. Open `TopOff/TopOff.xcodeproj` in Xcode
3. Build and run (⌘R)
### Requirements
- macOS 14.0 or later
- [Homebrew](https://brew.sh) installed
## Usage
1. Click the beer mug icon in your menu bar
2. See which packages need updating with version details
3. Choose **Update All**, **Update All (Greedy)**, or update individual packages
4. Watch the icon animate while updates run
5. Check the menu to see what was upgraded and how much disk space was freed
### Options
All preferences are available under the **Options** submenu:
- **Launch at Login** — Start TopOff when you log in
- **Auto Cleanup** — Automatically runs `brew cleanup` after upgrades (on by default). Disable to use the manual Clean Up button instead.
- **Greedy Mode** — Always check and update everything, including apps that auto-update themselves (off by default — see [Greedy Mode explained](#whats-the-difference-between-update-all-and-greedy))
- **Check Interval** — How often TopOff checks for outdated packages:
- **View Update History** — See recently updated packages with version changes
| Setting | Behavior |
|---------|----------|
| Every hour | Check every 60 minutes |
| Every 4 hours | Default setting |
| Every 12 hours | Check twice daily |
| Every 24 hours | Check once daily |
| Manual only | Only check when you click "Check for Updates" |
## What's the difference between Update All and Greedy?
Some casks (Chrome, Slack, VSCode, etc.) have built-in auto-update and are normally skipped by Homebrew. Greedy mode tells Homebrew to update them anyway.
**By default**, TopOff gives you both options:
| Button | Command | What it does |
|--------|---------|--------------|
| Update All | `brew upgrade` | Updates packages that don't auto-update themselves |
| Update All (Greedy) | `brew upgrade --greedy` | Updates everything, including apps that auto-update |
Scheduled background checks use normal mode, so those auto-updating apps won't show up as outdated.
**With Greedy Mode enabled** (in Options), TopOff switches to greedy everywhere:
- Scheduled checks use `brew outdated --greedy` so auto-updating apps appear as outdated
- The normal "Update All" button is hidden since "Update All (Greedy)" covers everything
- This is ideal if you prefer Homebrew to manage all your app updates in one place
Greedy Mode is off by default. You can toggle it anytime under **Options > Greedy Mode**.
## Privacy & Network Connections
TopOff makes only one network connection:
- **GitHub API** (`api.github.com`) — Checks for new TopOff releases on app launch
That's it. No analytics, no telemetry, no tracking.
### Why does my firewall show other connections?
If you use a firewall like Little Snitch or Lulu, you may see TopOff associated with connections to other servers (e.g., InfluxData, Google, etc.). **These connections are from Homebrew, not TopOff.**
When TopOff runs `brew update` or `brew upgrade`, it spawns Homebrew as a child process. Firewalls often attribute child process network activity to the parent app. These connections may come from:
- Homebrew's own analytics (can be disabled with `brew analytics off`)
- Specific formulas or casks being updated that have telemetry
- Package download servers
You can safely allow or deny these connections based on your preferences — denying them won't affect TopOff's functionality.
## License
MIT License - feel free to use, modify, and distribute.
## Credits
Created by **Thomas Haslam**