The project's README from github.com/Homebrew/BrewUI. As one markdown file: README.md.
Homebrew's official macOS GUI: making package management approachable for users who prefer graphical interfaces over Terminal, while maintaining complete transparency about underlying Homebrew operations.
Enable CLI-averse users to safely discover, install, update and manage Homebrew packages through a native SwiftUI interface that never hides what Homebrew is doing.
brew CLI and the Homebrew JSON APIbrew install --cask homebrew-app
Put Homebrew options in brew.env and relaunch BrewUI after changing them. Shell aliases and
exported variables do not configure the app. See Homebrew configuration.
After cloning:
./scripts/bootstrap
This installs Mint from Brewfile, runs mint bootstrap to build the SwiftFormat and SwiftLint versions pinned in Mintfile, enables repository git hooks and resolves Swift package dependencies for Homebrew.xcodeproj.
After bootstrap, commits automatically run checks on staged Swift files:
mint run swiftformatmint run swiftlint (with --fix, then strict validation)The hook also runs BrewUILint over the production tree. If unresolved lint violations remain, the commit is blocked and the hook prints the failures so you can fix and re-commit.
See development setup for signing configuration, conventions and testing for contributor guidance and architecture for system design.
Translations are community-sourced and a partial one is welcome: any string without a translation
falls back to English. Copy lives in one Localizable.xcstrings catalog per UI target, Homebrew/
for the window, sidebar and menus, and Resources/ in BrewUIComponents and each BrewFeature*
package. Edit a catalog in Xcode. See localisation for the reasoning
behind the steps below.
Homebrew/Localizable.xcstrings, press +, pick the language and translate at least one
string there. macOS only lists a language in the per-app picker under Applications in System
Settings when the app bundle ships it, so a language that exists only in a package catalog never
loads and scripts/localize verify fails. Adding it also records the language in knownRegions
in Homebrew.xcodeproj; commit that.verify fails on a blank.scripts/localize verify, then scripts/localize status to see how far the language has got.grep -rl "Run Again" Homebrew/Localizable.xcstrings Sources/*/Resources/Localizable.xcstrings.%@ or
%lld stands for.%1$@, %2$lld) if your language
needs a different order. Nothing checks this for you and a mismatch shows the wrong value at
runtime.1 package and
%lld packages). A language with more categories varies the %lld key by plural
(Vary By Plural in Xcode) and translates 1 package as well.scripts/localize verify.The key is the English text, so rewording a string makes a new entry rather than editing one.
bundle: #bundle and updating the comment: if
the meaning moved.scripts/localize sync, which an Xcode build does for you. It adds the new key and marks the
old one "extractionState" : "stale", keeping its translations..xcstrings changes with the code. CI compares the catalogs against the built sources
and fails if they have drifted.Stable and under active development.
AGPL-3.0. If you reuse or adapt the source the AGPL terms apply, including the network-use clause.