It’s possible to install older versions of Homebrew packages by saving an older version of the corresponding Ruby file locally and running brew install <package>.rb
. I’ll use the terraform
package as an example.
TL;DR: If I wanted to downgrade to Terraform 1.3.6, I would need to:
- Find the Ruby file for that specific version of Terraform on the Homebrew GitHub repo
- Download the Ruby file
- Uninstall the current version of terraform by running
brew remove terraform
- Install the older version defined in the Ruby file by running
brew install terraform.rb
Let’s say we have terraform
version 1.4.5 but we need terraform
version 1.3.6. We can start by browsing to
https://github.com/Homebrew/homebrew-core/tree/master/Formula and try to find the formula for terraform
under the t
directory.

Since there are a lot of files here, it’s easier to just modify the URL path in the browser. Modify the path based on the directory the command is in: Take the name of the package and append it at the end of the url, adding /<directory-containing-package>/<package-name>.rb
to the URL. The .rb
is important because all Homebrew packages are defined in Ruby (files with the .rb
extension).
In this case, we’ll append /t/terraform.rb
to the URL like so:
https://github.com/Homebrew/homebrew-core/blob/master/Formula/t/terraform.rb
That URL will then take us to the Ruby file where the terraform
Homebrew package is defined.

Next, click the “History” link on the upper right above the code, or just click on this link https://github.com/Homebrew/homebrew-core/commits/master/Formula/t/terraform.rb. In the next page, scroll down until you see the “terraform: update 1.3.6 bottle” link. Note that you may need to click on “Browse History” at the bottom of this page before continuing your search.

Click on the terraform: update 1.3.6 bottle link to see this page:

On the right side above the code block, click on the three dots, then click on “View file”.

This will take you to the package formula for this specific version of terraform.

On the upper right side of the code block, click on “Raw”. This
gives us the exact code we need to install Terraform 1.3.6. Save the code locally to a file called terraform.rb
. You can manually copy and paste or use curl
:
|
|
Then, remove the existing package:
$ brew remove terraform
Uninstalling /usr/local/Cellar/terraform/1.4.5... (6 files, 69MB)
Then run brew install
but specify the file you saved locally to install the older version. We’ll get some warnings but it should be fine.
$ brew install terraform.rb
Error: Failed to load cask: terraform.rb
Cask 'terraform' is unreadable: wrong constant name #<Class:0x00007feed1183f18>
Warning: Treating terraform.rb as a formula.
==> Downloading https://formulae.brew.sh/api/formula.jws.json
######################################################################## 100.0%
==> Fetching terraform
==> Downloading https://ghcr.io/v2/homebrew/core/terraform/manifests/1.3.6
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/terraform/blobs/sha256:dad3b9cce25f6ae0d5ddb06029fc266af2d337013828fda6b5fb6c2bcf3f5d
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:dad3b9cce25f6ae0d5ddb06029fc266af2d337013828fda6b
######################################################################## 100.0%
Warning: terraform 1.4.5 is available and more recent than version 1.3.6.
==> Pouring terraform--1.3.6.ventura.bottle.tar.gz
==> Downloading https://formulae.brew.sh/api/cask.jws.json
######################################################################## 100.0%
🍺 /usr/local/Cellar/terraform/1.3.6: 6 files, 65MB
==> Running `brew cleanup terraform`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /Users/nelson/Library/Caches/Homebrew/terraform--1.3.6... (19.4MB)
Now terraform
version 1.3.6 is installed!
$ terraform version
Terraform v1.3.6