Question: I have a few kegs of the same package in `/usr/local/Cellar/libfoo` like `/usr/local/Cellar/libfoo/1.0.1`, `/usr/local/Cellar/libfoo/HEAD` and `/usr/local/Cellar/libfoo/mycopy`

How can I brew link to a specific version?

Answer: 
**[This is probably the best way as of 11.1.2022](https://stackoverflow.com/a/9832084/1574376):**

To install a specific version, e.g. postgresql 9.5 you simply run:

```
$ brew install postgresql@9.5

```

To list the available versions run a search with @:

```
$ brew search postgresql@
==> Formulae
postgresql                 postgresql@11              postgresql@13              postgresql@9.5             qt-postgresql
postgresql@10              postgresql@12              postgresql@9.4             postgresql@9.6             postgrest

==> Casks
navicat-for-postgresql

```

---

**DEPRECATED in Homebrew 2.6.0 (December 2020):**

The usage info:

```
Usage: brew switch <formula> <version>

```

Example:

```
brew switch mysql 5.5.29

```

You can find the versions installed on your system with `info`.

```
brew info mysql

```

And to see the available versions to install, you can provide a dud version number, as brew will helpfully respond with the available version numbers:

```
brew switch mysql 0

```

---

**Update (15.10.2014):**

The `brew versions` command has been removed from brew, but, if you do wish to use this command first run `brew tap homebrew/boneyard`.

The recommended way to install an old version is to install from the `homebrew/versions` repo as follows:

```
$ brew tap homebrew/versions
$ brew install mysql55

```

---

For detailed info on all the ways to install an older version of a formula read [this answer](https://stackoverflow.com/a/4158763/1574376).
Homebrew removed `brew switch` subcommand in [Homebrew 2.6.0](https://brew.sh/2020/12/01/homebrew-2.6.0/). Get it back from [here](https://github.com/laggardkernel/homebrew-tap#external-commands).

```sh
brew tap laggardkernel/tap
brew switch --help

```

---

### name@version formula

There's mainly two ways to switch to an old version of an app.

If it's a bigger version change. Homebrew may have created a versioned package in the repo. Like `go`, `go@1.10`, they are two different formulae, installed into two different locations.

```sh
# install the old one
brew install go@1.10

# link the executable into /usr/local/bin, or /opt/homebrew/bin
brew link --overwrite --force go@1.10

```

### brew switch

But not every package has a versioned variant. If you just upgraded to the new version and the old one is still in your system, skip step 1, 2.

1. In this situation, search in the [homebrew-core](https://github.com/Homebrew/homebrew-core/) repo and download the specific formula. e.g. [mysql 8.0.23](https://github.com/Homebrew/homebrew-core/blob/58946207e43b0e7222f6c920ef4b053e52baf76d/Formula/mysql.rb)
2. Download the **raw** file, and install from it `brew install /path/to/downloaded/mysql.rb`.
3. Now both the latest and the old 8.0.23 (same formula `mysql`) exist, switch (link out) the old version with `brew switch mysql 8.0.23`

`brew info mysql` will list all the old version still exist.

Step 1, 2 could be replaced by `brew extract`, but that requires user maintain its own tap. I won't cover it here, just search it if you're interested.