Is there a way to list all the homebrew packages explicitly installed by the user (they they installed directly using brew install)?

Note brew leaves doesn't do this. Over time formula can change change their dependencies leaving orphaned leaves that were never explicitly installed by the user or adding dependencies on previously explicitly installed packages.

3 Answers 3


I like @orlp's solution using jq, but I should mention that you can also use

brew leaves --installed-on-request

to exclude orphaned packages from brew leaves output. See docs

  • Firstly, welcome to Ask Different! :) I hope you come to find this site has a lot to offer! In case you haven't already, it's worth taking the time to read the tour. All the best!
    – Monomeeth
    Commented Jan 1, 2023 at 22:39
  • 1
    Best answer, thanks!
    – Adam Shand
    Commented Feb 26, 2023 at 7:10
  • 1
    This gives the wrong answer if anything that you installed is no longer a leaf. This will happen if you install something that has a dependency on something you installed manually.
    – Inigo
    Commented Dec 31, 2023 at 0:18
  • @Inigo That's right, solution usingbrew info is more correct
    – Azerum
    Commented Feb 9 at 1:02
  • 1
    brew info doesn't give any info on this. @orlp's answer, brew bundle dump --file - is the best as it includes things you installed manually even if they are no longer leaves, in addition to taps and casks you installed. I wrote up a whole analysis in my answer on StackOverflow. It's very easy to create an alias so you don't have to remember that long command.
    – Inigo
    Commented Feb 9 at 2:15

Simple mode using brew bundle

We can list all taps, formulae and casks that were added by the user on stdout:

brew bundle dump --file -

Or we can do it manually, without using brew bundle.

Listing all brew taps

brew tap

Listing all brew formulae installed on request

This ignores any formulae that were added automatically as dependencies, but unlike brew leaves will still show any packages that are dependencies if you installed them manually as well, and avoids listing 'orphaned' packages:

brew info --json=v2 --installed \
    | jq -r '.formulae[]|select(any(.installed[]; .installed_on_request)).full_name'

Listing all brew casks installed

At the time of writing (2022-03-20) brew doesn't keep track of which casks were installed on request, but few if any casks are dependencies for other casks/formulae, so we can simply list them all:

brew list --cask -l1

Seems that you can use brew bundle:

brew bundle dump --file /tmp/x
brew bundle list --file /tmp/x --formula

the temporary file can be avoided using pipes

brew bundle dump --file - | brew bundle list --file - --formula
  • Also doesn't work for me. It lists glib in all cases, although I didn't install glib explicitly. Where as brew leaves does not list it. Commented Jul 4, 2023 at 2:39

You must log in to answer this question.

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