Today, I’m proud to announce Homebrew 6.0.0.
The most significant changes since 5.1.0 are a new tap trust security mechanism, the new faster, smaller, default internal Homebrew JSON API, sandboxing on Linux, better defaults informed by our user survey, many brew bundle improvements, improved performance and initial support for macOS 27 (Golden Gate).
Homebrew 6.0.0 introduces tap trust. A third-party tap can contain arbitrary, unsandboxed Ruby that runs on your machine, so Homebrew now requires taps (and tap-qualified formulae and casks) to be explicitly trusted before their code is evaluated or run. This reduces the risk from malicious or compromised taps while leaving the official Homebrew taps trusted by default. See the new Tap-Trust documentation for details.
brew tap gains commands for managing tap trust, can trust a tap by its remote URL, brew trust adds a --json=v1 flag and brew tap-info adds a trusted field.brew bundle honours the trusted: option and brew bundle dump records trusted bundle entries, marking custom-remote taps as trusted.The internal JSON API is now the default, advancing the smaller API that Homebrew re-enabled and turned on for developers recently. It combines all Homebrew’s metadata into a single download, so brew updates faster and talks to the network less. It was opt-in via HOMEBREW_USE_INTERNAL_API since 5.0.0; that variable is now deprecated (see below).
The Linux Bubblewrap sandbox aligns Linux with macOS, where build, test and postinstall phases already run sandboxed. It is on by default for developers, Homebrew moved its macOS sandbox logic to share code, improved Linux sandbox behaviour (with Homebrew/homebrew-core setting the sandbox env in CI), hardened sandboxed install phases, sandboxed cask executable hooks, allowed logs in the build sandbox, installed Bubblewrap on hosted Ubuntu and skips sandbox setup for syntax-only jobs.
ask mode the default for developers, so brew install and brew upgrade show a dependency summary and confirmation prompt before making changes.brew upgrade summary and explains the upgrade metadata fetch.brew bundlebrew bundle gains many improvements, most notably parallel formula installation that now runs jobs automatically by default, plus npm and krew extensions, wider cleanup support and, on Windows, winget support.brew bundle krew via kubectl-krew directly, respects CARGO_HOME and friends for cargo, adds a --describe flag to brew bundle add and tries mas install before falling back to mas get.brew bundle/remover and avoids parsing the output of brew services list.brew bundle performs npm installs more securely.Homebrew is faster across the board, with startup performance tweaks, a ~30% faster brew leaves, parallelised bottle tab fetching on upgrade and less work loading Ruby libraries at startup.
Homebrew adds initial support for macOS 27 (Golden Gate).
x86_64 moves to Tier 3 with no CI support and no new bottles (binary packages) built for macOS Intel; in September 2027, macOS Intel x86_64 will be unsupported entirely and all related code deleted.master to main migration begun in 4.6.0 continues: more repositories no longer update master, GitHub Actions warn @master users to migrate to @main and the sync-default-branches workflows are removed from Homebrew/homebrew-cask and Homebrew/homebrew-core.Homebrew published three security advisories:
.pkg postinstall (GHSA-6689-q779-c33m), fixed by cleaning Homebrew git state and replacing the installer git directory./var/tmp plist and could assign Homebrew ownership to a local attacker (GHSA-59v8-x8q4-px5c), fixed by tweaking the macOS .pkg package-user plist handling.HOMEBREW_* environment secrets to download time.HOMEBREW_CASK_OPTS_REQUIRE_SHA.HOMEBREW_BUNDLE_NO_SECRETS and HOMEBREW_USE_INTERNAL_API.HOMEBREW_SBOM.brew missing.auto_updates casks: improving how they update, refining the behaviour further, gating auto-updates behind opt-in and upgrading them when the bundle version is stale.cask adds a generate_completions_from_executable DSL artifact and includes resolved artifact targets in JSON output.caskroom use the user’s primary group on Linux.brew doctor and brew cleanup handle corrupt Caskroom directories.depends_on :macos in casks, tracks macOS support explicitly and emits Linux variations for casks with Linux checksums.depends_on maximum_macos: syntax and fixes its macOS dependencies in Homebrew/homebrew-cask and Homebrew/homebrew-core.brew config and moves the wsl? boolean from OS::Linux up to the OS module..git suffix when matching GitHub remotes and consolidating tap remote normalisation. (and more)brew info and brew tap-infobrew info output is clearer: more consistent and helpful, with a Binaries section listing executables, a clearer recursive runtime dependencies line, clearer same-named conflicts and shadowed formulae and a list versions JSON output.brew info shows installed state better: the upgrade target for outdated @-versioned formulae, installed dependents with --verbose, deprecated and disabled packages in install status, installed formulae resolved from the receipt’s tap with a shadowing warning, the installed version and an upgrade hint on the headline, other installed versions and an installed info inventory.brew info and brew tap-info skip the uninstalled marker when not a problem, show more tap info for packages and brew tap-info lists formulae and casks.brew which-formula shows install status and Homebrew shows quarantine script usage.brew exec is a new command, like npx, that supports formulae environments.brew as-console-user is a new command for running Homebrew as the right user under MDM/root environments and brew update <formula> is aliased to upgrade.HOMEBREW_CASK_OPTS_* from help, hiding maintainer commands and hiding hide_from_man_page commands from brew commands.PATH.bump to avoid upstream supply-side security risks.bump skip status, messages and errors and checks RubyGems licences.livecheck throttle days in audit, adds livecheck throttling by days and speeds up the formula throttle days check.brew fetch --all-platforms fetches every variant, Homebrew prints download error details when using concurrency, preserves partial downloads on network errors, avoids cached manifest downloads and hints when a download is HTML, not a binary.chgrp.brew services no longer fails to load with --sudo-service-user.scm_revision in the tab, supports in-repository patch files, supports CPS metadata directories and includes patches in formula to_hash.autoremove candidates against formula definitions.homebrew/core and homebrew/cask adopt the new DSLs (post_install_steps, postinstall and flight steps). In homebrew/core and homebrew/cask this covers a large share of post_install and *flight blocks (creating directories, touching markers, moving and symlinking files), with more operation types planned.brew vulns is a new Homebrew tap and subcommand that checks installed packages for known vulnerabilities 🔒.brew which-update, uses an AST for source rewrites and enforces public API visibility and docs.setup-homebrew GitHub Action defaults to the stable tag and trusts taps on non-stable brew.brew lgtm covers tap audits and formula tests and Homebrew works around a non-writable cache for lgtm commands in brew.sh.workflows/docker builds Ubuntu 26.04 images and test disables return false handling.-full formula guidance, upstream expectations and lifecycle requests, the new auto_updates behaviour and a consolidated deprecation policy.compatibility_version guidance and Homebrew/homebrew-core backfills compatibility_version 1. This will help reduce the number of formulae that need upgraded by brew upgrade over time.Finally:
brew-rs experiment in moving parts of Homebrew’s Ruby frontend to Rust has concluded: benchmarks showed Homebrew’s Rust frontend only ahead on narrow, already-cached bottle fetches, not on representative full installs (pouring bottles, linking, writing metadata and health checks), so the performance focus has moved back to Ruby and to starting useful network and disk I/O sooner. We’ve added an FAQ entry explaining all of this. Our numbers come from honest, fully-compatible comparisons. Not all unofficial Homebrew frontends seem to apply the same rigor to their benchmarks, compatability or security: your mileage with those may vary.winget in brew bundle as a Windows-only feature.Thanks to all our hard-working volunteer maintainers, contributors, sponsors and supporters for getting us this far.
Homebrew 5.1.0 has been released. Homebrew’s most significant changes since 5.0.0 are expanded brew bundle support, brew version-install, new -full formula handling an...
Today, I’d like to announce Homebrew 5.0.0. The most significant changes since 4.6.0 are download concurrency by default, official support for Linux ARM64/AArch64, tim...
Today, I’d like to announce Homebrew 4.6.0. The most significant changes since 4.5.0 are opt-in concurrent downloads with HOMEBREW_DOWNLOAD_CONCURRENCY, preliminary ma...
Today, I’d like to announce Homebrew 4.5.0. The most significant changes since 4.4.0 are major improvements to brew bundle/services, preliminary Linux support for cask...