Eget is the best way to easily get pre-built binaries for your favorite tools.

Overview

Eget: easy pre-built binary installation

Go Report Card Release MIT License

Eget is the best way to easily get pre-built binaries for your favorite tools. It downloads and extracts pre-built binaries from releases on GitHub. To use it, provide a repository and Eget will search through the assets from the latest release in an attempt to find a suitable prebuilt binary for your system. If one is found, the asset will be downloaded and Eget will extract the binary to the current directory. Eget should only be used for installing simple, static prebuilt binaries, where the extracted binary is all that is needed for installation. For more complex installation, you may use the --download-only option, and perform extraction manually.

Eget Demo

For software maintainers, if you provide prebuilt binaries on GitHub, you can list eget as a one-line method for users to install your software.

Eget has a number of detection mechanisms and should work out-of-the-box with most software that is distributed via single binaries on GitHub releases. First try using Eget on your software, it may already just work. Otherwise, see the FAQ a clear set of rules to make your software compatible with Eget.

For more in-depth documentation, see DOCS.md.

Examples

eget zyedidia/micro --tag nightly
eget jgm/pandoc --to /usr/local/bin
eget junegunn/fzf
eget neovim/neovim
eget ogham/exa
eget --system darwin/amd64 sharkdp/fd
eget BurntSushi/ripgrep
eget -f eget.1 zyedidia/eget
eget zachjs/sv2v

How to get Eget

Before you can get anything, you have to get Eget. If you already have Eget and want to upgrade, use eget zyedidia/eget.

Quick-install script

curl -o eget.sh https://zyedidia.github.io/eget.sh
shasum -a 256 eget.sh # verify with hash below
bash eget.sh

Or alternatively (less secure):

curl https://zyedidia.github.io/eget.sh | sh

You can then place the downloaded binary in a location on your $PATH such as /usr/local/bin.

To verify the script, the sha256 checksum is 0e64b8a3c13f531da005096cc364ac77835bda54276fedef6c62f3dbdc1ee919 (use shasum -a 256 eget.sh after downloading the script).

One of the reasons to use eget is to avoid running curl into bash, but unfortunately you can't eget eget until you have eget.

Pre-built binaries

Pre-built binaries are available on the releases page.

From source

Install the latest released version:

go install github.com/zyedidia/[email protected]

or install from HEAD:

git clone https://github.com/zyedidia/eget
cd eget
make build # or go build (produces incomplete version information)

A man page can be generated by cloning the repository and running make eget.1 (requires pandoc). You can also use eget to download the man page: eget -f eget.1 zyedidia/eget.

Usage

The PROJECT argument passed to Eget should either be a GitHub repository, formatted as user/repo, in which case Eget will search the release assets, or a direct URL, in which case Eget will directly download and extract from the given URL.

If Eget downloads an asset called xxx and there also exists an asset called xxx.sha256 or xxx.sha256sum, Eget will automatically verify that the SHA-256 checksum of the downloaded asset matches the one contained in that file, and abort installation if a mismatch occurs.

When installing an executable, Eget will place it in the current directory by default. If the environment variable EGET_BIN is non-empty, Eget will place the executable in that directory.

Usage:
  eget [OPTIONS] PROJECT

Application Options:
  -t, --tag=           tagged release to use instead of latest
      --pre-release    include pre-releases when fetching the latest version
      --to=            move to given location after extracting
  -s, --system=        target system to download for (use "all" for all choices)
  -f, --file=          file name to extract
  -q, --quiet          only print essential output
      --download-only  stop after downloading the asset (no extraction)
      --asset=         download a specific asset containing the given string
      --sha256         show the SHA-256 hash of the downloaded asset
      --verify-sha256= verify the downloaded asset checksum against the one provided
  -v, --version        show version information
  -h, --help           show this help message

FAQ

How is this different from a package manager?

Eget only downloads pre-built binaries uploaded to GitHub by the developers of the repository. It does not maintain a central list of packages, nor does it do any dependency management. Eget does not "install" executables by placing them in system-wide directories (such as /usr/local/bin) unless instructed, and it does not maintain a registry for uninstallation. Eget works best for installing software that comes as a single binary with no additional files needed (CLI tools made in Go, Rust, or Haskell tend to fit this description).

Is this secure?

Eget does not run any downloaded code -- it just finds executables from GitHub releases and downloads/extracts them. If you trust the code you are downloading (i.e. if you trust downloading pre-built binaries from GitHub) then using Eget is perfectly safe. If Eget finds a matching asset ending in .sha256 or .sha256sum, the SHA-256 checksum of your download will be automatically verified. You can also use the --sha256 or --verify-sha256 options to manually verify the SHA-256 checksums of your downloads (checksums are provided in an alternative manner by your download source).

Does this work only for GitHub repositories?

At the moment Eget only supports searching GitHub releases and direct URLs. If you provide a direct URL instead of a GitHub repository, Eget will skip the detection phase and download directly from the given URL.

How can I make my software compatible with Eget?

Eget should work out-of-the-box with many methods for releasing software, and does not require that you build your release process for Eget in particular. However, here are some rules that will guarantee compatibility with Eget.

  • Provide your pre-built binaries as GitHub release assets.
  • Format the system name as OS_Arch and include it in every pre-built binary name. Supported OSes are darwin/macos, windows, linux, netbsd, openbsd, freebsd, android, illumos, solaris, plan9. Supported architectures are amd64, i386, arm, arm64, riscv64.
  • If desired, include *.sha256 files for each asset, containing the SHA-256 checksum of each asset. These checksums will be automatically verified by Eget.
  • Include only a single executable or appimage per system in each release archive.
  • Use .tar.gz, .tar.bz2, .tar.xz, .tar, or .zip for archives. You may also directly upload the executable without an archive, or a compressed executable ending in .gz, .bz2, or .xz.

Contributing

If you find a bug, have a suggestion, or something else, please open an issue for discussion. Pull requests will only be accepted if they close an issue marked as "pr-approved". See DOCS.md for more in-depth documentation.

Issues
  • 403 Forbidden: API rate limit exceeded

    403 Forbidden: API rate limit exceeded

    I have got the following error :

    403 Forbidden: API rate limit exceeded for 183.82.157.82. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.): https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting
    
    opened by muralikodali 13
  • cli/cli: too many candidates found

    cli/cli: too many candidates found

    Using latest version of Eget on Ubuntu 21.10.

    ❯ eget --asset=deb cli/cli
    4 candidates found for asset `deb`: please select manually
    (1) gh_2.11.3_linux_386.deb
    (2) gh_2.11.3_linux_amd64.deb
    (3) gh_2.11.3_linux_arm64.deb
    (4) gh_2.11.3_linux_armv6.deb
    Enter selection number: ^C
    
    ❯ eget --asset=deb --system=amd64 cli/cli
    4 candidates found for asset `deb`: please select manually
    (1) gh_2.11.3_linux_386.deb
    (2) gh_2.11.3_linux_amd64.deb
    (3) gh_2.11.3_linux_arm64.deb
    (4) gh_2.11.3_linux_armv6.deb
    Enter selection number: ^C
    
    ❯ eget --asset=deb --system=linux/amd64 cli/cli
    4 candidates found for asset `deb`: please select manually
    (1) gh_2.11.3_linux_386.deb
    (2) gh_2.11.3_linux_amd64.deb
    (3) gh_2.11.3_linux_arm64.deb
    (4) gh_2.11.3_linux_armv6.deb
    Enter selection number: ^C
    

    I'd expect Eget to detect which package to download in all of the above cases.

    Cheers, and thanks for your work !

    opened by ngirard 10
  • Feature request: download only if hash doesn't match

    Feature request: download only if hash doesn't match

    I'm downloading packages for later installation (eget --download-only zyedidia/eget). This downloads the same file every time it's executed even if there is no newer version (which I cannot know in advance).

    Would it be possible to only download the file if the hashes of the file eget is going to download does not match the file that is already there?

    opened by thorstenkampe 6
  • Ability to filter out matching candidates

    Ability to filter out matching candidates

    Consider the following scenario:

    ❯ eget --asset=deb --asset=amd64 sharkdp/fd
    2 candidates found for asset chain: please select manually
    (1) fd-musl_8.4.0_amd64.deb
    (2) fd_8.4.0_amd64.deb
    Enter selection number: 
    

    Here, as often in the Rust ecosystem, the binaries come as either (1) statically linked to musl (fd-musl_8.4.0_amd64.deb) or (2) dynamically linked to glibc (fd_8.4.0_amd64.deb). By common practice, when nothing is specified within the asset name, the latter is implied.

    Since I encountered problems with programs linked to musl in rare occasions, I wish to prefer programs dynamically linked to glibc, when available.

    Hence, I wish there was such -x | --exclude option that would allow me to --exclude=musl and thus lead me to the desired asset.

    opened by ngirard 5
  • Remove some platform-specific suffixes

    Remove some platform-specific suffixes

    I tried to install https://github.com/editorconfig-checker/editorconfig-checker and it worked, but the binary carries some suffixes, which could be stripped off automatically: ec-darwin-amd64, i.e. the proper executable must be just ec.

    opened by nikolay 4
  • Bug: some tbz-packed binaries are not extracted correctly

    Bug: some tbz-packed binaries are not extracted correctly

    Looks like binaries packed within tbz tarballs are not (always?) extracted correctly. As an example, see the btop tool. On issuing an eget aristocratos/btop, the correct asset for my system was identified ("btop-x86_64-linux-musl.tbz"), and a btop executable is extracted, but it is not binary-accurate and attempting to run it will result in an error.

    Manually pulling the tarball via eget --download-only aristocratos/btop followed by a tar -xjf btop-x86_64-linux-musl.tbz does yield a correctly extracted binary as "bin/btop", however.

    opened by nestor-custodio 4
  • [Feature,flag suggest]direct unzip(unzip keep layout+keepallfiles)

    [Feature,flag suggest]direct unzip(unzip keep layout+keepallfiles)

    reason for example.eget keepassxreboot/keepassxc what you will get is the 3 exe without any dll. (keep all files,include exe. flag?)

    if any users wants to follow the repo layout / likes to use windows C drive program files. its a must.Imagine you do eget xxx/xxx --to "thesweetfolder"&eget yyy/yyy --to "thesweetfolder" The next time you open the "thesweetfolder" OMG,its keepassxc+eget+fzf+yyy+(manually installed obs)+(10 manually installed apps) they probably need to pray for the dll being compatible. (keep zip inner layout flag?)

    I think most zip extraction api should have a -keep layout option built-in.

    opened by masta99wrfvsHsa 4
  • cli argument flag processing disregarding flag values

    cli argument flag processing disregarding flag values

    Can't grok logic for the returns asset choices

    command in question

    $ eget --asset=.tar.gz --system=linux/amd64 neovim/neovim
    
    4 candidates found for asset .tar.gz
    please select manually:
      (1) nvim-linux64.tar.gz
      (2) nvim-linux64.tar.gz.sha256sum
      (3) nvim-macos.tar.gz
      (4) nvim-macos.tar.gz.sha256sum
    Enter selection number:
    

    The above command and subsequently returned choices strikes me to believe that:

    1. This is a bug in the processing of CLI flags that disregards previous flag values and returns results that should have been filtered out.

    ex. I specify criteria of .tar.gz assets for Linux, but eget returned darwin assets that don't satisfy criteria.

    Happy to fix this, but wanted to get confirmation before doing needful.

    1. Somewhat quirky behavior which I am guilty of glossing over when reading through documentation. If this is the case, could you ELI5 the design choices around parsing CLI arguments and another hypothetical scenario that explains returned asset choices?
    opened by vladdoster 4
  • select asset finds two candidates

    select asset finds two candidates

    Projects often provide musl and standard (non-musl) packages. I would like to download the non-musl package but the asset string matches both (see below).

    Is there a way to avoid prompting? Maybe by accepting a regular expression (like bat_.+amd64\.deb) for the matching string?

    > eget --asset amd64.deb sharkdp/bat
    2 candidates found for asset `amd64.deb`: please select manually
    (1) bat-musl_0.18.3_amd64.deb
    (2) bat_0.18.3_amd64.deb
    
    opened by thorstenkampe 4
  • Error using --download-only

    Error using --download-only

    > eget --download-only --asset amd64.deb zyedidia/micro
    https://github.com/zyedidia/micro/releases/download/v2.0.10/micro-2.0.10-amd64.deb
    Downloading 100% [==========================================================================================================================] (4.3/4.3 MB, 13.197 MB/s)
    open .: is a directory
    
    opened by thorstenkampe 4
  • Install deb packages automatically

    Install deb packages automatically

    Using latest version of Eget on Ubuntu 21.10.

    ❯ eget --asset=deb --asset=amd64 cli/cli
    https://github.com/cli/cli/releases/download/v2.11.3/gh_2.11.3_linux_amd64.deb
    Downloading 100% [======================] (7.7/7.7 MB, 44.170 MB/s)        
    Extracted `gh_2.11.3_linux_amd64.deb` to `gh_2.11.3_linux_amd64.deb`
    

    In this scenario, it would be nice if Eget could automatically do the equivalent of sudo dpkg -i ./gh_2.11.3_linux_amd64.deb && rm ./gh_2.11.3_linux_amd64.deb.

    Cheers

    opened by ngirard 3
Releases(v1.2.0)
Owner
Zachary Yedidia
Zachary Yedidia
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

TJ Holowaychuk 746 Jul 27, 2022
Realize is the #1 Golang Task Runner which enhance your workflow by automating the most common tasks and using the best performing Golang live reloading.

#1 Golang live reload and task runner Content - ⭐️ Top Features - ???? Get started - ?? Config sample - ?? Commands List - ?? Support and Suggestions

Oxequa 4.3k Jul 30, 2022
Embed static files in Go binaries (replacement for gobuffalo/packr)

Pkger github.com/markbates/pkger is a tool for embedding static files into Go binaries. It will, hopefully, be a replacement for github.com/gobuffalo/

Mark Bates 1.2k Jul 27, 2022
Package binaries for different operating systems in a single script, executable everywhere.

CrossBin Packages MacOS, Linux and Windows binaries, into a single script that is executable everywhere and executes the correct binary for the system

null 2 Dec 14, 2021
Moldy CLI the best project starter and manager of the world

Moldy The best project starter of the world ?? What is Moldy ? Hey I present Moldy this beautiful tool that will solve your life in creating, managing

Moldy Community 23 Jun 26, 2022
Frictionless way of managing project-specific commands

1build is an automation tool used for research and development projects that arms you with the convenience to configure project-local command line ali

Gopinath Langote 175 Aug 3, 2022
An experimental way to apply patches to the Go runtime at build time.

go-patch-overlay An experimental way to apply patches to the Go runtime at build time. Assuming you have a directory of patches to apply to the Go sou

Felix Geisendörfer 16 Feb 9, 2022
Various tools for usage with Golang like installer, github tool and cloud features.

Gopei2 (Go Programming Environment Installer) Gopei shell install Go compiler, LiteIDE and configure for you the entire environment, variables, paths,

George Calianu 100 May 23, 2022
SCons Tools for Go

#goscons goscons is a set of SCons tools for building Go code. goscons supports Cgo. goscons includes a helper application based on the one from sc

Albert Strasheim 19 Dec 28, 2021
🚀 gowatch is a command line tool that builds and (re)starts your go project everytime you save a Go or template file.

gowatch 中文文档 gowatch is a command line tool that builds and (re)starts your go project everytime you save a Go or template file. Installation To insta

silenceper 716 Aug 4, 2022
It is a proxy to improve article readability, a directory for your favorite articles, and a way to make the internet lighter and more accessible.

timoneiro It is a work in progress. Some features are unimplemented yet. The helmsman's goal is to be a way to browse articles without all the distrac

Cesar Gimenes 6 Jun 13, 2022
htf (Host That File) is a tool to make serving up your favorite pentest tools simpler and faster.

htf htf (Host That File) is a tool to make serving up your favorite pentest tools simpler and faster. All you need to do is populate the htf configura

Alexis Rodriguez 1 Nov 28, 2021
Get cloud instances with your favourite software pre-loaded

This Golang package can be used to provision cloud hosts using a simple CRUD-style API along with a cloud-init user-data script. It could be used to automate anything from k3s clusters, to blogs, or CI runners. We use it to create the cheapest possible hosts in the cloud with a public IP address.

inlets 32 Jul 22, 2022
Are you programming and suddenly your stomach is rumbling? No problem, order your Ifood without leaving your favorite text editor ❤️

vim-ifood Você ta programando e de repente bateu aquela fome? Sem problemas, peça seu Ifood sem sair do seu editor de texto favorito ❤️ Are you progra

Felipe Volpone 4 Jun 2, 2022
Easily kick-start your python project with very opinionated best practices.

Pyproject Easily kickstart your Python project with very opionionated best practices. Manage your project using poetry https://python-poetry.org/ Add

Lucifer Chase 1 Jan 24, 2022
Search and store the best cryptos for the best scalable and modern application development.

Invst Hunt Search and store the best cryptos for the best scalable and modern application development. Layout Creating... Project Challenge The Techni

Fábio Morais 1 Nov 12, 2021
A tool that helps you write code in your favorite IDE: your word processor!

WordIDE Have you ever wondered: How would it feel like to write code in a word processor? Me neither. But after months minutes of planning, I present

unsafecast 35 Jul 21, 2022
GoReleaser builds Go binaries as fast and easily as possible

GoReleaser builds Go binaries for several platforms, creates a GitHub release and then pushes a Homebrew formula to a tap repository. All that wrapped in your favorite CI.

GoReleaser 10.4k Aug 7, 2022
Best microservices framework in Go, like alibaba Dubbo, but with more features, Scale easily.

Best microservices framework in Go, like alibaba Dubbo, but with more features, Scale easily.

smallnest 7.1k Jul 29, 2022
siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.

siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.

Re 261 Jul 24, 2022
The extensible SQL interface to your favorite cloud APIs.

The extensible SQL interface to your favorite cloud APIs.

Turbot 2k Aug 8, 2022
A goroutine monitor to keep track of active routines from within your favorite shell.

roumon A goroutine monitor to keep track of active routines from within your favorite shell. Features Track live state of all active goroutines Termin

Armin Becher 83 Jun 23, 2022
🔍 Find stack overflow questions from your favorite terminal!

Stack Overflow Cli (Stovc) Stack Overflow Cli is a CLI tool that helps you to search a question in stack overflow in your terminal. Installation Downl

Kedi 3 Nov 20, 2021
A comprehensive list of alternatives to your favorite software

alternativeto A comprehensive list of alternatives to your favorite software. Please do not edit this file directly. Instead, follow the steps outline

Brent Adamson 33 Jun 16, 2022
A small API to be used in Traefik Forward Auth to block attacks on services behind your favorite web router

Dynamic IPs Blacklist for Traefik This small software implements the possibility to block access to all the services behind your Traefik service. The

LoreLLo 0 Dec 21, 2021
RaunchBot brings you the latest Raunchy content straight to your favorite Discord server.

RaunchBot RaunchBot brings you the latest Raunchy content straight to your favorite Discord server. Development: Compile and run the project. TOKEN=ab

null 1 Jan 22, 2022
RaunchBot brings you the latest Raunchy content straight to your favorite Discord server.

RedditBot RedditBot brings you the latest Raunchy content straight to your favorite Discord server. Get RedditBot in your discord here. Bot Commands:

null 1 Jan 22, 2022
Cloud Spanner load generator to load test your application and pre-warm the database before launch

GCSB GCSB Quickstart Create a test table Load data into table Run a load test Operations Load Single table load Multiple table load Loading into inter

Cloud Spanner Ecosystem 21 Jul 13, 2022
The simple and easy way to embed static files into Go binaries.

NOTICE: Please consider migrating your projects to github.com/markbates/pkger. It has an idiomatic API, minimal dependencies, a stronger test suite (t

Buffalo - The Go Web Eco-System 3.4k Aug 4, 2022