Homebrew is usually one of the first tools I install on a new Mac. Its command-line interface is fast, reliable, and familiar. But over time, a Homebrew installation becomes more than a short list of packages.
There are formulae, casks, taps, background services, outdated dependencies, cleanup opportunities, diagnostics, and Brewfiles.
The commands exist, but answering simple questions can still require several of them:
What is installed?
Which services are running?
What needs an update?
What depends on this package?
How much space would cleanup recover?
I wanted to see the state of my entire Homebrew setup without scrolling through terminal output or remembering a different command for every task.
So I built Brewwery.
Homebrew, made visual with Brewwery
Brewwery is an open-source macOS app for managing Homebrew through one native interface.
It covers the workflows I use regularly:
- view installed formulae and casks;
- discover and search for new packages;
- save favorites;
- install, uninstall, and upgrade packages;
- inspect dependencies and installed dependents;
- filter Homebrew leaves;
- add and remove taps;
- start, stop, and restart services;
- preview and run cleanup;
- run
brew doctor; - export a reproducible Brewfile;
- and review local operation history.
Large package lists are virtualized and keyboard-friendly, so they remain responsive even when a Mac has accumulated a substantial Homebrew setup.
The goal is not to replace Homebrew. Brewwery uses the existing Homebrew installation on your Mac and gives its state and operations a clearer interface.
Version 1.0 is completely native
The first release-candidate versions of Brewwery used Electron, Node, and a Rust backend.
Brewwery 1.0 is a complete rewrite in:
- Swift 6;
- SwiftUI;
- AppKit;
- and Foundation.
There is no Electron, Node, Rust runtime, WebView, or JavaScript bridge in the new app.
The rewrite keeps the same product rather than reducing it to a smaller “native edition”: the same screens, Homebrew operations, validation rules, visual language, and safety model are still there.
The result starts faster, uses less memory, and behaves more like the macOS utility it was always intended to be.
Brewwery 1.0 also supports automatic application updates through Sparkle. These are intentionally separate from Homebrew package updates—the app updating itself should never be confused with changing the software managed by Homebrew.
A GUI should not become an arbitrary command runner
The most important part of a Homebrew GUI is not the package grid or the install button.
It is the boundary between that button and the system.
Brewwery’s interface cannot construct an arbitrary command line. Every supported operation is represented by a closed HomebrewCommand type.
The execution path looks like this:
SwiftUI view
→ feature model
→ HomebrewClient
→ validated HomebrewCommand
→ HomebrewRunner
→ ChildProcess
→ brew
Dynamic values such as package, cask, service, and tap names are validated before an argument array can be created.
Commands are launched directly with posix_spawn. No shell is involved, so user-controlled values are never interpolated into a shell command.
Brewwery also follows a few strict rules:
- it never runs arbitrary commands;
- it never uses
sudo; - mutating operations require explicit confirmation;
- cleanup requires a preview before confirmation;
- only one mutating operation can run at a time;
- and operations have fixed safety timeouts.
When an active operation is cancelled, Brewwery terminates its process group—not only the main brew process. This also stops helper processes such as git or curl that Homebrew may have started.
Read-only checks stay read-only
Background activity deserves the same care as visible buttons.
For example, Brewwery can check which packages are outdated and show the count in the Dock. That background check runs only:
brew outdated --json=v2
It does not silently run brew update, install anything, upgrade anything, or clean the system.
Actions that may change the Homebrew installation always remain visible and confirmation-gated.
This distinction matters because a friendly interface should make system operations easier to understand—not make them easier to trigger accidentally.
Local-first, without an account
Brewwery does not require:
- an account;
- authentication;
- cloud sync;
- a subscription;
- or a telemetry opt-in screen.
There is no telemetry.
Favorites, settings, and operation history stay on the Mac. Brewwery itself does not send data to an external service. Homebrew may still access the network when it downloads package metadata or software, but Brewwery does not add its own cloud layer on top.
The app is also open source under the MIT License, so its command handling and security boundaries can be inspected directly.
Testing Homebrew without changing the developer’s Mac
Testing a package manager interface has an obvious risk: a careless test suite can modify the machine running it.
Brewwery separates its tests into several layers.
Core and application tests use a scripted brew double. They cover parsers, validation, command execution, cancellation, operation history, navigation, accessibility, and rendering without touching the real Homebrew installation.
Visual tests can render every screen in light and dark mode for review.
There is also an opt-in live test suite for real Homebrew integration. It is never enabled by default because it deliberately installs and removes test packages, controls services, and manages a test tap.
This separation lets the normal test suite remain fast and safe while still providing a deliberate path for end-to-end verification.
The terminal is still there when you need it
A visual interface should not hide useful information.
Brewwery shows live progress for installs, upgrades, service actions, and cleanup. Successful operations can close automatically, while failures and cancellations stay visible so their output can be inspected.
For quick daily work, the interface provides clear actions and status. When something goes wrong, the underlying Homebrew output is still available.
That balance is important: convenience when everything works, detail when it does not.
Try Brewwery
Brewwery supports Apple Silicon and Intel Macs running macOS 14 Sonoma or later.
You can:
If you use Homebrew regularly, I would love to hear which command or workflow you would most like to manage visually.
Brewwery. Homebrew, made visual.



Top comments (2)
I like the concept, even coming from the CLI world; it just needs some adjustments, like the badge count. It always shows a number, and when you open the app, there's no place to know from where that count is coming from.
Hi Douglas,
Thanks, fair point. The badge comes from a background check that isn't wired to the rest of the app, so the number has no home in the UI and goes stale after you upgrade from inside Brewwery. 1.0.1 will show the count next to Updates in the sidebar and status bar, keep it in sync instantly, say on the Updates page where it comes from and when it was checked, and let you turn the Dock badge off.