Homebrew, like Git, supports external commands. This lets you create new commands that can be run like:
$ brew mycommand --option1 --option3 formula
without modifying Homebrew's internals.
External commands come in two flavors: Ruby commands and shell scripts.
In both cases, the command file should be
chmod +x (executable) and live somewhere in
Internally, Homebrew finds commands with
An external command
extcmd implemented as a Ruby command should be named
brew-extcmd.rb. The command is executed by doing a
require on the full pathname. As the command is
required, it has full access to the Homebrew "environment", i.e. all global variables and modules that any internal command has access to.
The command may
Kernel.exit with a status code if it needs to; if it doesn't explicitly exit then Homebrew will return 0.
A shell script for an command named
extcmd should be named
brew-extcmd. This file will be run via
exec with some Homebrew variables set as environmental variables, and passed any additional command-line arguments.
|HOMEBREW_CACHE||Where Homebrew caches downloaded tarballs to, typically
|HOMEBREW_CELLAR||The location of the Homebrew Cellar, where software is staged, by default
|HOMEBREW_LIBRARY_PATH||The directory containing Homebrew’s own application code.|
|HOMEBREW_PREFIX||Where Homebrew installs software to, by default
|HOMEBREW_REPOSITORY||If installed from a Git clone, the repo directory (i.e., where Homebrew’s
Note that the script itself can use any suitable shebang (
#!) line, so an external “shell script” can be written for sh, bash, Ruby, or anything else.
Some example external commands ship with Homebrew and are enabled by default. You can list them by doing
$ ls `brew --repository`/Library/Contributions/cmd
Some commands in the example commands directory are documented in the
brew(1) man page. For documentation on the
which commands, see
Build a binary package (bottle) from the keg(s) of
brew list --versions, but lists only formulae with multiple installed versions.
Generate a GraphViz DOT file from the Homebrew dependency graph. Options given here are passed on to
Grep through Homebrew formulae in
HOMEBREW_REPOSITORY/Library/Formula. Options given here are passed on to
[Re]generate man pages for Homebrew using
--verboseis passed, run
man brewafter generating man pages.
--linkis passed, symlink generated man pages to
HOMEBREW_PREFIX/share/man. This is useful when Homebrew is not installed directly into
--serveris passed, start the
ronn(1) test server.
Cycle through mirror lists for each formula, attempt a download and validate MD5 sums.
Check the given
<formulae>for missing dependencies.
<formulae>are given, check all installed brews.
Get a patch from a GitHub commit or pull request and apply it to Homebrew.
<URLish>may be the URL of a GitHub commit or pull request, or the issue number of a pull request.
--installis passed, installs any formulae added or modified by the patch.
Import all formulae one by one. This is useful for testing new functionality across all formulae, or to check all formulae for errors.
Start a local web app that lets you browse available formulae, similar to
gem server. Requires sinatra.
Switch between installed versions of
<formula>. If you have multiple versions of a formula installed, the standard
brew linkcommand will fail.
switchtries to unlink all versions from
HOMEBREW_PREFIX, then [re]links the requested version.
Unpack the source code of
<formulae>for inspection. Formulae archives will be extracted to subdirectories inside the current working directory or a directory specified by
--destdir. If the
--patchoption is supplied, patches will also be downloaded and applied.
List versions of installed brews.
<formulae>are given, only list versions for the specified brews.
These commands have been contributed by Homebrew users but are not included in the main Homebrew repository, nor are they installed by the installer script. You can install them manually, as outlined above.
NOTE: They are largely untested, and as always, be careful about running untested code on your machine.
Install .app and other "Drag to install" packages from Homebrew.
Install using:$ brew install phinze/cask/brew-cask
Get short descriptions for Homebrew formulae or search formulae by description: https://github.com/telemachus/brew-desc
You can install manually or using
brew tap:$ brew install telemachus/desc/brew-desc
Install any gem pip package into a self-contained Homebrew cellar location
Note: These can also be installed with
brew install brew-gemand
brew install brew-pip
Get Growl notifications for Homebrew https://github.com/secondplanet/brew-growl
Scrapes a formula's homepage to get more information: https://gist.github.com/475200
Does brew update followed by brew outdated: https://gist.github.com/514247
Does a rebase on "brew update" instead of a merge: https://gist.github.com/493669
Simple support to start formulae using launchctl, has out of the box support for any formula which defines
startup_plist(e.g. mysql, postgres, redis u.v.m.): https://gist.github.com/766293
Homebrew Wiki: http://wiki.github.com/Homebrew/homebrew/
Last edited by Mike McQuaid,