Skip to content

Home

Quickstart

curl --proto '=https' --tlsv1.2 -LsSf https://get.dist.sh | sh
OR
wget --https-only --secure-protocol=TLSv1_2 -qO- https://get.dist.sh | sh

iwr https://get.dist.sh/install.ps1 -useb | iex

Note: Yes, I know, you really shouldn't download and run scripts from the internet, but at least it's not using sudo!

Overview

Without a doubt, homebrew has had a major impact on the macOS and even the linux ecosystem. It has made it easy to install software and keep it up to date. However, it has been around for 15+ years and while it has evolved over time, its core technology really hasn't changed, and 15+ years is an eternity in the tech world. Languages like Go and Rust have made it easy to compile binaries and distribute them without complicated installers or dependencies. I love homebrew, but I think there's room for another tool.

distillery is a tool that is designed to make it easy to install binaries on your system from multiple different sources. The tool is designed to be straightforward to use. It is NOT designed to be a package manager or handle complex dependencies, that's where homebrew shines.

The goal of this project is to install binaries by leveraging the collective power of all the developers out there. It is now 2026 and more and more developers are using tools like goreleaser and cargo-dist and many others to pre-compile their software and put their binaries up on GitHub, GitLab, or Codeberg. Tools like goreleaser are expanding to support other languages as well.

Let's take advantage of that and make it easy to install those binaries on your system.

Features

  • Simple to install binaries on your system from multiple sources
  • No reliance on a centralized repository of metadata like package managers
  • Support for multiple platforms and architectures
  • Support private repositories (this was a feature removed from homebrew)
  • Support checksum verifications (if they exist)
  • Support signature verifications (if they exist)
  • Aliases for easy access to binaries

Experimental Features

  • Caching of GitHub API calls

Caching of GitHub API calls

Currently, you have to opt in with an environment variable to enable caching of GitHub API calls and it will only work if you are NOT using a GitHub Token. I've implemented a simple caching service that will cache the results of non-authenticated GitHub API calls to help prevent hitting the rate limit. This is an experimental feature that uses a cloud service I wrote. It only works for public repos, I only log hits and misses for debug purposes, no other data is kept. DISTILLERY_USE_CACHE is the environment variable to enable this feature.

Examples

Install a specific version of a tool using @version syntax. github is the default scope, this implies github/ekristen/aws-nuke

dist install ekristen/aws-nuke@3.16.0

Install a tool from a specific owner and repository, in this case hashicorp. This will install the latest version. However, because hashicorp hosts their binaries on their own domain, distillery has special handling for obtaining the latest version from releases.hashicorp.com instead of GitHub.

dist install hashicorp/terraform

Install a binary from GitLab.

dist install gitlab/gitlab-org/gitlab-runner

Usually installing from GitHub or GitLab is enough, but if you are on a macOS system and Homebrew has the binary you want, you can install it using the homebrew scope. I would generally still recommend just installing from GitHub or GitLab directly if it is available, but this is a nice fallback.

dist install homebrew/opentofu

Behaviors

  • Allow for multiple versions of a binary using tool@version syntax
  • Running installation for any version will automatically update the default symlink to that version (i.e. switching versions)
  • Caching of HTTP calls where possible (GitHub primarily)
  • Caching of downloads

Whenever you run install the default symlink will always be updated to whatever version you specify. This is to make it easy to switch versions.

Multiple Versions

Every time you run install it will by default seek out the latest version, it will not remove any other versions. All versions are symlinked with the suffix @version this means you can have multiple versions installed at the same time.

It also means you can call any version any time using the @version syntax, and then you can always use aliases to set specific versions when in specific folders. This is useful for tools like terraform.