.env
file configuration and macOS Sonoma support.
Major changes and deprecations since 4.1.0:
/usr/bin/ruby
on macOS 🍻.brew upgrade foo
upgraded everything on my system” problems.git
and GitHub performance..env
files.OS::Mac
and MacOS
usage in formulae on Linux is deprecated.
Please guard all uses in formulae with if OS.mac?
or if OS.linux?
as appropriate.brew audit --new-formula
and --new-cask
options are deprecated.
Please use brew audit --new
instead.brew postgresql-upgrade-database
is deprecated.
It is not longer needed now that we use versioned postgresql
formulae.
Please use pg_upgrade
directly instead.discontinued?
in casks is deprecated.Other changes since 4.1.0 I’d like to highlight are the following:
.pkg
installer is signed (by me!).brew list --full-names
properly output Homebrew organisation names for casks.rc
shell.curl
or system certificates are too old.brew deps
no longer passes options to formulae.brew desc
has improved handling of--eval-all
with formulae.brew install
will upgrade already installed casks (to be consistent with formulae.)brew pin
‘d formulae don’t cause as many warnings or errors.brew setup-ruby
is a new command to just install Homebrew’s Ruby, if needed.brew edit
will suggest tapping core repositories if untapped..pkg
installer is a documented installation method.ENV.O3
again to allow passing -O3
compiler optimisations.brew install
sets PIP_CACHE_DIR
to cache more Python files when building bottles or from source.brew audit
checks all relicensed HashiCorp formulae.sshpass
has (finally?) been removed from the new formula deny list.service
blocks now support multiple sockets.bootsnap
is used more often, speeding up repeated brew
invocations.XDG_CACHE_HOME
is used correctly again for logs and Homebrew’s cache on Linux.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>Major changes and deprecations since 4.0.0:
brew
downloads of formula/cask APIs use a signed API endpoint with client signature verification.HOMEBREW_NO_AUTO_UPDATE
, HOMEBREW_NO_INSTALL_FROM_API
or HOMEBREW_AUTO_UPDATE_SECS
to work around bugs or annoyances: please consider unsetting these and tweaking the values based on the new behaviour. Under some circumstances, you may see a one-time message nudging you do to this.brew doctor
warns if Homebrew/homebrew-core or Homebrew/homebrew-cask seem to be tapped unnecessarily so you can brew untap
them to save time and disk space.HOMEBREW_NO_ANALYTICS
because you didn’t like Google Analytics and/or data being sent to the US: please consider unsetting this allowing analytics data to be sent to our new InfluxDB host. Again, under some circumstances, you may see a one-time message nudging you do to this.HOMEBREW_NO_ENV_FILTERING
no longer fails but is silently a no-op.brew rbenv-sync
, brew nodenv-sync
and brew pyenv-sync
commands will automatically sync Homebrew-installed Ruby, NodeJS and Python versions with rbenv
, nodenv
and pyenv
respectively to avoid needing to build these from source.brew
command performance.brew fetch
ing bottles is significantly faster.brew install
with no post_install
is significantly faster.Other changes since 4.0.0 I’d like to highlight are the following:
brew
commands will only auto-update from the API for commands that auto-updated from Git pre-4.0.0.brew update
reports new/deleted formulae/casks when installing from the API.brew update
will automatically update Homebrew/homebrew-core and Homebrew/homebrew-cask local taps for users who have run developer commands.brew install
build failures only recommend open issues rather than pull requests.brew install
will use cached bottles if the request to check if bottles are up-to-date fails.brew install
sets OPENSSL_NO_VENDOR
to use Homebrew’s relevant openssl*
formula rather than the vendored OpenSSL from the openssl
crate.brew install --skip-post-install
will skip post-installation steps when installing a formula.brew search
no longer searches remotely instead using Homebrew’s new JSON API.brew cleanup --quiet
omits outputting some warnings.brew deps --missing
provides the inverse output to brew deps --installed
brew fetch
, brew --cache
, brew audit
and brew readall
has --os
and --arch
flags to simulate different operating systems and CPU architectures.brew shellenv
accepts a shell name parameter for when auto-detection is unreliable.brew
commands auto-update less frequently for users who have run Homebrew developer commands.brew audit
verifies the correct signing of .pkg
installers.brew bump
and brew bump-formula-pr
will update a local Homebrew/homebrew-core tap (if present) and brew bump
and brew bump-cask-pr
will do the same for Homebrew/homebrew-cask.HOMEBREW_NO_INSTALL_FROM_API
is set automatically for commands that need it.cask_renames.json
file in taps allows casks to be renamed./home/linuxbrew/.linuxbrew
) works as expected on Fedora Silverblue and other configurations where /home
is symlinked elsewhere.gh
CLI (when available).texinfo
RUSTFLAGS
to the appropriate target CPU on installation.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>Major changes and deprecations since 3.6.0:
HOMEBREW_NO_AUTO_UPDATE
, HOMEBREW_NO_INSTALL_FROM_API
or HOMEBREW_AUTO_UPDATE_SECS
to work around bugs or annoyances: please consider unsetting these and tweaking the values based on the new behaviour.brew untap homebrew/core
and brew untap homebrew/cask
to save some space.brew update
will now be run automatically less often (every 24 hours rather than every 5 minutes) and these auto-updates will be much faster as they no longer need to perform the slow git fetch
of the huge homebrew/core and homebrew/cask taps’ Git repositories.HOMEBREW_INSTALL_FROM_API
variable has been removed and is a no-op.export HOMEBREW_NO_INSTALL_FROM_API=1
. Please investigate HOMEBREW_API_AUTO_UPDATE_SECS
first.HOMEBREW_API_DOMAIN
can be set to use mirrors for formulae.brew.sh.HOMEBREW_NO_ANALYTICS
because you didn’t like Google Analytics and/or data being sent to the USA: please consider unsetting this and setting HOMEBREW_NO_GOOGLE_ANALYTICS
instead, allowing analytics data to be sent to our new InfluxDB host..pkg
files are generated for each Homebrew release. You can help us test this beta feature by downloading the generated package artifact from the relevant GitHub Actions release events.homebrew/ubuntu16.04:master
image has been deprecated.Other changes since 3.6.0 I’d like to highlight are the following:
brew test
sets PYTHONDONTWRITEBYTECODE
to improve performance.brew install --adopt
allows taking ownership of existing installed cask artifacts.brew install --dry-run
allows viewing what brew install
will do before it is run.brew docs
opens docs.brew.sh.--cask
is never required on Linux.service do
blocks allow defining a run
command per platform.brew install
uses the local cache while installing dependencies from pip
.brew doctor
no longer complains about BitDefender.brew install
will also suggest casks rather than just formulae when it fails to find the requested package.brew readall
simulates all architecture and OS configurations for better reliability.git
partial clones with sparse checkouts are supported when downloading using git
.brew doctor --quiet
prints no output on success.brew gist-logs
better detects missing permissions.brew update
uses the GitHub API token if available to avoid hitting rate limits.brew fetch
and brew install
can automatically determine mirrors for glibc-bootstrap
and PyPI resources.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>Since version 3.6.0 of Homebrew, we are now choosing to advertise the HOMEBREW_INSTALL_FROM_API
environment variable to the general public. A lot of work was done by @Rylan12 to make the experience more stable and the API install method is bound to bring a big performance improvement to those who are willing to give it a try.
The goal of the HOMEBREW_INSTALL_FROM_API
environment variable is to allow Homebrew users to install formulae and casks without needing to have Homebrew/homebrew-core and/or Homebrew/homebrew-cask tapped. This is intended to make brew update
much faster and required less often and also to save space on the user’s machine.
Now that the variable is public, we’re going into a period of bug hunting. When its users stop finding problems and edge-cases for the API to handle, we will be making this the default for all users so everyone can enjoy a fast Homebrew experience.
Since July 18th the Intel-based CI runners are now ephemeral and the foundation has been laid for applying the same features to Apple Silicon based runners. While Homebrew users might not notice more than sleeping a little easier thanks to bottling runs being more reliable, I can tell you that the maintainers are very happy with this improvement and the accompanying dashboard.
Currently our runners persist indefinitely, which has some distinct downsides:
The goal was to replace all our persistent runners with ephemeral variants, starting with the Apple Silicon runners. Unfortunately we ran into some bugs in the Orka platform which MacStadium provides for us, so that initial goal had to be shifted to Intel runners first.
Work is ongoing to enable the Apple Silicon based runners as ephemeral runners to close this project from the macOS side. Once that is done the stretch goal for this project is to make our self-hosted Linux runners ephemeral too. Most of our Linux CI already uses ephemeral GitHub-hosted runners.
Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>--eval-all
/HOMEBREW_EVAL_ALL
and a migration to Ubuntu 22.04 as our CI platform.
Major changes and deprecations since 3.5.0:
--eval-all
to be passed or HOMEBREW_EVAL_ALL
to be set to improve security in cases where it may evaluate formulae or casks that have not been installed, may not be trusted and will execute arbitrary Ruby code.brew
no longer respects HOMEBREW_NO_ENV_FILTERING
. Environment variables needed in formulae or casks need to have a HOMEBREW_
prefix to be passed through and then reassigned e.g. ENV["FOO"] = ENV["HOMEBREW_FOO"]
.brew linkage
detects deprecated linkage to libnsl.so.1
. and disabled linkage to libcrypt.so.1
..Other changes since 3.5.0 I’d like to highlight are the following:
HOMEBREW_INSTALL_FROM_API
is an opt-in flag added in 3.3.0 to install formulae and casks in homebrew/core and homebrew/cask taps using Homebrew’s API instead of needing the (large, slow) local checkouts of these repositories. HOMEBREW_INSTALL_FROM_API
has had many improvements since 3.5.0. We encourage you to try setting it and reporting any issues you experience.postgresql
formula was renamed to postgresql@14
to avoid repeated breakage on major/minor version upgrades.HOMEBREW_CURL_PATH
and HOMEBREW_GIT_PATH
are documented and supported for setting the location of curl
or git
on Linux. On macOS, the system versions will still always be used instead.HOMEBREW_ARTIFACT_DOMAIN
only takes effect on bottles and not e.g. casks.brew cleanup
is run after installing all packages rather than after the first package is installed.brew install --debug-symbols
is available to build and retain debug symbols on macOS. This does not yet work on Linux but we’ll review a pull request to add it.brew install
automatically installs glibc
or gcc
if they are too old.brew cleanup
and brew uninstall
automatically run brew autoremove
if HOMEBREW_AUTOREMOVE
is set.brew fetch --retry
uses an exponential backoff.brew deps
returns failing exit code when circular dependencies are detected.brew info --json
includes a variations
key. This provides information about how a formula or cask varies on OSs and CPU architectures other than the one it is being run on. Various additional DSLs e.g. on_system
and arch
have been added to formulae or casks to facilitate this.Formula
DSL is available to more easily generate completions.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>brew update
behaviour and Homebrew (on macOS) requiring at least OS X El Capitan (10.11).
Major changes and deprecations since 3.4.0:
brew update
now defaults to HOMEBREW_UPDATE_REPORT_ONLY_INSTALLED
behaviour, showing only information on installed formulae, so HOMEBREW_UPDATE_REPORT_ALL_FORMULAE
was added instead. This improves performance and usability of brew update
.brew update
lists “Outdated” rather than “Updated” formulae by default. It was already calculating which formulae were outdated and this information is more useful than showing which formulae were changed and is significantly faster than doing version comparisons.Other changes since 3.4.0 I’d like to highlight are the following:
brew tests --changed
runs tests only on files that have been changed from master
(including test files).brew tap --no-force-auto-update
removes the --force-auto-update
flag for taps.brew
no longer filters the TERMINFO_DIRS
environment variable.brew update --quiet
makes brew update
produce less output.brew uninstall
, brew reinstall
, etc. are no longer blocked by unreadable casks.brew upgrade
only upgrades version :latest
casks when --greedy
or --greedy-latest
are passed and the cask has been updated.brew cleanup
shows the total disk space freed.HOMEBREW_DOCKER_REGISTRY_TOKEN
and HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN
can be used for GitHub Packages authentication without HOMEBREW_ARTIFACT_DOMAIN
.HOMEBREW_ARTIFACT_DOMAIN
’s description in man brew
has been clarified.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>Here’s an overview of the timescale:
HOMEBREW_NO_ENV_HINTS
to hide configuration suggestions, brew services
supported on systemd
on Linux, brew install --overwrite
and Homebrew beginning the process to leave the SFC.
Major changes and deprecations since 3.3.0:
brew
will hint at configuration variables to tweak behaviour unless HOMEBREW_NO_ENV_HINTS
is set.brew services
is supported and recommended on Linux when using systemd
.brew install --overwrite
ensures the brew link
after brew install
is always run with --overwrite
.Formula.each
, Cask::Cask.each
and other uses of Enumerable
methods are deprecated because reading all formulae/casks on the system unnecessarily runs untrusted code.Other changes since 3.3.0 I’d like to highlight are the following:
HOMEBREW_DOCKER_REGISTRY_TOKEN_BASIC
allows authenticating with a Docker register proxying GitHub Packages using a basic authentication token.brew cask
produces a more helpful error message pointing to brew --cask
.HOMEBREW_DOCKER_REGISTRY_TOKEN
is used when installing Homebrew’s Portable Ruby.brew deps --graph
and --dot
output dependencies as a directed graph in text or DOT formats.brew bump --open-pr
opens a pull request for a new version if there is none already open. This is used by Homebrew’s automation to automatically “bump” some outdated formulae.brew extract
automatically removes bottle
blocks.brew style --fix
automatically fixes shellcheck
failures.brew upgrade
skips upgrading unbottled dependents of upgraded formulae.brew upgrade
skips checking dependents of homebrew-core versioned formulae.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>HOMEBREW_INSTALL_FROM_API
flag to avoid needing to have Homebrew/homebrew-core or Homebrew/homebrew-cask repositories tapped/cloned locally.
Major changes and deprecations since 3.2.0:
brew update
will migrate all Linux users from linuxbrew-core to homebrew-core. This will also trigger the upgrade of some formulae installed from linuxbrew-core due to revision
differences.HOMEBREW_INSTALL_FROM_API
is a new opt-in flag to install formulae and casks in homebrew/core and homebrew/cask taps using Homebrew’s API instead of needing the (large, slow) local checkouts of these repositories.brew bump-formula-pr --write
has been deprecated in favour of brew bump-formula-pr --write-only
.Other changes since 3.2.0 I’d like to highlight are the following:
HOMEBREW_SSH_CONFIG_PATH
sets the path a configuration file for using Git over SSH inside Homebrew.brew edit --print-path
outputs the filename to be edited without opening an editor.brew developer
makes it easier to enable/disable the Homebrew developer release channel.brew search
does approximate matching of formula names.ca-certificates
will be installed when necessary on macOS <= 10.15.5 to allow connecting to various HTTPS sites.brew bump --start-with
retrieves a subset of results.brew search
can search Arch Linux and Repology.HOMEBREW_ADDITIONAL_GOOGLE_ANALYTICS_ID
can be used to report to an additional Google Analytics tracking ID.brew fetch --bottle-tag
allows fetching a bottle for any specified tag (e.g. OS/architecture/macOS version).brew install
and brew upgrade
will fetch all formulae before attempting installation.brew install
outputs all cask installations at the end (like formulae).brew
will start the sandbox in a pseudoterminal (to avoid potential formula access to the parent terminal).brew style
will check and fix more shell script style.brew tap --custom-remote
allows changing the remote for an installed tap.brew typecheck
can be run on Apple Silicon.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>brew install
now upgrades outdated formulae by default and basic macOS 12 (Monterey) support.
Major changes and deprecations since 3.1.0:
brew install
now upgrades outdated formulae by default (for idempotency). This can be disabled by setting HOMEBREW_NO_INSTALL_UPGRADE
.brew
has basic macOS 12 (Monterey) support.brew leaves
has --installed-on-request
and --installed-as-dependency
flags to only list formula installed manually or as dependencies.Other changes since 3.1.0 I’d like to highlight are the following:
brew link --HEAD
links the HEAD
version of a formula.brew alias
, brew autoupdate
and brew command-not-found
are official external command taps.brew tap
will never create shallow clones (as shallow clones are not performant when repeatedly fetching as Homebrew does).brew fetch
will no longer use shallow clones.brew install
also outputs cask caveats as part of the final summary.brew
has GCC 11 support.brew bottle
will generate all:
bottles which are used on all platforms.. A lot of work has gone into improving reproducible builds to make these possible. brew bottle
on your local machine for an all:
bottle should generate an identical checksum.brew doctor
hides some warnings on Apple Silicon with Intel and ARM installations.brew bottle --bottle-arch
allow bottles with custom architectures.Finally:
Thanks to all our hard-working maintainers, contributors, sponsors and supporters for getting us this far.
]]>