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).
`brew switch libfoo mycopy`

You can use `brew switch` to switch between versions of the same package, if it's installed as versioned subdirectories under `Cellar/<packagename>/`

This will list versions installed ( for example I had `Cellar/sdl2/2.0.3`, I've compiled into `Cellar/sdl2/2.0.4`)

```
brew info sdl2

```

Then to switch between them

```
brew switch sdl2 2.0.4
brew info 

```

Info now shows `*` next to the 2.0.4

To install under `Cellar/<packagename>/<version>` from source you can do for example

```
cd ~/somewhere/src/foo-2.0.4
./configure --prefix $(brew --Cellar)/foo/2.0.4
make

```

check where it gets installed with

```
make install -n

```

if all looks correct

```
make install

```

Then from `cd $(brew --Cellar)` do the switch between version.

I'm using `brew version 0.9.5`