Skip to content

πŸ₯˜ An independent package manager for compiled binaries.

License

Notifications You must be signed in to change notification settings

marwanhawari/stew

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

64 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

stew icon

stew

An independent package manager for compiled binaries.

build status go report card Coverage Status pkg.go.dev reference Mentioned in Awesome Go

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 Stewfile with optional pinned versioning.
  • Headless batch installs from a Stewfile.lock.json file.

demo

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 -sric

Download 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/[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

# 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/hyperfine

Upgrade

# 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:

  1. The stewPath: this is where stew data is stored.
  2. The stewBinPath: this is where stew installs binaries
  3. excludeFromUpgradeAll: this is the list of binaries that you don't want to be upgraded during stew 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 a stew.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 the stew 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 for stewPath, stewBinPath, and excludeFromUpgradeAll.

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.