easy-install easy-install
winget install --id=easy-install.easy-install -e A cross-platform command-line tool for effortlessly installing binaries from GitHub releases and other sources.
winget install --id=easy-install.easy-install -e A cross-platform command-line tool for effortlessly installing binaries from GitHub releases and other sources.
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.
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.git
npm 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 --upx
Below 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 | -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 | Filter artifacts by name. Supports comma-separated values for multiple filters. | ||
--alias | Rename the installed binary to the given alias. | ||
--target | Target platform (e.g., x86_64-unknown-linux-gnu). Auto-detected if not specified. | auto-detect | |
--retry | Number of retry attempts for failed downloads. | 3 | |
--proxy | GitHub proxy to use (github, gh-proxy, ghproxy, jsdelivr, etc.). | github | |
--timeout | 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 | 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.exe
Requirements:
--strip: Requires the strip command to be available in PATH--upx: Requires the upx command to be available in PATHNotes:
--best --lzma flags 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-name
Upgrade ei itself to the latest version with a single command:
ei upgrade
This 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 values
Supported 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.elv
Supported Shells:
After generating the completion script, restart your shell or source the completion file to enable tab completion for ei commands.
Configuration File Location:
ei_config.json file is created in the same directory as the ei executableei config commands# 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 projects
For 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"]
}
}
}
Binaries are installed to ~/.ei by default, which is automatically added to your PATH during installation.
MIT
Contributions are welcome! Please feel free to submit a Pull Request.