stew
An independent package manager for compiled binaries.
Features
- Install binaries from GitHub releases or directly from URLs.
- Easily distribute binaries across teams and private repositories.
- Get the latest releases ahead of other package managers.
- Rapidly browse, install, and experiment with different projects.
- Configure where to install binaries.
- No need for
sudo. - Just a single binary with 0 dependencies.
- Portable
Stewfilewith optional pinned versioning. - Headless batch installs from a
Stewfile.lock.jsonfile.
Installation
Stew supports macOS, Linux, and Windows.
Install using a package manager
macOS
brew install marwanhawari/tap/stew
Arch
git clone https://aur.archlinux.org/stew.git
cd stew
makepkg -sricDownload a compiled binary
Compiled binaries can be downloaded from the releases page.
Install using Go
Install the latest released version
go install github.com/marwanhawari/stew@latest
Install the latest unreleased source
git clone https://github.com/marwanhawari/stew cd stew go install .
Usage
Install
# Install from GitHub releases stew install junegunn/fzf # Install the latest release stew install junegunn/fzf@0.27.1 # Install a specific, tagged version # Install directly from a URL stew install https://github.com/cli/cli/releases/download/v2.4.0/gh_2.4.0_macOS_amd64.tar.gz # Install from an Stewfile stew install Stewfile # Install headlessly from a Stewfile.lock.json stew install Stewfile.lock.json # Install multiple binaries per repo/asset stew install astral-sh/uv # Install uv the first time stew install astral-sh/uv # Install uvx the second time
Search
# Search for a GitHub repo and browse its contents with a terminal UI stew search ripgrep stew search fzf user:junegunn language:go # Use GitHub search syntax
Browse
# Browse a specific GitHub repo's releases and assets with a terminal UI
stew browse sharkdp/hyperfineUpgrade
# Upgrade a binary to its latest version. Not for binaries installed from a URL. stew upgrade rg # Upgrade using the name of the binary directly stew upgrade --all # Upgrade all binaries
Uninstall
# Uninstall a binary stew uninstall rg # Uninstall using the name of the binary directly stew uninstall --all # Uninstall all binaries
Rename
# Rename an installed binary using an interactive UI stew rename rg # Rename using the name of the binary directly
List
# List installed binaries stew list # Print to console stew list > Stewfile # Create an Stewfile without pinned tags stew list --tags > Stewfile # Pin tags
Config
# Configure the stew file paths using an interactive UI stew config # Automatically updates the stew.config.json
Configuration
stew can be configured with a stew.config.json file. The location of this file will also depend on your OS:
| Linux/macOS | Windows |
|---|---|
$XDG_CONFIG_HOME/stew or ~/.config/stew |
~/AppData/Local/stew/Config |
You can configure 2 aspects of stew:
- The
stewPath: this is wherestewdata is stored. - The
stewBinPath: this is wherestewinstalls binaries excludeFromUpgradeAll: this is the list of binaries that you don't want to be upgraded duringstew upgrade --all, perhaps because they have their own built in upgrade feature or because you want to pin a specific version.
The default locations for the stewPath and stewBinPath are:
| Linux/macOS | Windows | |
|---|---|---|
stewPath |
$XDG_DATA_HOME/stew or ~/.local/share/stew |
~/AppData/Local/stew |
stewBinPath |
~/.local/bin |
~/AppData/Local/stew/bin |
There are multiple ways to configure these:
- When you first run
stew, it will look for astew.config.jsonfile. If it cannot find one, then you will be prompted to set the configuration values. - After
stewis installed, you can use thestew configcommand to set the configuration values. - At any time, you can manually create or edit the
stew.config.jsonfile. It should have values forstewPath,stewBinPath, andexcludeFromUpgradeAll.
Make sure that the installation path is in your PATH environment variable. Otherwise, you won't be able to use any of the binaries installed by stew.
FAQ
Why couldn't stew automatically find any binaries for X repo?
The repo probably uses an unconventional naming scheme for their binaries. You can always manually select the release asset.
Will stew work with private GitHub repositories?
Yes, stew will automatically detect if you have a GITHUB_TOKEN environment variable and allow you to access binaries from your private repositories.
I'm hitting the GitHub API rate limit when installing from a large Stewfile.lock.json. How can I avoid this?
Unauthenticated GitHub API requests are limited to 60 requests per hour. However, authenticated requests can make up to 5,000 requests per hour. To avoid hitting the limit, set a GITHUB_TOKEN environment variable. Stew will automatically detect it and use it for authenticated GitHub API requests.

