{"id":21466548,"url":"https://github.com/permafrost-dev/zeget","last_synced_at":"2026-02-17T16:33:36.123Z","repository":{"id":239714344,"uuid":"800342811","full_name":"permafrost-dev/zeget","owner":"permafrost-dev","description":"Easily install prebuilt binaries from GitHub.","archived":false,"fork":false,"pushed_at":"2025-10-18T20:49:10.000Z","size":660,"stargazers_count":4,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-19T12:20:08.470Z","etag":null,"topics":["cli","command-line","download","eget","github-releases"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/permafrost-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"permafrost-dev","custom":"https://permafrost-dev/open-source"}},"created_at":"2024-05-14T06:43:27.000Z","updated_at":"2025-10-18T20:49:13.000Z","dependencies_parsed_at":"2024-06-19T11:14:55.677Z","dependency_job_id":"dd57a86a-2ca5-4091-a058-d4e4f3f98d05","html_url":"https://github.com/permafrost-dev/zeget","commit_stats":null,"previous_names":["permafrost-dev/zeget"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/permafrost-dev/zeget","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/permafrost-dev%2Fzeget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/permafrost-dev%2Fzeget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/permafrost-dev%2Fzeget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/permafrost-dev%2Fzeget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/permafrost-dev","download_url":"https://codeload.github.com/permafrost-dev/zeget/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/permafrost-dev%2Fzeget/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29549795,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line","download","eget","github-releases"],"created_at":"2024-11-23T08:14:29.369Z","updated_at":"2026-02-17T16:33:31.114Z","avatar_url":"https://github.com/permafrost-dev.png","language":"Go","readme":"# zeget: easy pre-built binary installation\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"GitHub Actions Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/permafrost-dev/zeget/build-and-test.yml?branch=main\u0026style=flat-square\u0026logo=github\u0026logoColor=white\u0026label=test%20suite\u0026nocache=1\"\u003e\n  \u003c!--\u003cimg alt=\"Release\" src=\"https://img.shields.io/github/release/permafrost-dev/zeget.svg?label=Release\u0026style=flat-square\" /\u003e--\u003e\n  \u003cimg alt=\"Github last commit (main branch)\" src=\"https://img.shields.io/github/last-commit/permafrost-dev/zeget/main?display_timestamp=committer\u0026style=flat-square\u0026logo=github\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"MIT License\" src=\"https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\" /\u003e\n  \u003cbr\u003e\n  \u003cimg alt=\"codecov\" src=\"https://img.shields.io/codecov/c/gh/permafrost-dev/zeget?style=flat-square\u0026logo=codecov\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Code Climate maintainability\" src=\"https://img.shields.io/codeclimate/maintainability/permafrost-dev/zeget?style=flat-square\u0026logo=codeclimate\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Code Climate tech debt\" src=\"https://img.shields.io/codeclimate/tech-debt/permafrost-dev/zeget?style=flat-square\u0026logo=codeclimate\u0026logoColor=white\u0026nocache=1\" /\u003e\n  \u003cimg alt=\"Go Report Card\" src=\"https://goreportcard.com/badge/github.com/permafrost-dev/zeget?style=flat-square\" /\u003e\n\u003c/p\u003e\n\n**zeget** is the best way to easily get pre-built binaries for your favorite\ntools; it downloads and extracts pre-built binaries from releases on GitHub.\n\nTo use it, provide a repository and zeget will search through the assets from the\nlatest release to find a suitable binary for your system. If successful, the asset is\ndownloaded and extracted to the current directory.\n\n![zeget Demo](https://github.com/zyedidia/blobs/blob/master/eget-demo.gif?raw=true)\n\n\u003e **zeget origins**\n\u003e\n\u003e zeget was forked from the original [eget](https://github.com/zyedidia/eget) to implement bug fixes,\n\u003e improvements, new features, user requests, and implement major refactoring to a package-based\n\u003e architecture.\n\u003e zeget also endeavors to have a robust test suite with an acceptable code coverage percentage.\n\u003e It is mostly backward-compatible with eget, and should work as a drop-in replacement for most cases.\n\u003e\n\nThere are a few notable changes from the original utility:\n\n- Verify checksums from `checksums.txt` assets\n- Download release assets from private repositories\n- Remembers user asset selections to avoid re-prompting\n- Prettier output\n- Numerous bug fixes\n- New flags, such as `--no-interaction`\n- Improved test coverage using `ginkgo` and a CI/CD pipeline\n- `golangci-lint` integration\n- `goreleaser` integration\n\nzeget has a number of detection mechanisms and should work out-of-the-box with\nmost software that is distributed via single binaries on GitHub releases. First\ntry using zeget on your software, it is likely that is will \"just work\".\nOtherwise, see the FAQ for a clear set of rules to make your software compatible with zeget.\n\nFor more in-depth documentation, see [DOCS.md](DOCS.md).\n\n## Examples\n\n```sh\nzeget zyedidia/micro -t nightly\nzeget jgm/pandoc --to /usr/local/bin\nzeget junegunn/fzf\nzeget neovim/neovim --no-interaction\nzeget ogham/exa --asset ^musl\nzeget --system darwin/amd64 sharkdp/fd\nzeget BurntSushi/ripgrep\nzeget -f eget.1 permafrost-dev/zeget\nzeget zachjs/sv2v\nzeget https://go.dev/dl/go1.21.1.linux-amd64.tar.gz --file go --to ~/go1.21.1\nzeget --all --file '*' ActivityWatch/activitywatch\n```\n\n## How to get zeget\n\nBefore you can get anything, you have to get zeget. If you already have zeget and want to upgrade, use `zeget permafrost-dev/zeget`.\n\n### Quick-install script\n\n```sh\ncurl -o install.sh https://raw.githubusercontent.com/permafrost-dev/zeget/main/scripts/install.sh\nsha256sum install.sh # verify with hash below\nbash install.sh\n```\n\nOr alternatively (less secure):\n\n```sh\ncurl https://raw.githubusercontent.com/permafrost-dev/zeget/main/scripts/install.sh | sh\n```\n\nYou can then place the downloaded binary in a location on your `$PATH` such as `/usr/local/bin`.\n\nTo verify the script, use `sha256sum install.sh` after downloading; the sha256 checksum is:\n\n\u003e \u003ccode data-id=\"installer-checksum\"\u003e077d2431344eae1765039dfb8b3b4dff2efdd36677e5d49673dd0fe650d73e87\u003c/code\u003e\u003cbr\u003e\n\n### Pre-built binaries\n\nPre-built binaries are available on the [releases](https://github.com/permafrost-dev/zeget/releases) page.\n\n### From source\n\nInstall the latest released version:\n\n```sh\ngo install github.com/permafrost-dev/zeget@latest\n```\n\nor install from HEAD:\n\n```sh\ngit clone https://github.com/permafrost-dev/zeget\ncd eget\ntask build # or go build (produces incomplete version information)\n```\n\nzeget uses Task, a modern replacement for `make`, for performing various tasks. Install Task from the [official repository](https://github.com/go-task/task).\n\nA man page can be generated by cloning the repository and running `task build-docs` (requires pandoc).\nYou can also use `zeget` to download the man page: `zeget -f zeget.1 permafrost-dev/zeget`.\n\n## Usage\n\nThe `TARGET` argument passed to zeget should either be a GitHub repository,\nformatted as `user/repo`, in which case Eget will search the release assets, a\ndirect URL, in which case Eget will directly download and extract from the\ngiven URL, or a local file, in which case Eget will extract directly from the\nlocal file.\n\nIf zeget downloads an asset called `xxx` and there also exists an asset called\n`xxx.sha256` or `xxx.sha256sum`, or zeget will automatically verify that the\nSHA-256 checksum of the downloaded asset matches the one contained in that\nfile, and abort installation if a mismatch occurs.\n\nLikewise, if there is a `checksums.txt` asset in the release, zeget will attempt\nto use this file to verify the SHA-256 checksum of the downloaded asset. It is\nassumed that the file was generated using `sha256sum` or a similar tool, and that\nthe file contains individual lines in the format `hash file.ext`, with one\nline per filename/hash.\n\nWhen installing an executable, zeget will place it in the current directory by\ndefault. If the environment variable `ZEGET_BIN` is non-empty, zeget will\nplace the executable in that directory.\n\nDirectories can also be specified as files to extract, and all files within\nthem will be extracted. For example:\n\n```sh\nzeget https://go.dev/dl/go1.21.1.linux-amd64.tar.gz --file go --to ~/go1.21.1\n```\n\nGitHub limits API requests to 60 per hour for unauthenticated users. If you\nwould like to perform more requests (up to 5,000 per hour), you can set up a\npersonal access token and assign it to an environment variable named either\n`GITHUB_TOKEN` or `ZEGET_GITHUB_TOKEN` when running zeget. If both are set,\n`ZEGET_GITHUB_TOKEN` will take precedence. zeget will read this variable and\nsend the token as authorization with requests to GitHub. It is also possible\nto read the token from a file by using `@/path/to/file` as the token value.\n\nZeget uses a cache to store information about repositories, releases, and user-selected\ndownloads when multiple assets are available. The cache is stored in the user's home\ndirectory by default as `~/.zeget.cache.json`. The cache allows zeget to remember and\nreuse selections made by the user (avoiding user input), and to avoid making unnecessary\nrequests to GitHub.\n\nNote that some flags have changed from the [original utility](https://github.com/zyedidia/eget). The following is the output of `zeget --help`:\n\n```sh\nUsage:\n  zeget [OPTIONS] TARGET\n\nApplication Options:\n  -t, --tag=            tagged release to use instead of latest\n      --pre-release     include pre-releases when fetching the latest version\n      --source          download the source code for the target repo instead of a release\n      --to=             move to given location after extracting\n  -s, --system=         target system to download for (use \"all\" for all choices)\n  -f, --file=           glob to select files for extraction\n      --all             extract all candidate files\n  -q, --quiet           only print essential output\n  -d, --download-only   stop after downloading the asset (no extraction)\n      --upgrade-only    only download if release is more recent than current version\n  -a, --asset=          download a specific asset containing the given string; can be \n                        specified multiple times  for additional filtering; \n                        use '^' or '!' prefix for anti-match\n  -H, --hash            show the SHA-256 hash of the downloaded asset\n      --sha256          show the SHA-256 hash of the downloaded asset\n      --verify-sha256=  verify the downloaded asset checksum against the one provided\n  -r, --remove          remove the given file from $EGET_BIN or the current directory\n  -V, --version         show version information\n  -h, --help            show this help message\n  -D, --download-all    download all projects defined in the config file\n  -k, --disable-ssl     disable SSL verification for download requests\n      --no-interaction  do not prompt for user input\n  -v, --verbose         show verbose output\n      --no-progress     do not show download progress\n```\n\n## Configuration\n\nzeget can be configured using a TOML file located at `~/.zeget.toml` or it will fallback to the expected `XDG_CONFIG_HOME` directory of your os. Alternatively,\nthe configuration file can be located in the same directory as the zeget binary or the path specified with the environment variable `ZEGET_CONFIG`.\n\nBoth global settings can be configured, as well as setting on a per-repository basis.\n\nSections can be named either `global` or `\"owner/repo\"`, where `owner` and `repo`\nare the owner and repository name of the target repository (not that the `owner/repo`\nformat is quoted).\n\nFor example, the following configuration file will set the `--to` flag to `~/bin` for\nall repositories, and will set the `--to` flag to `~/.local/bin` for the `zendydia/micro`\nrepository.\n\n```toml\n[global]\ntarget = \"~/bin\"\n\n[\"zyedidia/micro\"]\ntarget = \"~/.local/bin\"\n```\n\n## Available settings - global section\n\n| Setting | Related Flag | Description | Default |\n| --- | --- | --- | --- |\n| `github_token` | `N/A` | GitHub API token to use for requests | `\"\"` |\n| `all` | `--all` | Whether to extract all candidate files. | `false` |\n| `download_only` | `--download-only` | Whether to stop after downloading the asset (no extraction). | `false` |\n| `download_source` | `--source` | Whether to download the source code for the target repo instead of a release. | `false` |\n| `file` | `--file` | The glob to select files for extraction. | `*` |\n| `quiet` | `--quiet` | Whether to only print essential output. | `false` |\n| `show_hash` | `--sha256` | Whether to show the SHA-256 hash of the downloaded asset. | `false` |\n| `system` | `--system` | The target system to download for. | `all` |\n| `target` | `--to` | The directory to move the downloaded file to after extraction. | `.` |\n| `upgrade_only` | `--upgrade-only` | Whether to only download if release is more recent than current version. | `false` |\n| `ignore_patterns` | `N/A` | An array of regular expressions to always ignore when detecting candidates for selection or extraction. | `[]` |\n\n## Available settings - repository sections\n\n| Setting | Related Flag | Description | Default |\n| --- | --- | --- | --- |\n| `all` | `--all` | Whether to extract all candidate files. | `false` |\n| `asset_filters` | `--asset` |  An array of partial asset names to filter the available assets for download. | `[]` |\n| `download_only` | `--download-only` | Whether to stop after downloading the asset (no extraction). | `false` |\n| `download_source` | `--source` | Whether to download the source code for the target repo instead of a release. | `false` |\n| `file` | `--file` | The glob to select files for extraction. | `*` |\n| `quiet` | `--quiet` | Whether to only print essential output. | `false` |\n| `show_hash` | `--sha256` | Whether to show the SHA-256 hash of the downloaded asset. | `false` |\n| `system` | `--system` | The target system to download for. | `all` |\n| `target` | `--to` | The directory to move the downloaded file to after extraction. | `.` |\n| `upgrade_only` | `--upgrade-only` | Whether to only download if release is more recent than current version. | `false` |\n| `verify_sha256` | `--verify-sha256` | Verify the sha256 hash of the asset against a provided hash. | `\"\"` |\n\n## Example configuration\n\n```toml\n[global]\n    github_token = \"ghp_1234567890\"\n    quiet = false\n    show_hash = false\n    upgrade_only = true\n    target = \"/home/user1/bin\"\n    ignore_patterns = [\"(.sig|.pem|.apk)$\", \"musl\", \"static\"]\n\n[\"zyedidia/micro\"]\n    upgrade_only = false\n    show_hash = true\n    asset_filters = [ \"static\", \".tar.gz\" ]\n    target = \"~/.local/bin/micro\"\n```\n\nBy using the configuration above, you could run the following command to download the latest release of `micro`:\n\n```bash\nzeget zyedidia/micro\n```\n\nWithout the configuration, you would need to run the following command instead:\n\n```bash\nexport EGET_GITHUB_TOKEN=ghp_1234567890 \u0026\u0026\\\nzeget zyedidia/micro --to ~/.local/bin/micro --sha256 --asset static --asset .tar.gz\n```\n\n## FAQ\n\n### How is this different from a package manager?\n\nzeget only downloads pre-built binaries uploaded to GitHub by the developers of\nthe repository. zeget does not \"install\" executables by placing them\nin system-wide directories (such as `/usr/local/bin`) unless instructed.\nzeget works best for installing software that comes as a single binary with no\nadditional files needed (CLI tools made in Go, Rust, or Haskell tend to fit\nthis description).\n\n### Does zeget keep track of installed binaries?\n\nzeget does maintain a cache containing information about installed binaries.\nIn general, however the cache items expire after a certain amount of time and\nare automatically removed.\n\n### Is this secure?\n\nEget does not run any downloaded code -- it just finds executables from GitHub\nreleases and downloads/extracts them. If you trust the code you are downloading\n(i.e. if you trust downloading pre-built binaries from GitHub) then using Eget\nis perfectly safe. If Eget finds a matching asset ending in `.sha256` or\n`.sha256sum`, the SHA-256 checksum of your download will be automatically\nverified. You can also use the `--sha256` or `--verify-sha256` options to\nmanually verify the SHA-256 checksums of your downloads (checksums are provided\nin an alternative manner by your download source).\n\n### Does this work only for GitHub repositories?\n\nAt the moment Eget supports searching GitHub releases, direct URLs, and local\nfiles. If you provide a direct URL instead of a GitHub repository, Eget will\nskip the detection phase and download directly from the given URL. If you\nprovide a local file, Eget will skip detection and download and just perform\nextraction from the local file.\n\n### How can I make my software compatible with Eget?\n\nEget should work out-of-the-box with many methods for releasing software, and\ndoes not require that you build your release process for Eget in particular.\nHowever, here are some rules that will guarantee compatibility with Eget.\n\n- Provide your pre-built binaries as GitHub release assets.\n- Format the system name as `OS_Arch` and include it in every pre-built binary\n  name. Supported OSes are `darwin`/`macos`, `windows`, `linux`, `netbsd`,\n  `openbsd`, `freebsd`, `android`, `illumos`, `solaris`, `plan9`. Supported\n  architectures are `amd64`, `i386`, `arm`, `arm64`, `riscv64`.\n- If desired, include either `*.sha256` files for each asset that contains the SHA-256\n  checksum, or a `checksums.txt` that contains the SHA-256 checksums for all files in\n  the asset archive. These checksums will be automatically verified by zeget.\n- Include only a single executable or appimage per system in each release archive.\n- Use `.tar.gz`, `.tgz`, `.tar.bz2`, `.tar.xz`, `.tar`, or `.zip` for archives. You may\n  also directly upload the executable without an archive, or a compressed executable\n  ending in `.gz`, `.bz2`, or `.xz`.\n\n### Does this work with monorepos?\n\nYes, you can pass a tag or tag identifier with the `--tag TAG` option. If no\ntag exactly matches, Eget will look for the latest release with a tag that\ncontains `TAG`. So if your repository contains releases for multiple different\nprojects, just pass the appropriate tag (for the project you want) to Eget, and\nit will find the latest release for that particular project (as long as\nreleases for that project are given tags that contain the project name).\n\n## Contributing\n\nPlease see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.\n\n## Security Vulnerabilities\n\nPlease review [our security policy](../../security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n- [Patrick Organ](https://github.com/patinthehat)\n- [Zachary Yedidia](https://github.com/zyedidia)\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE) for more information.\n","funding_links":["https://github.com/sponsors/permafrost-dev","https://permafrost-dev/open-source"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpermafrost-dev%2Fzeget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpermafrost-dev%2Fzeget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpermafrost-dev%2Fzeget/lists"}