A cross-platform command-line tool for effortlessly installing binaries from GitHub releases and other sources. Simplify your workflow by downloading and setting up executables with a single command.
- 🚀 Install binaries directly from GitHub releases
- 🎯 Automatic platform detection and binary selection
- 📦 Support for multiple archive formats (zip, tar.gz, tar.xz, etc.)
- 🔧 Custom installation directories
- 🌐 Proxy support for restricted networks
- 📋 Manifest-based installations for complex packages
- 🔄 Version-specific or latest release installation
- 💾 Automatic PATH configuration
- ⚙️ Persistent configuration management
- ⏱️ Configurable network timeouts
- 🗜️ Binary optimization with strip and UPX compression
- 🔄 Self-upgrade support
powershell -ExecutionPolicy Bypass -c "irm https://github.com/easy-install/easy-install/releases/latest/download/install.ps1 | iex"# Direct installation
curl -fsSL https://raw.githubusercontent.com/easy-install/easy-install/main/install.sh | sh
# wget
wget -qO- https://raw.githubusercontent.com/easy-install/easy-install/main/install.sh | sh
# Using proxy (for restricted networks)
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/easy-install/easy-install/main/install.sh | sh
# Using CDN
curl -fsSL https://cdn.jsdelivr.net/gh/easy-install/easy-install/install.sh | sh
# Using xget proxy
curl -fsSL https://xget.xi-xu.me/gh/easy-install/easy-install/raw/refs/heads/main/install.sh | sh -s -- --proxy xget
# Using gh-proxy
curl -fsSL https://gh-proxy.com/https://github.com/easy-install/easy-install/blob/main/install.sh | sh -s -- --proxy gh-proxy
# Using ei-assets mirror (more proxy options available)
curl -fsSL https://cdn.jsdelivr.net/gh/ahaoboy/ei-assets/install.sh | sh -s -- --proxy jsdelivr# Install from crates.io
cargo install easy-install
# Install using cargo-binstall
cargo binstall easy-install
# Install from GitHub
cargo install --git https://github.com/easy-install/easy-install.gitnpm install -g @easy-install/easy-install
# or
pnpm add -g @easy-install/easy-install
# or
yarn global add @easy-install/easy-install# Install the latest release from a GitHub repository
ei https://github.com/ahaoboy/mujs-build
# Install a specific version
ei https://github.com/ahaoboy/mujs-build/releases/tag/v0.0.1
# Short syntax for GitHub repositories
ei yt-dlp/yt-dlp# Specify target platform
ei https://github.com/ahaoboy/mujs-build --target x86_64-pc-windows-gnu
# Set a custom alias for the installed binary
ei https://github.com/ip7z/7zip/releases/tag/25.01 --alias 7z
# Install specific binary from a multi-binary package
ei https://github.com/quickjs-ng/quickjs --alias=qjs
# Install from a direct download URL
ei https://github.com/denoland/deno/releases/download/v2.1.1/deno-x86_64-pc-windows-msvc.zip
ei https://github.com/denoland/deno/releases/latest/download/deno-x86_64-pc-windows-msvc.zip
# Install without adding to PATH
ei https://github.com/quickjs-ng/quickjs --install-only
# Optimize binary with strip and UPX compression
ei https://github.com/boa-dev/boa --strip --upxBelow is the full list of arguments and options accepted by ei:
USAGE:
ei [OPTIONS] [URL] [COMMAND]
| Argument | Description |
|---|---|
[URL] |
GitHub repo (owner/repo), release URL, or artifact URL. If omitted, prints help. |
| Option | Short | Description | Default |
|---|---|---|---|
--dir <DIR> |
-d |
Installation directory for downloaded binaries. Can be an absolute path or a name (stored under ~/.ei/). |
~/.ei |
--install-only |
Only install the binary, do not add it to PATH. | false |
|
--name <NAME> |
Filter artifacts by name. Supports comma-separated values for multiple filters. | ||
--alias <ALIAS> |
Rename the installed binary to the given alias. | ||
--target <TARGET> |
Target platform (e.g., x86_64-unknown-linux-gnu). Auto-detected if not specified. |
auto-detect | |
--retry <N> |
Number of retry attempts for failed downloads. | 3 |
|
--proxy <PROXY> |
GitHub proxy to use (github, gh-proxy, ghproxy, jsdelivr, etc.). |
github |
|
--timeout <SECONDS> |
Network request timeout in seconds. | 600 |
|
--strip [BOOL] |
Strip debug symbols from executable. Can be used as a flag (--strip) or with a value (--strip true). |
false |
|
--upx [BOOL] |
Compress executable with UPX. Can be used as a flag (--upx) or with a value (--upx true). |
false |
|
--quiet |
-q |
Suppress all output messages. | false |
--version |
-V |
Print version information. | |
--help |
-h |
Print help information. |
| Subcommand | Description |
|---|---|
config |
Manage persistent configuration settings. See Configuration Management. |
completions <SHELL> |
Generate shell completion scripts. See Shell Completions. |
upgrade |
Upgrade ei to the latest version. |
Easy Install supports automatic binary optimization for single-executable installations:
# Strip debug symbols to reduce binary size
ei https://github.com/boa-dev/boa --strip
# Compress binary with UPX for maximum size reduction
ei https://github.com/boa-dev/boa --upx
# Combine both for optimal results (strip runs first, then UPX)
ei https://github.com/boa-dev/boa --strip --upx
# 27M boa-x86_64-pc-windows-msvc.exe -> 7.1M C:/Users/Admin/.ei/boa.exeRequirements:
--strip: Requires thestripcommand to be available in PATH--upx: Requires theupxcommand to be available in PATH
Notes:
- Optimization only works when installing a single executable file
- If the required tool is not found, a warning is displayed but installation continues
- Works cross-platform: you can use these flags on any OS, and they'll be silently skipped if tools aren't available
- UPX uses
--best --lzmaflags for maximum compression
# Install to a specific absolute path
ei ./dist-manifest/mpv-easy.json -d c:/mpv-easy
# Install to a named directory under ~/.ei/
ei ./dist-manifest/mpv-easy.json -d custom-nameUpgrade ei itself to the latest version with a single command:
ei upgradeThis will download the latest release from the official repository and replace the current binary in-place.
Easy Install supports persistent configuration through the config subcommand. Configuration is stored in ei_config.json in the same directory as the ei executable.
# View all configuration
ei config
# View specific configuration
ei config proxy
ei config dir
ei config target
ei config timeout
ei config retry
ei config strip
ei config upx
# Set configuration values
ei config proxy gh-proxy
ei config dir /custom/install/path
ei config target x86_64-pc-windows-msvc
ei config timeout 300
ei config retry 5
ei config strip true
ei config upx true
# Configuration priority (highest to lowest):
# 1. Command-line arguments (--proxy, --dir, --target, --timeout, --retry, --strip, --upx)
# 2. Configuration file (ei_config.json)
# 3. Default valuesSupported Configuration Keys:
proxy- Default proxy for GitHub downloads (github, gh-proxy, ghproxy, jsdelivr, etc.)dir- Default installation directorytarget- Default target platformtimeout- Network request timeout in seconds (default: 600)retry- Number of retry attempts for failed downloads (default: 3)strip- Strip debug symbols from executables (default: false)upx- Compress executables with UPX (default: false)
Suppress all output messages during installation:
# Install silently (no output)
ei https://github.com/ahaoboy/mujs-build --quiet
# Short form
ei https://github.com/ahaoboy/mujs-build -q
# Useful for scripts and automation
ei yt-dlp/yt-dlp -q && echo "Installation complete"Generate shell completion scripts for your preferred shell:
# Generate completions for bash
ei completions bash > ~/.local/share/bash-completion/completions/ei
# Generate completions for zsh
ei completions zsh > ~/.zfunc/_ei
# Generate completions for fish
ei completions fish > ~/.config/fish/completions/ei.fish
# Generate completions for PowerShell
ei completions powershell > $PROFILE/../Completions/ei.ps1
# Generate completions for elvish
ei completions elvish > ~/.config/elvish/completions/ei.elvSupported Shells:
- bash
- zsh
- fish
- powershell
- elvish
After generating the completion script, restart your shell or source the completion file to enable tab completion for ei commands.
Configuration File Location:
- The
ei_config.jsonfile is created in the same directory as theeiexecutable - Only created when you use
ei configcommands - If the file exists but is corrupted, it will be automatically reset to defaults
# Install from a remote manifest
ei "https://github.com/ahaoboy/mujs-build/releases/download/v0.0.4/dist-manifest.json"
ei "https://github.com/easy-install/easy-install/releases/latest/download/ffmpeg.json"
# Install from a local manifest file
ei "./dist-manifest/screentogif.json"Easy Install can be used as a drop-in replacement for cargo-binstall with more flexibility:
# Instead of: cargo binstall cargo-binstall
# Use:
ei cargo-bins/cargo-binstall -d ~/.cargo/bin
# This installs cargo-binstall to your Cargo bin directory
# Works with any GitHub release, not just Rust projectsFor complex packages containing multiple files, you can create a dist-manifest.json file to define the structure and assets. This follows the cargo-dist-schema format.
A typical mujs release contains multiple files:
.
├── libmujs.a
├── libmujs.o
├── libmujs.so
├── mujs-pp.exe
├── mujs.exe
└── mujs.pc
The corresponding dist-manifest.json defines which files to install:
{
"mujs-aarch64-apple-darwin.tar.gz": {
"name": "mujs-aarch64-apple-darwin.tar.gz",
"target_triples": [
"aarch64-apple-darwin"
],
"assets": [
{
"name": "mujs",
"path": "mujs",
"kind": "executable"
},
{
"name": "mujs-pp",
"path": "mujs-pp",
"kind": "executable"
},
{
"name": "libmujs.dylib",
"path": "libmujs.dylib",
"kind": "c_dynamic_library"
},
{
"name": "libmujs.a",
"path": "libmujs.a",
"kind": "c_static_library"
}
]
}
}For tools hosted outside GitHub, you can specify direct download URLs:
{
"artifacts": {
"https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0.tar.xz": {
"name": "zig",
"target_triples": ["x86_64-unknown-linux-gnu"]
},
"https://ziglang.org/download/0.13.0/zig-macos-x86_64-0.13.0.tar.xz": {
"name": "zig",
"target_triples": ["x86_64-apple-darwin"]
},
"https://ziglang.org/download/0.13.0/zig-macos-aarch64-0.13.0.tar.xz": {
"name": "zig",
"target_triples": ["aarch64-apple-darwin"]
},
"https://ziglang.org/download/0.13.0/zig-windows-x86_64-0.13.0.zip": {
"name": "zig",
"target_triples": ["x86_64-pc-windows-gnu"]
}
}
}- Windows (x86_64, aarch64)
- Linux (x86_64, aarch64, musl)
- macOS (x86_64, aarch64/Apple Silicon)
Binaries are installed to ~/.ei by default, which is automatically added to your PATH during installation.
- eget - Easily install prebuilt binaries from GitHub
- ubi - Universal Binary Installer
- dra - Download release assets from GitHub
MIT
Contributions are welcome! Please feel free to submit a Pull Request.