Homebrew is the standard package manager on macOS. brew-browser gives it a real native GUI.
Homebrew is the standard package manager on macOS. brew-browser gives it a real native GUI.
A native macOS GUI for Homebrew — shipped in two builds. A small, fast desktop app for browsing, searching, installing, and snapshotting Homebrew packages. Full source, MIT-licensed, no telemetry, no accounts.
Brew Browser comes in two builds that share one design and one data contract:
Same features, same brew integration, same privacy posture — see Two builds below.
Tauri build (macOS 13+ · Linux)
Native build (Swift / SwiftUI · macOS 26)
Bundles — capability-gated one-click package stacks, in both builds
Homebrew is the standard package manager on macOS. brew-browser gives it a real native GUI: browse what you have installed, search the full catalog, install / uninstall / upgrade with live output, snapshot your setup to a Brewfile and restore it on a new Mac. Trending packages come from Homebrew's published analytics. The whole thing is a thin, respectful frontend over the brew CLI itself.
formulae.brew.sh analytics, with 30 / 90 / 365-day windows, sortable columns, a velocity index (recent-month vs prior-11-month adoption signal), and opt-in per-package install-trend sparklinesbrew bundle mechanism; "set up a new Mac" in one clickbrew servicesbrew vulns subcommand (OSV.dev), with optional GHSA enrichment when you're signed into GitHub. Inline severity dots, per-package Security card with "Upgrade to fix" wired to the existing upgrade pipeline. Off by default; one-click installer for brew vulns itself when you opt inbrew invocation streams live into a resizable bottom drawer with full stdout/stderr; session history persists across launches (last 200 jobs, capped lines)A global Cmd+K command palette covers the verbs. Cmd+0 returns to the Dashboard; Cmd+1…7 jumps between sections (Bundles is ⌘7). Cmd+, opens Settings. Click the brand to return home. Window dragging works from any panel header (native macOS overlay title bar + NSVisualEffectView vibrancy).
brew CLIBrew Browser is maintained as two implementations of the same app, kept in feature + data-contract parity. They are not competitors — they have different, non-overlapping jobs, because SwiftUI does not run on Linux and Liquid Glass is macOS-26-only.
| Tauri build | Native build | |
|---|---|---|
| Stack | Tauri 2 · SvelteKit · Rust | Swift 6 · SwiftUI · Liquid Glass |
| Runs on | macOS 13+ and Linux | macOS 26 (Tahoe) |
| Role | the shipping cross-platform app | the genuinely-native macOS flagship |
| Source | src/ (frontend) + src-tauri/ (Rust) |
native/ (Swift Package) |
| Updates | in-app updater (minisign) | Sparkle 2 (ed25519) |
| Status | shipping, signed + notarized | shipping, signed + notarized |
Both read the same settings.json schema, the same bundled categories.json /
enrichment.json, the same brew / brew vulns invocations, and the same
trending + enrichment endpoints. A change to a shared data contract lands in both.
The memory bank (memory-bank/) is the single canonical spec for both. Rationale
and parity rules: memory-bank/decisions.md (2026-06-01 "keep both" ADR).
Both macOS builds ship on the latest release, signed + notarized — no Gatekeeper warning.
| Your machine | Grab |
|---|---|
| Apple Silicon (M-series), macOS 13+ | brew-browser__aarch64.dmg |
| Intel, macOS 13+ | brew-browser__x64.dmg |
| macOS 26 (Tahoe), native build | BrewBrowser--arm64.dmg (M-series) or BrewBrowser--x86_64.dmg (Intel) |
| Linux (Ubuntu 22.04+ era) | .deb / .rpm / .AppImage from the release, or the latest Linux Build workflow run |
Direct download: grab the .dmg for your Mac — brew-browser__aarch64.dmg (Apple Silicon) or brew-browser__x64.dmg (Intel) — from the latest release, open it, and drag brew-browser to Applications. Keeps you on the app's own verified updater (Settings → Network → Updates).
Homebrew:
brew tap msitarzewski/brew-browser
brew trust msitarzewski/brew-browser # Homebrew 6.x requires trusting non-official taps
brew install --cask brew-browserInstalls the same notarized .dmg (Apple Silicon or Intel); update later with brew upgrade --cask brew-browser. The brew trust line is required on Homebrew 6.0+, which refuses to load casks from non-official taps until you trust them — a one-time step.
Linux bundles are produced by CI as .deb, .rpm, and .AppImage. For tagged releases, grab the .deb or .AppImage from the releases page; for the latest development build, download the artifacts from the most recent Linux Build workflow run. Targets Ubuntu 22.04+ (the webkit2gtk-4.1 ABI) and equivalently-recent distros. Two things to know up front:
.deb / .rpm GPG signing is a documented future step. There is no Gatekeeper/notarization equivalent to satisfy, but you are running an unsigned binary — verify your download against the release checksums.Direct download: grab the .dmg for your Mac — BrewBrowser--arm64.dmg (Apple Silicon) or BrewBrowser--x86_64.dmg (Intel) — from the latest release, open it, and drag Brew Browser to Applications. It keeps itself current via the in-app Sparkle updater. (Requires macOS 26.)
Prereqs (all platforms):
Platform build prereqs:
xcode-select --installlibwebkit2gtk-4.1-dev, libgtk-3-dev, libayatana-appindicator3-dev, librsvg2-dev, patchelf, plus build-essential). The canonical, always-current apt recipe lives in the CI workflow at .github/workflows/linux-build.yml — copy the apt-get install block from there rather than maintaining a second list here.Then (same command on every platform):
git clone https://github.com/msitarzewski/brew-browser
cd brew-browser
npm install
npm run tauri dev # development with HMR
npm run tauri build # macOS: .dmg · Linux: .deb / .rpm / .AppImage, all under src-tauri/target/release/bundle/
# Intel .dmg (artifacts named _x64, under src-tauri/target/x86_64-apple-darwin/release/bundle/):
rustup target add x86_64-apple-darwin # one-time
npm run tauri build -- --target x86_64-apple-darwinThe native Swift/SwiftUI app lives in native/ as a Swift Package. Requires
macOS 26 + a recent Xcode toolchain.
cd native
swift build # compile the library + executable
./build-app.sh # wrap into a launchable Brew Browser.app
open BrewBrowser.app # run it (use the .app, not `swift run` — Sparkle needs the bundle)
swift test # unit tests
./release.sh # signed + notarized release + Sparkle appcast (maintainer)Tauri build: a Tauri 2 shell hosts a SvelteKit + Svelte 5 frontend in the system WebView. macOS is the primary target; Linux is newly supported (same codebase, built on Ubuntu 22.04+ via CI). A Rust backend exposes 150+ typed Tauri commands that shell out to brew via tokio::process and stream stdout/stderr back over typed IPC channels. Paths are derived from brew --prefix / brew --cache rather than hardcoded, so the Linuxbrew prefix (/home/linuxbrew/.linuxbrew, or ~/.linuxbrew) is picked up automatically alongside the macOS /opt/homebrew. The full Homebrew catalog is bundled at build time (~6 MiB gzipped) and refreshable on demand. Trending data comes straight from formulae.brew.sh's public analytics JSON, cached in memory for an hour. Optional GitHub integration uses OAuth Device Flow with the token stored only in the system keyring (macOS Keychain; Secret Service / gnome-keyring / KWallet on Linux). No shell plugin, no arbitrary command execution — every brew invocation is built in Rust from a small set of enumerated inputs. See docs/PLAN.md for the full design and memory-bank/backendApi.md for the complete
No open issues yet, or sync has not completed.