Changelog
All notable changes to Brewwery.
v1.1.1 - Reliability & Background Saving
Fixed
- Packaging uses SwiftPM’s actual product directory and verifies the executable’s compiled version/build against Info.plist, both architectures, resources, signatures, and linked Mach-O UUIDs.
- Mutating operations reserve their slot before Homebrew detection. Metadata updates, taps, and pinning share the coordinator; the runner independently rejects overlapping mutations.
- Buffered commands support cancellation, timeouts, and explicit output-size errors. Live output and pending UI events are bounded, with split UTF-8 characters preserved.
- Package and service lists refresh after failure or cancellation because Homebrew may have applied part of a change.
- Detail drawers ignore stale responses. Failed dependent checks show Retry instead of claiming that no packages depend on a formula.
- Option-shaped package, cask, service, tap, and search arguments are rejected before spawn.
- Appcast generation uses only the current DMG, avoiding stale enclosure URLs and unpublished delta updates.
Improved
- Favorites and History encode, back up, and atomically write JSON on a serial background queue. Rapid changes keep only the latest pending snapshot per store.
- Normal quit waits for pending saves. Storage errors remain visible with Retry, and quitting after a failed save asks before discarding changes. Unreadable JSON is backed up before replacement.
- About and Settings credit by Made Büro . Bundles include the MIT license and Sparkle’s third-party notices.
- Isolated tests and universal packaging checks run in native CI. A dedicated QA profile supports clean-profile install and restart checks without replacing the working profile.
Verification scope
- 218 isolated tests passed; a packaged clean QA-profile install and restart passed on the local Apple Silicon Mac.
- Intel hardware, macOS 14, and a complete manual VoiceOver pass remain untested. Initial JSON reads and manual History export remain synchronous; force-quit can lose changes not yet saved.
v1.1.0 — Report, Brewfile & Pinning
Ways to act on what Brewwery shows: report a problem without leaving the app, install a Brewfile’s missing packages, hold a formula at its version — and a German interface.
Added
- Report a problem from Settings, the Help menu, and the menu bar, and Report this failure from a failed operation or History entry. You review the report, then open it as a GitHub issue or an email and send it yourself. Nothing is sent automatically.
- Brewfile: compare a Brewfile with this Mac and install only what is missing. Brewwery writes its own install list, so Homebrew never runs Ruby from a file someone sent you.
- Pin formulae: a pinned formula keeps its version, is skipped by Upgrade all, and is not counted as outdated.
- A Go menu:
⌘1…⌘9switch between the first nine pages. - German interface. French, Spanish, and Portuguese are planned for the next version.
Changed
- Page headers move their buttons onto a second row when a translation makes them too wide.
Fixed
- Settings › About no longer lists Apple Silicon as the only primary platform.
v1.0.1 — One Outdated Count
The Dock badge counted outdated packages on its own, so nothing inside the window explained the number and it stayed stale after an upgrade. There is now one list, and every counter reads it.
Added
- The outdated count appears next to Updates in the sidebar, in the status bar, and in the menu bar.
- The Updates page names the command behind the count and when it last ran.
- A Dock section in Settings switches the badge off.
Changed
- The outdated list loads at launch alongside the installed packages.
- Background refreshes are silent, and a failed background check keeps the last good list.
- Page headers keep their buttons at full width; longer subtitles wrap instead.
Fixed
- Upgrading from inside Brewwery clears the Dock badge immediately.
- A silent refresh no longer leaves the Updates page showing “Loading updates…“.
v1.0.0 — Native macOS App
Brewwery is now a native macOS application. It replaces the Electron, React, and Rust build of 0.9.7 with Swift 6, SwiftUI, and AppKit, and keeps the same features, Homebrew commands, and validation rules.
Added
- Universal app for Apple Silicon and Intel Macs.
- Developer ID signing and Apple notarization.
- Automatic app updates with Sparkle, including an option for pre-release versions.
- Brewfiles can be opened with a file picker as well as by typing a path.
Changed
- Rebuilt natively: no Electron, Node.js, or Rust runtime is shipped, and the download is a fraction of the size.
- The title bar is gone. Search and Settings sit in each page’s header next to that page’s actions; the search field is compact and widens while you type.
- Packages, Casks, and History filter from the page header instead of a second search box.
- Successful operations close their progress panel automatically; failures stay open with the full output.
- The first-launch overlay is removed; the “Homebrew not found” panel and Settings cover the same ground.
- The Dashboard no longer repeats the “Homebrew not found” error inside every card.
- The logo is rendered from the original vector artwork.
Fixed
- Cancelling an operation now stops Homebrew’s own child processes, such as
gitandcurl, as well asbrewitself. - Validating a custom Homebrew path can no longer report a broken executable as valid.
Security
- Homebrew runs through a closed set of typed commands with no shell.
- Formula names containing a
..path segment are rejected before Homebrew runs. - Hardened runtime with no entitlements.
Requirements
- macOS 14 Sonoma or later.
v0.9.7 — Package Intelligence & Taps
Added
- Dedicated Homebrew Taps page with validated add/remove actions and confirmations.
- Homebrew Leaves filter and installed dependents in formula details.
- Read-only background outdated checks with a macOS Dock badge count.
- Virtualized Packages and Casks lists with keyboard row navigation.
Security
- Background checks only run
brew outdated --json=v2and never mutate Homebrew state. - Tap names use a strict
owner/repositoryallowlist and tap mutations require confirmation.
v0.9.6 — Accessibility & Docs Consistency
Added
- Shared keyboard focus rings for buttons, inputs, and tabs.
- Accessible confirmation dialogs and package detail drawers with Escape-to-close behavior.
Changed
- Release documentation and known limitations now match the current Release Candidate.
- Accessibility labels identify the package affected by detail drawer actions.
Security
- No new Homebrew commands, IPC channels, telemetry, cloud sync, accounts, or paid feature surface were added.
v0.9.5 — Cleanup & Services Streaming
Added
- Live stdout/stderr progress for service start, stop, and restart actions.
- Live stdout/stderr progress for confirmed Homebrew cleanup runs.
- Cancellation and timeout controls for service and cleanup operations.
- Context-aware progress summaries for package, service, and cleanup work.
Changed
- Services now use a 5-minute fixed safety timeout.
- Cleanup now uses a 30-minute fixed safety timeout and still requires preview plus confirmation.
- Service and cleanup history entries use final streamed output and distinguish cancellation from failure.
Security
- Service names remain strictly validated before reaching the streaming runner.
- Cleanup streaming exposes only the fixed
brew cleanupoperation. - No generic command, arbitrary argument, PID, signal, or timeout input is exposed to renderer code.
v0.9.4 — Operation Safety
Added
- Confirmation-gated cancellation for active install, uninstall, and upgrade operations.
- Fixed safety timeouts: 15 minutes for uninstall and 45 minutes for install/upgrade.
- Dedicated cancelled and timed-out progress states with readable status messaging.
- Cancelled operation status, filter, count, and neutral toast in History.
Changed
- Only one streaming mutating Homebrew operation can run per renderer at a time.
- Active child processes are stopped if their owner window is destroyed.
- Cancel requests are scoped to an active operation ID owned by the requesting renderer.
Security
- Cancellation does not expose PID access, arbitrary signals, or generic process control to the renderer.
- Existing
shell: false, command allowlists, validation, and confirmation requirements remain intact.
v0.9.3 — Stability & Error Recovery
Added
- Retry actions for formulae, casks, updates, services, cleanup preview, and doctor error states.
- Thirteen Rust unit tests covering Homebrew JSON normalization, parsers, and identifier validation.
- napi-rs test configuration that allows Rust tests to run without a Node host.
Changed
- Streaming install, uninstall, and upgrade output is bounded in both Electron main and renderer memory.
- Large live logs preserve useful beginning and ending sections with a visible trim marker.
- Known issues now distinguish external release constraints from actionable engineering follow-ups.
Security
- Formula, cask, search, and service validation now have regression tests for rejected shell metacharacters and invalid identifiers.
- No new command, IPC, telemetry, account, cloud, paid, or sudo surface was added.
v0.9.2 — RC QA Fixes
Added
- Settings
Check Homebrewaction for explicitbrew updatewith confirmation - Discover collection summary for installed, favorite, available, and total packages
Fixed
- Package detail drawer now scrolls internally, so lower actions and raw details remain reachable
- Search installed status now uses a green installed badge instead of muted text
- Tapped formula identifiers containing
/are accepted for package info, install, uninstall, and upgrade - Favorite buttons update immediately after toggling
- Tray menu no longer shows a disabled app-name item and uses Settings instead of Open Terminal
Security
brew updateremains confirmation-gated- Formula slash support still rejects spaces, shell metacharacters, leading/trailing slashes, repeated slashes, redirection characters, and newlines
v0.9.1 — Discover & Favorites
Added
- Favorites — mark any formula or cask as a favorite and access them instantly from a dedicated Favorites view
- Favorites persist across sessions via local settings
- Favorites badge on package cards and detail drawers
APP_CHANNELupdated tov0.9.1 Discover & Favorites
Improved
- Search & Discovery page performance and result rendering
- Package detail cards now show favorite status inline
- All documentation updated for v0.9.1
v0.9.0 — Release Candidate
Added
APP_CHANNELis nowRelease Candidate- Release Candidate release notes and QA checklist
- Signing and notarization preparation guide
- macOS signing entitlements for future Developer ID builds
Improved
- All documentation updated for v0.9.0 Release Candidate status
- Known limitations documented as release decisions
- Feature freeze documented before v1.0
Known
- Unsigned and not notarized while signing assets are prepared
- Apple Silicon is the primary verified build target
- Cleanup and service actions show final output only (no streaming progress)
v0.8.2 — Light Theme QA Polish
Fixed
- Light theme sidebar logo readability
- Light theme status color contrast
- macOS window resize, maximize, and fullscreen controls
- Window centering reliability
Improved
- Status badges, toasts, progress panels use shared theme tokens
v0.8.1 — Light Theme & Visual Polish
Added
- Working theme selector: System, Dark, and warm Light
- Theme persistence in local settings
- Theme tokens across all components
v0.8.0 — Launch Candidate
Added
pnpm release:verifyverification command- GitHub issue templates for bugs and feature requests
Improved
- Standardized button labels
- Hidden placeholder actions from UI
v0.7.x — Private Beta
- History render batching for large logs
- History and progress output trimming
- Friendly error messages with expandable technical details
- Search installed state reconciliation
- Invalid discovery search query handling
- Explicit
Check for updatesaction - Window centering and sizing fixes
v0.6.x — Private Alpha
- Settings Copy diagnostics action
- Dashboard last-refreshed state and services preview
- History failed-only filter
- Alpha/beta verification and clean-install commands
- ZIP and
.applocal verification paths
v0.5.x — Distribution & Polish
- Production electron-builder macOS config
- Unsigned Apple Silicon DMG/ZIP packaging
- GitHub Actions CI and release workflows
- Tray menu, keyboard shortcuts, onboarding
- Settings page with Homebrew path, theme, history, About
- Custom Homebrew path validation in Rust
- Local
.apptesting workflow
v0.4.x — Search & Discovery
- Dedicated Homebrew discovery/search page
- Package install and uninstall with confirmation
- Streaming progress output for install/uninstall/upgrade
- Strict package name validation
v0.3.x — Cleanup, Doctor & Brewfile
- Cleanup preview and execution with confirmation
- Brew doctor diagnostics parsing
- Brewfile export and read
- Local operation history with search and export
- Result toasts
v0.2.0 — Updates & Services
- Outdated package detection and upgrade flows
- Service status and start/stop/restart with confirmation
- Dashboard backed by real data
v0.1.x — Foundation
- pnpm workspace scaffold
- Electron + React + Vite + TypeScript
- Tailwind CSS dark theme
- Rust napi-rs core
- Homebrew detection and package/cask listing
- Package detail drawers with search, sort, filter
- Read-only operation model
Last updated on