Brewery

A native Homebrew client that shows you what depends on what

  • Swift
  • SwiftUI
  • macOS

A SwiftUI app for macOS. Browse the catalog like an app store, see the dependency graph before you uninstall anything, and confirm every mutating command in full before it runs.

Brewery is not signed or notarized yet. On first launch macOS will refuse to open it: open it from Finder with Control-click, then Open, and confirm once. Homebrew itself must already be installed.

The problem

brew uninstall tells you what you asked for, not what breaks. Brewery builds the dependent graph in memory from Homebrew's own JSON and puts "what breaks if this goes" directly beside the Uninstall button, which is the only place that answer is any use.

What it does

The catalog as shelves

Every official formula and cask laid out as category shelves with real app icons, ranked by Homebrew's own install analytics for the last year. Casks show the icon of the app they install; formulae and fonts get a glyph.

Dependents, not just dependencies

The graph is built in memory from Homebrew's JSON and traversed both ways, so the question that actually matters before an uninstall is answered on the same screen as the button that performs it.

Nothing runs unconfirmed

Every mutating command is shown in full and confirmed before it executes, and the command log is kept. An app that wraps a shell tool should never be vaguer about what it ran than the shell would be.

Still opens when the network does not

The catalog is cached locally, so a failed refresh degrades the data rather than the app. Diagnostics runs Homebrew's own health checks when you want them.

The graph is built once, then walked both ways

Both adjacency maps are built at load from a single "brew info --json=v2 --installed" call, so asking what depends on a package costs a dictionary hit rather than another shell out. Every entry is clickable, so the graph walks in either direction.

Nothing runs until you read it

Install, upgrade, uninstall and cleanup all stop at a sheet that prints the exact brew command. It is a rule of the app rather than a preference you can switch off.

Logic and interface are separate targets

The dependency graph and the JSON parsing live in a headless target, which is why the whole suite runs without launching any UI at all.

45 tests in 0.044s, no UI

The three pages

Brewery's Browse page: a Most Installed carousel with app icons, a grid of category tiles such as AI, Developer Tools and Security, and Top Charts for casks and formulae
Browse: a Most Installed carousel, category tiles, and Top Charts drawn from Homebrew's install analytics.
Brewery's Library page with cmake selected: installed casks as cards, formulae as a list with their pending versions, and a detail pane showing versions, tap, caveats, dependencies and dependents
Library: what is installed, outdated first, with dependents beside the Uninstall button.
A confirmation sheet titled Uninstall expat, showing the exact command brew uninstall expat with Cancel and Run Command buttons
Every mutating command is shown in full and confirmed before it runs.
Brewery's Diagnostics page showing Homebrew version and configuration above the command log
Diagnostics: Homebrew's own health checks, plus the command log.
Release
v1.0.027 commits since 1 June
Source
5,499lines of Swift, 32 files
Tests
45defined, 820 lines
Requires
macOSwith Homebrew installed

Measured from the repository on 22 September 2026