{"id":19905558,"url":"https://github.com/ekristen/distillery","last_synced_at":"2026-04-27T02:00:52.986Z","repository":{"id":260182704,"uuid":"820226877","full_name":"ekristen/distillery","owner":"ekristen","description":"like homebrew but with less fizz. install binaries as fast and as easy as possible. no package manager, no recipes or metadata to update, just install and go","archived":false,"fork":false,"pushed_at":"2026-04-19T16:58:28.000Z","size":1103,"stargazers_count":58,"open_issues_count":19,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-19T18:38:44.837Z","etag":null,"topics":["bin","binaries","fast","golang","installer"],"latest_commit_sha":null,"homepage":"https://dist.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ekristen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"ekristen"}},"created_at":"2024-06-26T04:05:32.000Z","updated_at":"2026-04-17T19:16:00.000Z","dependencies_parsed_at":"2026-03-03T04:08:02.584Z","dependency_job_id":null,"html_url":"https://github.com/ekristen/distillery","commit_stats":null,"previous_names":["ekristen/distillery"],"tags_count":145,"template":false,"template_full_name":"ekristen/go-project-template","purl":"pkg:github/ekristen/distillery","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekristen%2Fdistillery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekristen%2Fdistillery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekristen%2Fdistillery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekristen%2Fdistillery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ekristen","download_url":"https://codeload.github.com/ekristen/distillery/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekristen%2Fdistillery/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32319560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bin","binaries","fast","golang","installer"],"created_at":"2024-11-12T20:33:48.806Z","updated_at":"2026-04-27T02:00:52.980Z","avatar_url":"https://github.com/ekristen.png","language":"Go","funding_links":["https://github.com/sponsors/ekristen"],"categories":[],"sub_categories":[],"readme":"# Distillery\n\n![GitHub License](https://img.shields.io/github/license/ekristen/distillery)\n[![Known Vulnerabilities](https://snyk.io/test/github/ekristen/distillery/badge.svg)](https://snyk.io/test/github/ekristen/distillery)\n[![Go Report Card](https://goreportcard.com/badge/github.com/ekristen/distillery)](https://goreportcard.com/report/github.com/ekristen/distillery)\n![GitHub Release](https://img.shields.io/github/v/release/ekristen/distillery?include_prereleases)\n![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/ekristen/distillery/total)\n\n## Overview\n\nWithout a doubt, [homebrew](https://brew.sh) has had a major impact on the macOS and even the linux ecosystem. It has made it easy\nto install software and keep it up to date. However, it has been around for 15+ years and while it has evolved over time,\nits core technology really hasn't changed, and 15+ years is an eternity in the tech world. Languages like [Go](https://golang.org)\nand [Rust](https://www.rust-lang.org) have made it easy to compile binaries and distribute them without complicated\ninstallers or dependencies. **I love homebrew**, but I think there's room for another tool.\n\n**dist**illery is a tool that is designed to make it easy to install binaries on your system from multiple different\nsources. It is designed to be straightforward and simple to use. It is **NOT** designed to be a package manager or\nhandle complex dependencies, that's where homebrew shines.\n\nThe goal of this project is to install binaries by leveraging the collective power of all the developers out there. It\nis now 2026 and more and more developers are using tools like [goreleaser](https://goreleaser.com/) and [cargo-dist](https://github.com/axodotdev/cargo-dist)\nand many others to pre-compile their software and put their binaries up on GitHub, GitLab, or Codeberg. Tools like goreleaser are\nexpanding to support other languages as well.\n\nLet's take advantage of that and make it easy to install those binaries on your system.\n\n## Documentation\n\n[Full Documentation](https://dist.sh)\n\n## Features\n\n- Simple to install binaries on your system from multiple sources\n- No reliance on a centralized repository of metadata like package managers\n- Support for multiple platforms and architectures\n- Support private repositories (this was a feature removed from homebrew)\n- Support checksum verifications (if they exist)\n- Support signature verifications (if they exist)\n- Configurable [aliases](https://dist.sh/config/aliases/) for shorthand binary names\n\n## Quickstart\n\nSee full documentation at [Installation](https://dist.sh/installation/)\n\n**Note:** the installation script **DO NOT CURRENTLY** try to modify your path, you will need to do that manually.\n\n### MacOS/Linux\n```bash\ncurl --proto '=https' --tlsv1.2 -LsSf https://get.dist.sh | sh\n```\n\nOR with `wget`\n\n```bash\nwget --https-only --secure-protocol=TLSv1_2 -qO- https://get.dist.sh | sh\n```\n\n### Windows\n```powershell\niwr https://get.dist.sh/install.ps1 -useb | iex\n```\n\n### Adjust Your Path\n\n#### MacOS/Linux\n\n```bash\nexport PATH=$HOME/.distillery/bin:$PATH\n```\n\n#### Windows\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"Path\", \"C:\\Users\\\u003cusername\u003e\\.distillery\\bin;\" + $env:Path, [EnvironmentVariableTarget]::User)\n```\n\n## Behaviors\n\n- Allow for multiple versions of a binary using `tool@version` syntax\n- Running installation for any version will automatically update the default symlink to that version (i.e. switching versions)\n- Caching of HTTP calls where possible (GitHub primarily)\n- Caching of downloads\n\n### Running install always updates default symlink\n\n**Note:** this might change before exiting beta.\n\nWhenever you run install the default symlink will always be updated to whatever version you specify. This is to make\nit easy to switch versions.\n\n### Multiple Versions\n\nEvery time you run install it will by default seek out the latest version, it will not remove any other versions. All\nversions are symlinked with the suffix `@version` this means you can have multiple versions installed at the same time.\n\nIt also means you can call any version any time using the `@version` syntax or if you are using something like [direnv](https://direnv.net/)\nyou can set aliases in your `.envrc` file for specific versions.\n\n#### Example\n\n```console\nalias terraform=\"terraform@1.8.5\"\n```\n\n### Examples\n\nInstall a specific version of a tool using `@version` syntax. `github` is the default scope, this implies\n`github/ekristen/aws-nuke`\n\n```console\ndist install ekristen/aws-nuke@3.16.0\n```\n\nInstall a tool from a specific owner and repository, in this case hashicorp. This will install the latest version.\nHowever, because hashicorp hosts their binaries on their own domain, distillery has special handling for obtaining\nthe latest version from releases.hashicorp.com instead of GitHub.\n\n```console\ndist install hashicorp/terraform\n```\n\nInstall a binary from GitLab.\n```console\ndist install gitlab/gitlab-org/gitlab-runner\n```\n\nInstall a binary from Codeberg.\n```console\ndist install codeberg/forgejo-contrib/forgejo-cli\n```\n\nUsually installing from GitHub, GitLab, or Codeberg is enough, but if you are on a macOS system and Homebrew\nhas the binary you want, you can install it using the `homebrew` scope. I would generally still recommend just\ninstalling from GitHub or GitLab directly if it is available, but this is a nice fallback.\n\n```console\ndist install homebrew/opentofu\n```\n\n## Commands\n\n- **`dist install`** - Install binaries from sources (see examples above)\n- **`dist uninstall`** - Remove installed binaries (dry-run by default, use `--no-dry-run` to execute)\n- **`dist list`** - List all installed binaries and their versions\n- **`dist info`** - Display system info, config paths, and cache locations\n- **`dist run`** - Execute a [Distfile](https://dist.sh/distfile/) (batch installation file, similar to a Brewfile)\n- **`dist proof`** - Generate a Distfile from your currently installed binaries\n- **`dist clean`** - Clean up orphaned symlinks (dry-run by default, use `--no-dry-run` to execute)\n\n## Supported Sources\n\n- GitHub\n- GitLab\n- Forgejo / Codeberg (Codeberg works out of the box; any Forgejo instance can be configured)\n- Homebrew (binaries only, if anything has a dependency, it will not work at this time)\n- Hashicorp (special handling for their releases, pointing to GitHub repos will automatically pass through)\n- Kubernetes (special handling for their releases, pointing to GitHub repos will automatically pass through)\n- Helm (special handling for Helm project releases on GitHub)\n\n### Authentication\n\nDistillery supports authentication for GitHub, GitLab, and Forgejo/Codeberg. There are CLI options to pass\nin a token, but the preferred method is to set the appropriate environment variable using a tool like\n[direnv](https://direnv.net/).\n\n| Source | Environment variable | CLI flag |\n|---|---|---|\n| GitHub | `DISTILLERY_GITHUB_TOKEN` | `--github-token` |\n| GitLab | `DISTILLERY_GITLAB_TOKEN` | `--gitlab-token` |\n| Forgejo / Codeberg | `DISTILLERY_FORGEJO_TOKEN` | `--forgejo-token` |\n\n## Directory Structure\n\nThis is the default directory structure that distillery uses. Some of this can be overridden via the configuration.\n\n- Binaries\n  - Symlinks `$HOME/.distillery/bin` (this should be in your `$PATH` variable)\n  - Binaries `$HOME/.distillery/opt` (this is where the raw binaries are stored and symlinked to)\n    - `source/owner/repo/version/\u003cbinaries\u003e`\n      - example: `github/ekristen/aws-nuke/v2.15.0/aws-nuke`\n      - example: `hashicorp/terraform/v0.14.7/terraform`\n- Cache directory (downloads, http caching)\n  - MacOS `$HOME/Library/Caches/distillery`\n  - Linux `$HOME/.cache/distillery`\n  - Windows `$HOME/AppData/Local/distillery`\n\n### Caching\n\nAt the moment there are two discrete caches. One for HTTP requests and one for downloads. The HTTP cache is used to\nstore the ETag and Last-Modified headers from the server to determine if the file has changed. The download cache is\nused to store the downloaded file. The download cache is not used to determine if the file has changed, that is done\nby the HTTP cache.\n\nIf you need to delete your cache simply run `dist info` identify the cache directory and remove it.\n\n#### Experimental: Distillery Pass-Through Cache\n\nDistillery includes an experimental cloud-based pass-through cache for GitHub API calls that helps avoid rate limits\nwhen you are **not** using a GitHub token. This is useful for public repositories when you don't want to set up\nauthentication just to avoid rate limiting.\n\nTo enable it, set the `DISTILLERY_USE_CACHE` environment variable or use the `--use-dist-cache` flag:\n\n```bash\nexport DISTILLERY_USE_CACHE=true\ndist install ekristen/aws-nuke\n```\n\nOr per-command:\n\n```console\ndist install --use-dist-cache ekristen/aws-nuke\n```\n\n**Note:** This only works for unauthenticated requests to public repositories. If you have `DISTILLERY_GITHUB_TOKEN`\nset, the pass-through cache is not used. The cache service only logs hits and misses for debug purposes; no other\ndata is retained.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekristen%2Fdistillery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fekristen%2Fdistillery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekristen%2Fdistillery/lists"}