eget helps locate, download, and extract prebuilt binaries from GitHub, GitLab, Gitea/Forgejo, and SourceForge.
Forked from https://github.com/zyedidia/eget Refactored and enhanced the tool's functionality.
- Multi-source installs: install or download binaries from GitHub, GitLab, Gitea/Forgejo, SourceForge, direct download URLs, and local files.
- Automatic selection and extraction: filter release assets by OS/arch, keyword, or regex, with SHA-256 verification and common archive extraction.
- Managed package workflow: use
add,list,update, anduninstallto manage frequently used tools, record install state, and check batch updates. - Query and search: query GitHub release info, list assets, and search repositories with native GitHub search qualifiers.
- Cache and proxy support: use download cache, API response cache,
proxy_url, andghproxyfor restricted networks or repeated installs. - Config-driven usage: configure global defaults, repo-level options, and
packages.<name>managed packages; config and installed store default to~/.config/eget/.
- Download from Releases https://github.com/inherelab/eget/releases
- Install by
go installcommand (requires a local Go SDK)
go install github.com/inherelab/eget/cmd/eget@latesteget <command> --options... arguments...Install from GitHub:
# install
eget install --tag nightly inhere/markview
# Install and override the executable name
eget install --name chlog gookit/gitw
# Install and override the asset name
eget install --asset zip windirstat/windirstat
# Filter assets with regex
eget install --asset "REG:\\.deb$" owner/repo
# Install to a custom directory
eget install --to ~/.local/bin/fzf junegunn/fzfInstall a SourceForge project:
# Install a SourceForge project directly
eget install sourceforge:winmerge --asset x64,PerUser,setupInstall a GitLab/Gitea/Forgejo project:
# Install from GitLab releases
eget install gitlab:fdroid/fdroidserver
eget install gitlab:gitlab.gnome.org/GNOME/gtk
# Install from Gitea/Forgejo-compatible releases
eget install gitea:codeberg.org/forgejo/forgejo --asset linux,amd64Install and record:
# Install and record the package definition
eget install --add junegunn/fzf
eget install --add --name rg BurntSushi/ripgrep
# Add a SourceForge project as a managed package
eget add sourceforge:winmerge --name winmerge --system windows/amd64 --asset x64,PerUser,setupInstall GUI apps:
# Install a GUI app; portable GUI apps use global.gui_target by default
eget install --gui sipeed/picoclaw
eget add --gui --name picoclaw sipeed/picoclaw# download
eget download ip7z/7zip
eget download --file go --to ~/go1.17.5 https://go.dev/dl/go1.17.5.linux-amd64.tar.gz
eget download --file README.md,LICENSE --to ./dist owner/repo
eget download --file "*.txt" owner/repo
eget download --file "bin/*" owner/repo
eget download --extract-all --to ./dist windirstat/windirstatQuery repository info:
# query repo info
eget query owner/repo
eget query --action releases --limit 5 owner/repo
eget query --action assets --tag v1.2.3 owner/repoSearch GitHub repositories:
eget search ripgrep
eget search skillc language:go user:inhere
eget search --limit 5 --sort stars --order desc terminal ui
eget search --json picoclaw user:sipeed# uninstall
eget uninstall fzf
# list installed packages
eget list|ls
# list all managed and installed packages
eget list --all
# list GUI packages
eget list --gui
# update fzf
eget update fzf
eget update --all# config
eget add --name fzf --to ~/.local/bin junegunn/fzf
eget config init
eget config list|ls
eget config get global.target
eget config set global.target ~/.local/binThe target argument accepted by install and download can be:
nameconfigured in packages- GitHub repository, for example
owner/repo - GitHub repository URL, for example
https://github.com/owner/repo - GitLab target, for example
gitlab:fdroid/fdroidserverorgitlab:gitlab.gnome.org/GNOME/gtk - Gitea/Forgejo target, for example
gitea:codeberg.org/forgejo/forgejo - SourceForge target, for example
sourceforge:winmergeorsourceforge:winmerge/stable - Direct download URL, for example
https://example.com/file.tar.gz - Local file path, for example
file:///path/to/file
Note: GitLab and Gitea/Forgejo support currently covers
install,download, andupdatefor release assets. The first version does not provide query/search parity, private repository authentication, or automatic provider detection from arbitrary web URLs.
install (aliases: i, ins)
- Resolve, download, verify, and extract a target, then record installation state.
--namecan be used to override the installed executable name; without--to, it also acts as the rename hint for single-file assets.--guimarks the target as a GUI application. Portable GUI apps useglobal.gui_targetby default, while GUI installers such as.msiorsetup.exeare launched and do not record a final install directory. Without--gui, installer-like assets prompt before launch; with--add, a confirmed installer is persisted withis_gui = true.- With
--add, a successful install also writes the repo target to[packages.<name>]; use--nameto override the package name.
download (alias: dl)
- Reuses the install pipeline without recording installed state.
- Downloads the raw asset by default; archive extraction only happens when
--fileor--extract-allis set.
add
- Writes a managed package definition to
[packages.<name>]in the config file.
uninstall (aliases: uni, remove, rm)
- Removes installed files and clears the installed store entry without deleting
[packages.<name>].
list (alias: ls)
- Lists installed packages by default.
- Use
--all/-ato list the union of local managed packages and installed-store entries. - Use
--guito filter the current list view to GUI applications.
query (alias: q)
- Queries GitHub repository release metadata without installing anything or touching local state.
- Defaults to the
latestaction, and can switch toinfo,releases, orassetswith--action.
search
- Searches GitHub repositories without installing anything or touching local state.
- Uses the first argument as the keyword and passes remaining arguments through as GitHub search qualifiers, for example
language:go,user:inhere, ortopic:cli.
update (alias: up)
- Updates a single managed package, or all managed packages with
--all.
config (alias: cfg)
- Supports
init,list/ls,get KEY, andset KEY VALUE.
install, download, and add share these installation-related options:
--tag: Select a release tag; defaults tolatestwhen omitted.--system: Override the target OS/arch, for examplewindows/amd64orlinux/arm64.--to: Set the install or download output path; accepts either a directory or a full file path.--file: Select file(s) to extract from an archive; supports comma-separated file names or glob patterns such asREADME.md,LICENSE.--asset: Filter release assets by keyword; multiple filters can be separated by commas. Regex is also supported with theREG:prefix, for exampleREG:\\.deb$, and exclusions can use^REG:....--source: Download the source archive instead of a prebuilt binary release.--extract-all,--ea: Extract all files from the archive instead of selecting a single target file.--quiet: Reduce normal command output for scripting or batch use.
Cache behavior is configured via
config set global.cache_dir ...or thecache_dirfield in the config file.
install additionally supports:
--add: After a successful install, append the repo target to[packages.<name>]managed config.--gui: Install as a GUI application; with--add, persistis_gui = true. Installer-like assets selected without--guiprompt before launch and also persistis_gui = truewhen confirmed with--add.--name: Override the managed package name; for single executable assets, it also acts as the default output-name hint.
update options:
--all: Check managed packages and update only outdated installed packages.--check: Check and list outdated installed packages, same aslist --outdated.--dry-run: Preview the update plan without performing installation changes.--interactive: Interactively select which managed packages to update.
query options:
--action,-a: Query action. Supported values:latest,releases,assets,info.--tag,-t: Select the release tag for theassetsaction; defaults to latest when omitted.--limit,-l: Limit the number of rows returned by thereleasesaction. Default:10.--json,-j: Output JSON for scripting or automation.--prerelease,-p: Include prerelease entries forlatestandreleases.
search options:
--limit,-l: Limit the number of repositories returned. Default:10.--sort: Sort search results. Supported values:stars,updated.--order: Sort order. Supported values:desc,asc.--json,-j: Output JSON for scripting or automation.
Global options:
-v,--verbose: Show more execution details such as API requests, response summaries, asset selection, cache hits, and key workflow steps.
Notes:
install --namecan rename a single executable asset, for example installingchlog-windows-amd64.exeaschlog.exe.install --addonly applies to repo targets and appends the managed package definition after a successful install.global.gui_targetis used only for portable GUI applications. GUI installers such as.msiorsetup.exeare launched and do not record a final install directory.downloadstores the raw downloaded asset by default; extraction only happens when--fileor--extract-allis provided.- Archive extraction currently supports
zip,tar.*, and7z. - Argument order follows the
cflag/cappparser constraint and must beCMD --OPTIONS... ARGUMENTS....
The config file is resolved in this order:
EGET_CONFIG~/.config/eget/eget.toml- XDG / LocalAppData fallback path
- Legacy
~/.eget.toml
Supported config sections:
[global]["owner/repo"][packages.<name>]
Example:
[global]
target = "~/.local/bin"
cache_dir = "~/.cache/eget"
proxy_url = "http://127.0.0.1:7890"
system = "windows/amd64"
[api_cache]
enable = false
cache_time = 300
[ghproxy]
enable = false
host_url = ""
support_api = true
fallbacks = []
["inhere/markview"]
tag = "nightly"
[packages.markview]
repo = "inhere/markview"
target = "~/.local/bin"
tag = "nightly"
asset_filters = ["windows"]
[packages.winmerge]
repo = "sourceforge:winmerge"
source_path = "stable"
system = "windows/amd64"
asset_filters = ["x64", "PerUser", "setup"]
[packages.forgejo]
repo = "gitea:codeberg.org/forgejo/forgejo"
system = "linux/amd64"
asset_filters = ["linux", "amd64"]Common fields:
targetgui_targetcache_dirproxy_urlapi_cache.enableapi_cache.cache_timeghproxy.enableghproxy.host_urlghproxy.support_apighproxy.fallbackssystemtagsource_pathfileasset_filtersdownload_sourceextract_allis_guiquietupgrade_only
Default initialization:
eget config initThis writes:
global.target = "~/.local/bin"global.cache_dir = "~/.cache/eget"global.proxy_url = ""api_cache.enable = falseapi_cache.cache_time = 300ghproxy.enable = falseghproxy.host_url = ""ghproxy.support_api = true
By default, the file is created at ~/.config/eget/eget.toml.
Directory semantics:
targetis the default install directorycache_diris the default download cache directoryproxy_urlis the global proxy for remote requests; both GitHub lookups and remote downloads use itsource_pathnarrows SourceForge discovery under a project's files area, for examplestableapi_cacheonly caches GitHub APIGETresponses, and the cache file directory is derived as{cache_dir}/api-cache/cache_timeis measured in seconds; expired cache entries are refreshed from the networkghproxyrewrites GitHub asset download URLs; whensupport_api = true, it also rewritesapi.github.comrequestsghproxy.fallbacksare tried in order when the primary ghproxy host failsproxy_urlis the HTTP-layer proxy, whileghproxyrewrites request URLs; both can be enabled togetherdownloadusescache_dirby default when--tois not providedinstallanddownloadwill reuse cached remote download contents fromcache_dirwhen available
The installed-state store also defaults to ~/.config/eget/installed.toml.
make build
make testThe current version has been restructured into an explicit subcommand CLI, with the entry point in cmd/eget/main.go and business logic concentrated under internal/.
cmd/eget: command entry pointinternal/cli:cappcommand registration and argument bindinginternal/app: install/add/list/update/config use-case orchestrationinternal/install: find, download, verify, and extract execution pipelineinternal/config: config loading, merging, and persistenceinternal/installed: installed-state storageinternal/source/github: GitHub asset discoveryinternal/source/forge: GitLab/Gitea/Forgejo asset discovery
For more details, see docs/DOCS.md.