Skip to content

easy-install/easy-install

Repository files navigation

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://github.com/easy-install/easy-install/releases/latest/download/install.ps1 | iex"

Linux/macOS

# 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

Cargo (Rust)

# 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/pnpm/yarn

npm install -g @easy-install/easy-install
# or
pnpm add -g @easy-install/easy-install
# or
yarn global add @easy-install/easy-install

Usage

Basic Installation

# 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

Advanced Options

# 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

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
--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.

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
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 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 --lzma flags for maximum compression

Custom Installation Directory

# 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

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.

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
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 directory
  • target - Default target platform
  • timeout - 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)
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"

Shell Completions

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:

  • 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.json file is created in the same directory as the ei executable
  • Only created when you use ei config commands
  • If the file exists but is corrupted, it will be automatically reset to defaults

Manifest-Based Installation

# 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"

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:
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

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:

{
  "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"
      }
    ]
  }
}

Example: Zig

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"]
    }
  }
}

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.

Repository

https://github.com/easy-install/easy-install

About

A cross-platform command-line tool for effortlessly installing binaries from GitHub releases and other sources.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors