An independent package manager for compiled binaries.
- 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
Stewfile
with optional pinned versioning. - Headless batch installs from a
Stewfile.lock.json
file.
Stew supports macOS, Linux, and Windows.
macOS
brew install marwanhawari/tap/stew
Arch
git clone https://aur.archlinux.org/stew.git
cd stew
makepkg -sric
Compiled binaries can be downloaded from the releases page.
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 .
# Install from GitHub releases
stew install junegunn/fzf # Install the latest release
stew install junegunn/[email protected] # 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 mutliple 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 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 a specific GitHub repo's releases and assets with a terminal UI
stew browse sharkdp/hyperfine
# 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 a binary
stew uninstall rg # Uninstall using the name of the binary directly
stew uninstall --all # Uninstall all binaries
# Rename an installed binary using an interactive UI
stew rename rg # Rename using the name of the binary directly
# List installed binaries
stew list # Print to console
stew list > Stewfile # Create an Stewfile without pinned tags
stew list --tags > Stewfile # Pin tags
# Configure the stew file paths using an interactive UI
stew config # Automatically updates the stew.config.json
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 wherestew
data is stored. - The
stewBinPath
: this is wherestew
installs 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.json
file. If it cannot find one, then you will be prompted to set the configuration values. - After
stew
is installed, you can use thestew config
command to set the configuration values. - At any time, you can manually create or edit the
stew.config.json
file. 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
.
The repo probably uses an unconventional naming scheme for their binaries. You can always manually select the release asset.
Yes, stew
will automatically detect if you have a GITHUB_TOKEN
environment variable and allow you to access binaries from your private repositories.