homebrew/core supports multiple versions of formulae by using a special naming format. For example, the formula for GCC 9 is named gcc@9.rb
and begins with class GccAT9 < Formula
.
Versioned formulae we include in homebrew/core must meet the following standards:
formula2
rather than formula@2
or formula@1
).openssl@1.0
and foo
, and foo
depends on openssl
then you must instead use openssl
.keg_only :versioned_formula
to allow users to have multiple versions installed at once.keg_only :versioned_formula
should not post_install
anything in the HOMEBREW_PREFIX
that conflicts with or duplicates the main counterpart (or other versioned formulae). For example, a node@6
formula should not install its npm
into HOMEBREW_PREFIX
like the node
formula does.install_on_request
formulae.resource
s that require security updates. For example, a node@6
formula should not have an npm
resource but instead rely on the npm
provided by the upstream tarball.revision
bumps to be rebuilt against newer versions. Version updates which violate this should be rejected and the formula be deprecated from that point onwards.Homebrew’s versions should not be used to “pin” formulae to your personal requirements. You should instead create your own tap for formulae you or your organisation wish to control the versioning of, or those that do not meet the above standards. Software that has regular API or ABI breaking releases still needs to meet all the above requirements; that a brew upgrade
has broken something for you is not an argument for us to add and maintain a formula for you.
If there is a formula that currently exists in the Homebrew/homebrew-core repository or has existed in the past (i.e. was migrated or deleted), you can recover it for your own use with the brew extract
command. This will copy the desired version of the formula into a custom tap. For example, if your project depends on automake
1.12 instead of the most recent version, you can obtain the automake
formula at version 1.12 by running:
brew extract automake --version=1.12 <YOUR_GITHUB_USER>/<YOUR_TAP_REPOSITORY_NAME>
Formulae obtained this way may contain deprecated, disabled or removed Homebrew syntax (e.g. checksums may be sha1
instead of sha256
); the brew extract
command does not edit or update formulae to meet current standards and style requirements.
We may temporarily add versioned formulae for our own needs that do not meet these standards in homebrew/core. The presence of a versioned formula there does not imply it will be maintained indefinitely or that we are willing to accept any more versions that do not meet the requirements above.