1036

Is it possible to and how do I get a list of all the packages installed on my Mac using Homebrew? I am not interested in packages installed outside of Homebrew.

0

11 Answers 11

1207

brew list and brew list --cask

Running brew list will show a list of all your installed Homebrew packages.

In addition, brew list --cask will provide the items installed using Homebrew Cask.

brew list

7
  • 4
    If you had this list in a txt file. How would you go about installing all of them? brew install < list.txt doesn't seem to work.
    – Jonathan
    Commented Nov 4, 2014 at 14:19
  • 64
    @Jonathan xargs brew install < list.txt Feel free to ask a separate question for more details or clarification.
    – grg
    Commented Nov 4, 2014 at 19:33
  • 4
    @grgarside - love ur terminal prompt. would you be willing to share your config files for getting my prompt to look like that?
    – KG -
    Commented Dec 9, 2014 at 20:21
  • 3
    @Kaushik I've finally written a blog post about my terminal/shell setup—feel free to ask any questions there.
    – grg
    Commented Dec 14, 2014 at 12:56
  • 13
    also added the --versions flag at the end to get the list with the versions installed
    – Hossein A
    Commented Mar 3, 2021 at 0:22
668

brew leaves shows you all top-level packages; packages that are not dependencies. This should be the most interesting if you are using the list to re-install packages.

To include formula descriptions, use

brew leaves | xargs brew desc --eval-all

To include cask descriptions, use

brew ls --casks | xargs brew desc --eval-all
5
  • 40
    Only list leaves that were manually installed: brew leaves --installed-on-request | xargs -n1 brew desc Commented Oct 26, 2021 at 3:08
  • 7
    brew leaves is missing any casks
    – Carl Walsh
    Commented Dec 19, 2021 at 18:14
  • 14
    At least since brew 3.5.10 (August 2022), brew desc is deprecated; brew desc --eval-all should be used. Also, this allows fetching descriptions for more than one package in one call. This is quicker by a factor of roughly the number of descriptions requested. This modified xargs command will make use of that: brew leaves | xargs brew desc --eval-all
    – Carl
    Commented Sep 6, 2022 at 16:26
  • 2
    @PabloBianchi what leaves would not have been installed on request?
    – user150109
    Commented Feb 15 at 14:20
  • brew leaves won't list anything you specifically installed that is also dependency of something else you installed. The new command, brew list --installed-on-request, solves this problem. It was added in April 2024.
    – Inigo
    Commented Dec 9 at 20:45
167

brew bundle may also be interesting if you are asking because you want to manage your brew installation. This includes casks, which brew list does not. It is aimed at having reproducible Homebrew setups.

# creates Brewfile in the current directory from currently-installed packages
brew bundle dump
# edit Brewfile
# install everything from the Brewfile
brew bundle

You can use the --global flag to operate on your ~/.Brewfile and -f/--force to force overwriting of your existing file (for installation, this will force uninstallation of not-listed packages).

4
  • 9
    A recent dump of mine suggests that bundle now excludes dependencies. There are some other changes like quote style and ordering that are making it harder to understand the diff, but overall it looks like at least some libraries are missing from Brewfile but installed. Commented May 16, 2017 at 5:04
  • • My desired effect is to have the same brew based software at my disposal on machine B like I now have at machine A. But to freshly configure the individual apps there to have a save fresh start and get rid of any cruft I may accumulated over the years on machine A. • Is "brew bundle dump" on machine A, moving ~/Brewfile to machine B and there running "brew bundle" the right command sequence for this purpose? • After installation on the new machine B will brew there install the correct architecture (i.e. Apple Silicon instead of Intel x64) and install all necessary dependencies?
    – porg
    Commented Oct 24, 2021 at 10:46
  • 2
    You can check brew bundle --help for specifics and examine the Brewfile. I believe this answer is more complete and idiomatic way to do it than the accepted answer - for example, it includes taps and casks. It is architecture-independent and will install dependencies. If you want machine B to also uninstall packages which are not in the Brewfile, you'll need to provide --cleanup or do a separate brew bundle cleanup. Commented Oct 24, 2021 at 11:05
  • That's probably the best option I have seen. It also works with optional software mas-cli that manages App Store installations, so you can not only save the brews and casks but also software installed through App Store! Sweet; thanks for sharing.
    – Rafael
    Commented Jan 22, 2023 at 16:01
100

Executing brew list command shows a simple, alphabetically sorted list of all the installed formulae and Casks (GUI apps) into two separate sections.

enter image description here

However, other required formulae (dependencies) get automatically installed when installing a formulae. It is possible to view the list of all the installed packages as a nicely formatted dependency tree. To view it, execute the following command:

brew deps --tree --installed

An example output is as shown below:

enter image description here

The independently listed formulae (e.g. bash, brotli, ca-certificates etc.) have no dependencies. The formulae depicted as part of a tree structure have their dependency listed at an immediate lower level in the tree (e.g. cocoapods requires ruby which in tern requires libyaml to be installed). The formulae listed at the leaf nodes in the tree structures have no further dependencies.

Dependencies visualised in a tree structure like this can help in easily getting rid of the unnecessary packages.

1
  • 3
    Great answer. I'm getting my top-level packages with: brew deps --tree --installed --full-name | grep -v "└" | grep -e "^\w" | count. How to see the differences between formulae and casks Commented Dec 20, 2021 at 9:57
20

Others have mentioned brew list --installed-on-request, which lists only those things you installed (as opposed to installed as dependencies), and brew deps --tree --installed which lists the dependency tree for all installed packages.

I find the most useful output of any answers yet is the combination of these.

brew deps --tree $(brew list --installed-on-request)

This will list each thing you manually installed, including casks, along with the installed dependency tree for each.

2
15

You may use brew list | grep 'package-name' or if are looking for specific package.
brew list 'package-name' also works and provides additional information.

9

To see brew packages :

brew list

To see cask packages :

brew list --cask

To see upgradable brew packages :

brew outdated

To see upgradable cask packages

brew outdated --cask
0
8

You can use this snippet to list all installed packages and sort them by their size.

brew list --formula | \
    xargs -n1 -P8 -I {} \
    sh -c "
        brew info {} | \
        egrep '[0-9]* files, ' | \
        sed 's/^.*[0-9]* files, \(.*\)).*$/{} \1/'
    " | \
    sort -h -r -k2 - | \
    column -t
2
  • Cool but it seems to hammer my CPU and disk. I wonder when it will finish.
    – sorin
    Commented Oct 28, 2021 at 10:13
  • Yes, getting the size requires an info query for each package. It takes around a minute for 120 packages. Commented Oct 29, 2021 at 11:48
5

Short and crisp

brew list --versions


MACBOOK:/ world.peace$ brew list --version
apache-spark 3.2.1
openjdk 18
openjdk@11 11.0.14.1
sbt 1.6.2
scala 2.13.8
tree 2.0.2

Similarly, you can use:

brew list --cask
0
3

This commands lists manually installed packages, cask or not, with versions:

cat \
    <(brew leaves --installed-on-request) \
    <(brew list --cask -1) |
brew ls --versions | sort | uniq

Also to see which packages are installed by both cask and not cask:

cat \
    <(brew leaves --installed-on-request) \
    <(brew list --cask -1) |
sort | uniq
3
-1

If you want to migrate the packages to another MacBook it's nice to know the different lists for formulae and casks:

List all top level installed packages (without casks)

comm -12 \
<(brew deps --tree --installed --full-name | grep -v "└" | grep -e "^\w" | sort) \
<(brew ls --full-name --formula | sort)

List all top level installed casks (without packages)

comm -12 \
<(brew deps --tree --installed --full-name | grep -v "└" | grep -e "^\w" | sort) \
<(brew ls --full-name --cask | sort)

Alternatively you can use sort and uniq:

sort \
<(brew deps --tree --installed --full-name | grep -v "└" | grep -e "^\w" | sort) \
<(brew ls --full-name --cask | sort) \
| uniq -d
1
  • 1
    Isn‘t this simplified by brew bundle dump/brew bundle install?
    – nohillside
    Commented Dec 20, 2021 at 11:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .