Skip to content

Stop forgetting brew update && brew upgrade. A menu bar app that keeps your Homebrew packages fresh — automatic checks, one-click updates, zero terminal required.

License

Notifications You must be signed in to change notification settings

ihazgithub/TopOff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TopOff 🍺

Your Homebrew is running low. TopOff keeps your packages fresh from the menu bar — automatic checks, one-click refills, no terminal tab required.

macOS 14+ Swift License

Download

Download TopOff v1.5.0 (macOS 14+)

Or view all releases here.

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

TopOff Demo

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
  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 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)
  • 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

About

Stop forgetting brew update && brew upgrade. A menu bar app that keeps your Homebrew packages fresh — automatic checks, one-click updates, zero terminal required.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Contributors 2

  •  
  •