A native macOS menu bar app for Homebrew: see updates, doctor warnings, cleanups, and services at a glance, without touching the terminal.
Developer toolsSwift · AstroGitHub @dotfnOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Homebrew health monitor for macOS menu bar
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A native macOS menu bar app that turns Homebrew into something you can actually see. It watches your installation in the background — outdated packages, doctor warnings, pending cleanups, stopped services — and gives you a full dashboard for browsing, installing, and managing packages without touching the terminal.Read the full README ↗A native macOS menu bar app that turns Homebrew into something you can actually see. It watches your installation in the background — outdated packages, doctor warnings, pending cleanups, stopped services — and gives you a full dashboard for browsing, installing, and managing packages without touching the terminal.
brew upgrade with real-time streaming output, per-package or all-at-once, with cancel supportbrew doctor integration — warnings and errors surfaced inlinebrew autoremove) actions with dry-run byte estimatesbrew upgradeA full window (⌘-openable, separate from the popover) for browsing and managing your Homebrew setup:
Sources/Resources/InstallPacks.jsonSources/Resources/RecommendedTaps.jsonbrew search, with an "Add" field that accepts a bare package name, a user/repo/name package, or a user/repo tap and figures out which one you meantbrew doctor and cask inventory run on their own slower cadence (24h / 6h) piggybacked on the regular check~/Library/Application Support/BrewMenu/logs/brewmenu.log, 5 MB rotation/opt/homebrew (Apple Silicon), /usr/local (Intel), or a custom path set in Settingsbrew install --cask dotfn/tap/brewmenu
To update:
brew upgrade --cask brewmenu
scripts/install.sh installs Homebrew (if missing) and BrewMenu in one shot — useful for onboarding new users without walking them through Homebrew setup first:
curl -fsSL https://raw.githubusercontent.com/dotfn/brewmenu/main/scripts/install.sh | bash
Requires Xcode Command Line Tools or Xcode.
git clone https://github.com/dotfn/brewmenu.git
cd brewmenu
swift build
To assemble a release .app bundle (ad-hoc signed, zipped):
./scripts/build-release.sh 1.0.0
This produces build/BrewMenu-1.0.0.zip.
swift test # 299 tests, Swift Testing framework — no real brew calls
UI tests (Tests/BrewMenuUITests, XCUITest) run through a generated Xcode project instead —
see ARCHITECTURE.md for the xcodegen generate + xcodebuild command.
Pushing a v* tag runs .github/workflows/release.yml:
.app via scripts/build-release.shdotfn/homebrew-tap cask (Casks/brewmenu.rb, generated from scripts/brewmenu.rb.tpl) with the new version and sha256, if TAP_TOKEN is setSources/
BrewCore/ Separate SPM target: OutdatedPackage, Snapshot, Insight, InstalledPackage,
Tap, InstallPack, RecommendedTap, SearchResult, ResolvedPackage,
PackageDetail, TrendingPackage, PackageCategory, BrewError, L10n, etc.
No UI, no process or network code.
App/ @main, MenuBarExtra + Dashboard window scene, app icon,
notification delegate, self-upgrade relauncher, dashboard navigation
Features/
MenuBar/ Popover UI and view model
Dashboard/ Full-window UI: Home, Installed, Ecosystems, Search,
Install Packs, Recommended Taps, package detail, per-view models
Settings/ Preferences window
Onboarding/ First-run setup (detect brew, notifications permission)
Notifications/ UserNotifications wrapper (BrewNotifier)
Services/
BrewService Single point that executes brew. Actor. Conforms to BrewServicing.
EnvironmentResolver Detects brew path and shell environment
StatusChecker Periodic check scheduling (updates, doctor, services, casks)
HistoryStore Snapshot persistence (JSON, 30-day rotation)
InsightEngine Pure function: [Snapshot] -> [Insight]
HomebrewAPIClient Talks to formulae.brew.sh (trending packages, descriptions,
package detail) — the app's only network dependency, with
ETag-based conditional revalidation
InstalledPackagesCache Stale-while-revalidate cache so the Dashboard paints instantly
SettingsStore Persists AppSettings to disk
BrewLogger Rotating file logger
ProcessRunner Subprocess execution wrapper
Tests/
BrewMenuTests/ Unit tests (Swift Testing), no real brew calls — run via `swift test`
BrewMenuUITests/ XCUITest suite (launch smoke, upgrade flow, visual regression) —
run through a generated Xcode project, see ARCHITECTURE.md
scripts/
install.sh Unattended installer (Homebrew + BrewMenu)
build-release.sh Builds and zips a signed release .app
brewmenu.rb.tpl Cask template used by the release workflow
project.yml XcodeGen config for the UI-test-only Xcode project (`xcodegen generate`)
MIT