Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Easy Install
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.
Features
- 🚀 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
Installation
Windows
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/easy-install/easy-install/main/install.ps1 | iex"
Linux/macOS
# Direct installation
|
# Set target
|
# wget
|
# Using proxy (for restricted networks)
|
# Using CDN
|
# Using xget proxy
|
# Using gh-proxy
|
# Using ei-assets mirror (more proxy options available)
|
Cargo (Rust)
# Install from crates.io
# Install using cargo-binstall
# Install from GitHub
npm/pnpm/yarn
# or
# or
Usage
Basic Installation
# Install the latest release from a GitHub repository
# Install a specific version
# Short syntax for GitHub repositories
Advanced Options
# Specify target platform
# Set a custom alias for the installed binary (or directory, for multi-file packages)
# Install specific binary from a multi-binary package
# Combine --regex and --alias for complex filenames
# Install from a direct download URL
# Install without adding to PATH
# Optimize binary with strip and UPX compression
Filtering Artifacts: --name vs --regex
When a GitHub release contains multiple assets, ei automatically detects your platform and picks the right one. But sometimes you need finer control — that's where --name and --regex come in.
--name
--name is used when there are multiple assets matching your platform, and you only want one of them. For example, the quickjs-ng release contains both qjs and qjsc executables:
# Both qjs and qjsc match your platform — pick just qjs
How it works: ei first uses guess_target to find all assets matching your platform (e.g., x86_64-pc-windows-msvc), then applies --name to filter the results. It does NOT bypass platform detection.
--regex
--regex is used when asset filenames are too complex for guess_target to extract platform information. For example, mpv uses filenames with embedded version hashes:
mpv-v0.41.0-dev-g4c220ffd9-28826186115-x86_64-pc-windows-msvc.zip
mpv-v0.41.0-dev-g4c220ffd9-28826186115-aarch64-pc-windows-msvc.zip
These confuse guess_target because the version blob sits between the tool name and the platform triple. Use --regex to match the raw filename directly:
# Match the x86_64 windows-msvc asset by its filename
# Match a macOS variant
How it works: The regex is matched directly against each asset's original filename. When a match is found, the asset is selected immediately — guess_target is completely bypassed. The regex must match exactly one asset; matching zero or multiple is an error.
Pairing with --alias: Regex-matched assets often have long, unwieldy names. Use --alias to give the installed file (or directory, for multi-file packages) a clean, memorable name:
# Single-file package: the executable is renamed
# long-name-x86_64-pc-windows-msvc.exe → tool.exe
# Multi-file package (e.g. mpv): the install directory is renamed
# ~/.ei/long-dir-name/ → ~/.ei/mpv-dev/
💡 Rule of thumb: Use
--namewhenguess_targetcan recognize your platform in the filenames. Use--regexwhen filenames are non-standard and platform detection fails.
CLI Reference
Below is the full list of arguments and options accepted by ei:
USAGE:
ei [OPTIONS] [URL] [COMMAND]
Arguments
| Argument | Description |
|---|---|
[URL] |
GitHub repo (owner/repo), release URL, or artifact URL. If omitted, prints help. |
Options
| Option | Short | Description | Default |
|---|---|---|---|
--dir <DIR> |
-d |
Installation directory for downloaded binaries. Can be an absolute path or a name (stored under ~/.ei/). |
~/.ei |
--no-path |
Skip adding installed binaries to PATH. | false |
|
--name <NAME> |
Filter artifacts by name. Supports comma-separated values for multiple filters. | ||
--alias <ALIAS> |
Rename the installed binary (or directory, for multi-file packages). | ||
--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 |
--fuzzy |
Use fuzzy target matching (match arch+os, ignoring abi). | false |
|
--regex <PATTERN> |
Match asset filenames directly with regex, bypassing platform detection. See Filtering Artifacts. | ||
--version |
-V |
Print version information. | |
--help |
-h |
Print help information. |
Subcommands
| 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. |
Binary Optimization
Easy Install supports automatic binary optimization for single-executable installations:
# Strip debug symbols to reduce binary size
# Compress binary with UPX for maximum size reduction
# Combine both for optimal results (strip runs first, then UPX)
# 27M boa-x86_64-pc-windows-msvc.exe -> 7.1M C:/Users/Admin/.ei/boa.exe
Requirements:
--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
Custom Installation Directory
# Install to a specific absolute path
# Install to a named directory under ~/.ei/
Upgrade
Upgrade ei itself to the latest version with a single command:
This will download the latest release from the official repository and replace the current binary in-place.
Configuration Management
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
# View specific configuration
# Set configuration values
# 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)
Quiet Mode
Suppress all output messages during installation:
# Install silently (no output)
# Short form
# Useful for scripts and automation
&&
Shell Completions
Generate shell completion scripts for your preferred shell:
# Generate completions for bash
# Generate completions for zsh
# Generate completions for fish
# Generate completions for PowerShell
# Generate completions for elvish
Supported 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
Manifest-Based Installation
# Install from a remote manifest
# From release file
# From github file
# Install from a local manifest file
Use Cases
Replacing cargo-binstall
Easy Install can be used as a drop-in replacement for cargo-binstall with more flexibility:
# Instead of: cargo binstall cargo-binstall
# Use:
# This installs cargo-binstall to your Cargo bin directory
# Works with any GitHub release, not just Rust projects
Distribution Manifest
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.
Example: mujs
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:
Example: Zig
For tools hosted outside GitHub, you can specify direct download URLs:
Supported Platforms
- Windows (x86_64, aarch64)
- Linux (x86_64, aarch64, musl)
- macOS (x86_64, aarch64/Apple Silicon)
Default Installation Location
Binaries are installed to ~/.ei by default, which is automatically added to your PATH during installation.
Similar Tools
- eget - Easily install prebuilt binaries from GitHub
- ubi - Universal Binary Installer
- dra - Download release assets from GitHub
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.