📦 An independent package manager for compiled binaries.

stew icon

stew

An independent package manager for compiled binaries.

build status code of conduct license

Features

  • 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.
  • Install binaries from GitHub releases or directly from URLs
  • Isolated ~/.stew/ directory.
  • No need for sudo.
  • Portable Stewfile with optional pinned versioning.

demo

Installation

Stew supports Linux, macOS, and Windows:

curl -fsSL https://raw.githubusercontent.com/marwanhawari/stew/main/install.sh | sh

Usage

# Install from GitHub releases
stew install junegunn/fzf              # Install the latest release
stew install junegunn/[email protected]       # Install a specific, tagged version
stew install junefunn/fzf sharkdp/fd   # Install multiple binaries in a single command

# 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

# Browse github releases and assets with a terminal UI
stew browse sharkdp/hyperfine

# Upgrade a binary to its latest version (only for binaries from GitHub releases)
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

# List installed binaries
stew list                              # Print to console
stew list > Stewfile                   # Create an Stewfile without pinned tags
stew list --tags > Stewfile            # Pin tags
stew list --tags --assets > Stewfile   # Pin tags and assets

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.

I've installed stew but the command is still not found.

The stew install script attempts to add ~/.stew/bin to PATH in your .zshrc or .bashrc file. You will also need to start a new terminal session for the changes to take effect. Make sure that ~/.stew/bin is in your PATH environment variable.

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.

How do I uninstall stew?

Simply run rm -rf $HOME/.stew/ and optionally remove this line

export PATH="$HOME/.stew/bin:$PATH"

from your .zshrc or .bashrc file.

Comments
  • Feature Request: Include Forks

    Feature Request: Include Forks

    stew search lazydocker does not return lazydocker-high-contrast, which is a fork of lazydocker, for instance. An option to search through forks would be nice.

  • Support the XDG Base Directory Specification

    Support the XDG Base Directory Specification

    Currently stew stores all binaries and data in a $HOME/.stew directory but I would like to support the XDG Base Directory Specification instead.

    This would mean moving ~/.stew to $XDG_DATA_HOME/stew (or $HOME/.local/share/stew if $XDG_DATA_HOME is not set).

  • renaming binaries

    renaming binaries

    Hey again! opening another issue to keep things tidy.

    A really nice addition would be the ability to store binaries under a different name, i.e. renaming a binary foobar to kubectl-foobar.

  • multiple binaries per project

    multiple binaries per project

    Hey there,

    really like the project! (I actually had an old abandoned python project doing pretty much the same: https://github.com/AFriemann/ghbin)

    one thing I noticed while testing is that I can't easily use it for projects that come with multiple binaries like for example ksniff: https://github.com/eldadru/ksniff

    I had to manually remove the zip and re-install it. A multi select in the initial installation would be an awesome addition!

  • [Feature Request] Autoupdating Stewfile

    [Feature Request] Autoupdating Stewfile

    Hi, thanks for stew, its been really useful.

    I sync my Stewfile between workstations: when I install or update a binary on one PC, I manually regenerate a new Stewfile to propagate the changes to the other.

    Could we set a Stewfile to be updated automatically after every operation? Something like stew file ~/dotfiles/Stewfile. I could contribute a PR for this.

  • add ability to install from stewfile.lock.json

    add ability to install from stewfile.lock.json

    Closes #14. This PR adds the ability to install from a given Stewfile.lock.json.

    Its worth mentioning that the given lock file is assumed to be different from the local Stewfile.lock.json that exists in the stewPath. If necessary, I can include a check to ensure the local $stewPath/Stewfile.lock.json cannot be used.

  • Allow user configuration and support XDG spec by default

    Allow user configuration and support XDG spec by default

    This PR introduces the ability for users to configure the stewPath (which is where stew data is stored - originally hardcoded as ~/.stew) and the stewBinPath (which is where binaries are actually installed - originally harcoded as ~/.stew/bin). There are 3 ways to configure these:

    1. Upon initial installation with the install.sh script, it will prompt you to configure these.
    2. If you install the stew binary without the install.sh script or later realize you want to change them, you can use the new stew config subcommand.
    3. You can manually edit the stew config file ($XDG_CONFIG_HOME/config.json or ~/.config/stew/config.json on Linux/macOS and ~/AppData/Local/stew/Config/config.json on Windows)

    Additionally, the new default locations for stewPath and stewBinPath follow the XDG spec:

    | | Linux/macOS | Windows | | ------------ | ------------ | ---------- | | stewPath | $XDG_DATA_HOME/stew or ~/.local/share/stew | ~/AppData/Local/stew | | stewBinPath | $XDG_DATA_HOME/stew/bin or ~/.local/share/stew/bin | ~/AppData/Local/stew/bin |

  • Allow renaming of binaries

    Allow renaming of binaries

    This PR adds a rename subcommand to allow users to rename binaries. This is preferred over using an alias in your .zshrc or .bashrc because renaming a binary with rename will update the Stewfile.lock.json as well as the binary name itself. This means that commands like stew uninstall <renamedBinary> and stew upgrade <renamedBinary> will work, which is not true if you use an alias.

    Users will also automatically be prompted to rename a binary if:

    1. The asset itself is the binary. Often these have names like binary-v0.0.1-darwin-arm64, which is not the name that people want to type into the command line.
    2. If the binary is not automatically detected inside an archived asset (which can happen if 0 or >1 executable files are found in an archive). After selecting the binary, they will be prompted to rename it.

    Finally, this PR switch out any usage of the path library in favor of the filepath library which uses / or \ in an operating-system compatible way. path only uses /.

  • Config updates

    Config updates

    Stabilized configuration updates.

    • Changed config.json -> stew.config.json
    • Changed default stewBinPath to ~/.local/bin
    • Warn user if stewBinPath not in PATH
    • Prompt user to set up config values if stew.config.json not found
    • Update curl install script accordingly

    Added brew tap as an installation option.

    Update docs.

  • [Proposal] Extract binaries from archives

    [Proposal] Extract binaries from archives

    It is common when, at release, a binary is packed with man file and some others into an archive. Like zoxide, btop and many others. It will be awesome if stew will be able to unpack such archives and allow choosing a binary to install.

  • [Proposal] Add keys shortcut in stew search to open selected repository in browser

    [Proposal] Add keys shortcut in stew search to open selected repository in browser

    When we run stew search, it could be beneficial to have an ability to press, for example, Ctrl-o to jump to repo's page for more details. What do you think?

  • stew upgrade --all throwing errors

    stew upgrade --all throwing errors

    stew upgrade --all command throwing error, if there is no update found. including this command in topgrade (r-darwish/topgrade) also throwing error status. screenshot_20220331214444

  • support mechanism of validating the content hashes of binaries

    support mechanism of validating the content hashes of binaries

    Great tool! Adding the ability for content hashes to be collected would be a great step to help ensure supply chains remain unaltered.

    Perhaps extend your Stewfile to include a sha256 of the binary? you may want to consider some sort of registry to help prevent tampering (for example, newly installed binaries could trigger some automation to collect and save sha information into something you could look up against).

🦄 Easy, fast and open-source local package manager for Python!

Unikorn ?? Easy, fast and open-source local package manager for Python! Key Features Speed: You can add a package in one second.

Dec 11, 2021
gPac - a linux package manager

gPac is a useless package manager. It is included in the gSuite, which is a suite of tools written in GO. gPac is a KISS - like package manager.

Mar 13, 2022
GoFish is a cross-platform systems package manager, bringing the ease of use of Homebrew to Linux and Windows.

GoFish is a cross-platform systems package manager, bringing the ease of use of Homebrew to Linux and Windows.

Dec 11, 2022
Package manager for future projects

PCKGER is a package manager for my next project but when it will be able to build binaries and move libs it will be used like a normal package manager

Dec 20, 2021
gobin is a package manager for /go/bin

gobin gobin is a package manager for /go/bin Features List installed packages. Check for updates. Install packages (like go install). Uninstall packag

Nov 12, 2022
Go Manager - bundle for go

gom - Go Manager Why The go get command is useful. But we want to fix the problem where package versions are different from the latest update. Are you

Nov 20, 2022
A simple dependency manager for Go (golang), inspired by Bundler.
A simple dependency manager for Go (golang), inspired by Bundler.

Goop A dependency manager for Go (golang), inspired by Bundler. It is different from other dependency managers in that it does not force you to mess w

Sep 27, 2022
Barebones dependency manager for Go.
Barebones dependency manager for Go.

Go Package Manager Go Package Manager (or gpm, for short) is a tool that helps achieve reproducible builds for Go applications by specifying the revis

Dec 14, 2022
Barebones dependency manager for Go.
Barebones dependency manager for Go.

Johnny Deps Johnny Deps is a small tool from VividCortex that provides minimalistic dependency versioning for Go repositories using Git. Its primary p

Sep 27, 2022
Golang Version Manager

g 注意:master分支可能处于开发之中并非稳定版本,请通过tag下载稳定版本的源代码,或通过release下载已编译的二进制可执行文件。 g是一个Linux、macOS、Windows下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换。 特性 支持列出可供安装的go版本号 支持列出已安

Dec 30, 2022
Package Management for Golang
Package Management for Golang

Glide: Vendor Package Management for Golang Are you used to tools such as Cargo, npm, Composer, Nuget, Pip, Maven, Bundler, or other modern package ma

Dec 27, 2022
Package core is a service container that elegantly bootstrap and coordinate twelve-factor apps in Go.

Package core is a service container that elegantly bootstrap and coordinate twelve-factor apps in Go. Background The twelve-factor methodology has pro

Nov 3, 2022
GoLobby DotEnv is a lightweight package for loading dot env (.env) files into structs for Go projects

DotEnv GoLobby DotEnv is a lightweight package for loading dot env (.env) files into structs for Go projects Documentation Supported Versions It requi

Dec 30, 2022
Golang binaries compiled on-demand for your system
Golang binaries compiled on-demand for your system

Go Binaries Go Binaries is an on-demand binary server, allowing non-Go users to quickly install tools written in Go without installing go itself, and

Dec 3, 2022
Scan and analyze OSS dependencies and licenses from compiled Go binaries
Scan and analyze OSS dependencies and licenses from compiled Go binaries

golicense - Go Binary OSS License Scanner golicense is a tool that scans compiled Go binaries and can output all the dependencies, their versions, and

Nov 6, 2022
The missing package manager for golang binaries (its homebrew for "go install")

Bingo: The missing package manager for golang binaries (its homebrew for "go install") Do you love the simplicity of being able to download & compile

Oct 31, 2022
Powerful and versatile MIME sniffing package using pre-compiled glob patterns, magic number signatures, XML document namespaces, and tree magic for mounted volumes, generated from the XDG shared-mime-info database.

mimemagic Powerful and versatile MIME sniffing package using pre-compiled glob patterns, magic number signatures, xml document namespaces, and tree ma

Nov 3, 2022
Go Package Manager (gopm) is a package manager and build tool for Go.

?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? In favor of Go Modules Proxy since Go 1.11, this pr

Dec 14, 2022
Distributed cache and in-memory key/value data store. It can be used both as an embedded Go library and as a language-independent service.

Olric Distributed cache and in-memory key/value data store. It can be used both as an embedded Go library and as a language-independent service. With

Jan 4, 2023
Shellcode implementation of Reflective DLL Injection by Golang. Convert DLLs to position independent shellcode
Shellcode implementation of Reflective DLL Injection by Golang. Convert DLLs to position independent shellcode

?? Frog For Automatic Scan ?? Doge For Defense Evasion&Offensive Security Doge-sRDI Shellcode implementation of Reflective DLL Injection by Golang. Co

Dec 8, 2022