Detect if homebrew package is installed
Categories:
How to Detect if a Homebrew Package is Installed

Learn various methods to programmatically check for the presence of a Homebrew-installed package on macOS, essential for scripting and automation.
When automating tasks or writing shell scripts on macOS, it's often necessary to determine if a specific Homebrew package is already installed. This prevents redundant installations, ensures prerequisites are met, and allows for conditional logic in your scripts. This article explores several robust methods to check for Homebrew package installation, ranging from simple brew list
commands to more precise checks using brew info
and brew ls --versions
.
Method 1: Using brew list
for a Quick Check
The brew list
command is the most straightforward way to see all installed Homebrew packages. You can pipe its output to grep
to check for a specific package. This method is generally sufficient for most scripting needs, as grep
will return a non-zero exit code if the package name is not found, which can be used in conditional statements.
if brew list --formula | grep -q "<package_name>"; then
echo "<package_name> is installed."
else
echo "<package_name> is NOT installed."
fi
Checking for a package using brew list
and grep
.
--formula
flag with brew list
ensures you're only checking formulae (applications) and not casks (GUI applications). For casks, use brew list --cask
.Method 2: Verifying with brew info
for Detailed Status
While brew list
is quick, brew info <package_name>
provides more detailed information about a package, including its installation status, version, and dependencies. If a package is not installed, brew info
will typically return an error or indicate that the package is not found. We can leverage the exit status of this command.
if brew info --json "<package_name>" &>/dev/null; then
echo "<package_name> is installed."
else
echo "<package_name> is NOT installed."
fi
Using brew info
to check for package installation. The --json
flag makes the output more machine-readable, though we're just checking the exit status here.
stderr
and stdout
to /dev/null
(&>/dev/null
) is crucial when using brew info
in scripts to prevent verbose output from cluttering your script's execution or causing unexpected behavior.Method 3: Checking Specific Versions with brew ls --versions
For scenarios where you need to check if a specific version of a package is installed, brew ls --versions <package_name>
is the most accurate method. This command lists all installed versions of a given package. If the package is not installed at all, it will return an empty output and a non-zero exit code.
PACKAGE_NAME="node"
if brew ls --versions "$PACKAGE_NAME" &>/dev/null; then
echo "$PACKAGE_NAME is installed."
else
echo "$PACKAGE_NAME is NOT installed."
fi
# To check for a specific version, e.g., Node.js 18
if brew ls --versions "$PACKAGE_NAME" | grep -q "18."; then
echo "Node.js version 18 is installed."
else
echo "Node.js version 18 is NOT installed."
fi
Detecting package installation and specific versions using brew ls --versions
.
flowchart TD A[Start Script] --> B{Is Homebrew installed?} B -- No --> C[Install Homebrew (if desired)] B -- Yes --> D{Check if <package_name> is installed using `brew list`?} D -- Yes --> E["<package_name> is installed. Proceed."] D -- No --> F{Check if <package_name> is installed using `brew info`?} F -- Yes --> E F -- No --> G["<package_name> is NOT installed. Install it?"] G -- Yes --> H[Run `brew install <package_name>`] G -- No --> I[Exit Script] H --> E E --> J[Continue Script Logic] C --> D
Decision flow for checking and potentially installing a Homebrew package.
Choosing the Right Method
The best method depends on your specific needs:
brew list | grep
: Ideal for simple checks where you just need to know if any version of a package is present. It's fast and reliable.brew info
: Useful if you might need more details about the package later in your script, or if you prefer a more 'official' Homebrew command for status checking. Its exit code is reliable.brew ls --versions | grep
: Essential when your script requires a specific version of a package, or needs to differentiate between multiple installed versions.
command -v brew
.