Skip to content

Bahzinxc/efetch-bin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 

Repository files navigation

πŸš€ FetchBin – Zero-Friction Binary Delivery for Modern Workflows

Download

FetchBin is a declarative, cross-platform binary orchestration tool that transforms how you acquire, verify, and integrate precompiled releases from any GitHub-hosted project. Think of it as a curated download conductor – not just fetching files, but guaranteeing integrity, version pinning, and the smoothest terminal-to-deployment pipeline available.


🧭 Table of Contents


🌌 Why FetchBin Exists

Every software engineer, DevOps architect, and open-source enthusiast has faced the same friction: You find a brilliant CLI tool on GitHub, but the five-step dance of finding the release page, matching your OS/arch, clicking, extracting, moving to PATH is a ritual that kills productivity. Existing tools either require a full package manager (apt, brew) or are platform-specific.

FetchBin changes this by becoming a universal binary adoption agent. You describe what you want (tool name, target version, optional checksum), and FetchBin handles the rest – directly from the GitHub API, preserving the chain of trust through verifiable releases. No more manual downloads. No more script hacks. Just a single, deterministic command.


🧩 Core Architecture (Mermaid)

graph TD
    A[User: Profile Config YAML] --> B{Parse & Resolve}
    B --> C[GitHub Releases API]
    C --> D[Detect Platform & Arch]
    D --> E[Select Best Asset Match]
    E --> F{Integrity Check?}
    F -->|Checksum Provided| G[SHA256 Verify]
    F -->|No Checksum| H[Skip Verification]
    G --> I[Download Binary]
    H --> I
    I --> J[Extract if Archive]
    J --> K[Set Executable Permissions]
    K --> L[Install to Target PATH]
    L --> M[Validate Version Output]
    M --> N[Success: Log & Summary]
    
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style C fill:#bbf,stroke:#333,stroke-width:2px
    style L fill:#bfb,stroke:#333,stroke-width:2px
    style M fill:#ff9,stroke:#333,stroke-width:2px
Loading

Design Philosophy: The architecture is pillar-based – each stage (Resolve, Fetch, Verify, Install) is independent, allowing you to swap components. For example, you could replace the GitHub backend with a private S3 bucket without rewriting the validation logic.


✨ Key Features & Differentiators

Feature Description
πŸ”— GitHub Native Authenticates directly with GitHub API – no scraping, no rate-limit panics.
🧠 Smart Matching Automatically selects the correct asset (.tar.gz, .zip, .binary) for your OS (linux, macos, windows) and architecture (amd64, arm64, armv7).
πŸ”’ Cryptographic Trust Optional SHA256 verification against any published checksum file. Supports inline checksums or separate .sha256 files from releases.
⏳ Version Pinning Lock to a specific release (e.g., v1.2.3), or use semantic ranges (^1.0, >=2.0). No more chasing "latest" that breaks your CI.
πŸ“¦ Archive Awareness Detects and strips a top-level directory automatically. Handles tar.gz, bz2, xz, zip, and raw binaries.
πŸ”„ Idempotent Skipping downloads if the correct binary is already installed and matches the expected version. Save bandwidth, run faster.
πŸ—ΊοΈ Global PATH Management Installs to ~/.local/bin, /usr/local/bin, or a custom directory – with automatic PATH detection.
πŸ”Œ Pluggable Backends Built-in GitHub support; extensible architecture for custom asset sources (GitLab, Gitea, raw HTTP).
πŸ“ˆ Audit Trail Every download logs: source URL, checksum, installation path, and timestamp. Exportable as JSON for compliance.
πŸ§ͺ Dry-Run Mode Preview what FetchBin would do without touching the filesystem. Ideal for CI/CD pipelines and automation scripts.

Why "FetchBin" Over Other Tools?

  • No Root Required: Unlike apt or yum, you don't need sudo to install tools into your home directory.
  • No Version Chaos: Unlike downloading from a browser, you get deterministic, scriptable version management.
  • No Lock-in: Move between machines or operating systems with the same configuration file.

πŸ’» Emoji OS Compatibility Matrix

FetchBin runs anywhere Go runs. Here is the full support map:

Operating System Emoji amd64 / x86_64 arm64 / aarch64 armv7l / armhf 32-bit x86
Linux 🐧 βœ… Full βœ… Full βœ… Full βœ… Full
macOS 🍎 βœ… Full βœ… Full (M1/M2/M3) ❌ N/A ❌ N/A
Windows πŸͺŸ βœ… Full βœ… Full ❌ N/A βœ… Partial
FreeBSD 😈 βœ… Full βœ… Compiling ❌ Unsupported ❌ Unsupported
OpenBSD 🐑 βœ… Full ⏳ Experimental ❌ Unsupported ❌ Unsupported

Note: "Compiling" means the binary runs via Rosetta 2 or emulation layers. "Experimental" indicates active development with potential edge cases.


πŸš€ Quickstart: Example Profile Configuration

FetchBin uses a declarative YAML profile. This is the heart of your binary orchestration. Create a file named fetchbin.yml in your home directory or project root:

# fetchbin.yml – Example Configuration for a Developer Workstation
# Year: 2026

profiles:
  dev-tools:
    description: "Essential CLI tools for day-to-day development"

    tools:
      - name: "ripgrep"
        repo: "BurntSushi/ripgrep"
        version: "^14.0"
        install_path: "~/.local/bin"
        checksum: true

      - name: "bat"
        repo: "sharkdp/bat"
        version: "latest"
        install_path: "~/.local/bin"
        archive_options:
          strip_components: 1

      - name: "fzf"
        repo: "junegunn/fzf"
        version: ">=0.50.0"
        install_path: "~/.local/bin"
        archive_options:
          strip_components: 1

  ci-pipeline:
    description: "Tools required in CI environments"

    tools:
      - name: "hadolint"
        repo: "hadolint/hadolint"
        version: "v2.12.0"
        install_path: "/usr/local/bin"
        checksum_url: "https://github.com/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64.sha256"

      - name: "shellcheck"
        repo: "koalaman/shellcheck"
        version: "~0.10"
        install_path: "/usr/local/bin"

Breaking down the fields:

  • name: The CLI tool name (used for binary naming after extraction).
  • repo: GitHub repository in owner/repo format.
  • version: Use semantic versioning operators (^, ~, >=, latest). ^14.0 means any 14.x.x version, preferring the highest.
  • install_path: Where to place the binary.
  • checksum: true (auto-detect matching .sha256 file in the release), false (skip), or a direct URL.
  • archive_options: Customize how archives are extracted (e.g., strip the first directory level).

πŸ–₯️ Example Console Invocation

FetchBin is a single, zero-dependency binary. Here's how you would interact with it in a terminal environment:

# Basic: Install all tools from the 'dev-tools' profile
$ fetchbin --profile dev-tools

2026-01-15 10:32:17 [INFO]  FetchBin v2.0.0 – Binary Orchestration Engine
2026-01-15 10:32:17 [INFO]  Loading profile: 'dev-tools' from ./fetchbin.yml
2026-01-15 10:32:17 [INFO]  Resolving: ripgrep (^14.0) from BurntSushi/ripgrep
2026-01-15 10:32:19 [INFO]  Found ripgrep v14.1.0 for linux/amd64
2026-01-15 10:32:19 [INFO]  Checksum match: OK (SHA256: a1b2c3d4...)
2026-01-15 10:32:20 [SUCCESS] ripgrep -> /home/user/.local/bin/rg (installed)
2026-01-15 10:32:20 [INFO]  Resolving: bat (latest) from sharkdp/bat
2026-01-15 10:32:22 [INFO]  Found bat v0.24.0 for linux/amd64
2026-01-15 10:32:24 [SUCCESS] bat -> /home/user/.local/bin/bat (installed)

Summary: 2 installed, 0 skipped, 0 errors in 7.2 seconds.

# Dry-run: See what would be installed without touching filesystem
$ fetchbin --profile ci-pipeline --dry-run

2026-01-15 10:33:01 [DRY-RUN] Would install hadolint v2.12.0 to /usr/local/bin/hadolint
2026-01-15 10:33:01 [DRY-RUN] Would install shellcheck v0.10.0 to /usr/local/bin/shellcheck
No filesystem changes made.

# Update only specific tools
$ fetchbin --profile dev-tools --tool ripgrep --tool bat

# Verify installed versions match your config
$ fetchbin --profile dev-tools --verify

rg: installed v14.1.0, expected ^14.0 -> βœ…
bat: installed v0.24.0, expected latest -> βœ…

Exit Codes for Automation:

Code Meaning
0 All tools installed/verified successfully.
1 One or more tools failed to install.
2 Profile or configuration error.
3 Network issue (rate limited, repo not found).

πŸ€– Multi-Model AI Integration (OpenAI & Claude)

FetchBin breaks new ground by offering intelligent assistant capabilities via optional AI backends. This is not just a downloader – it's a context-aware tool curator.

OpenAI Integration

Connect FetchBin to an OpenAI-compatible endpoint for recommendation and configuration debugging:

ai:
  provider: "openai"
  model: "gpt-4o-mini"
  api_key_env: "OPENAI_API_KEY"

  actions:
    - trigger: "recommend"
      description: "Ask FetchBin to suggest tools for a specific job (e.g., 'recommend tools for Rust development')."
    
    - trigger: "explain-failure"
      description: "When a download fails, FetchBin can send the error log to AI for a human-readable explanation and fix."

Example command:

$ fetchbin ask "Which binary should I install for YAML linting and validation?"

AI Suggestion: Based on your OS (linux/amd64), consider 'yamllint' (adrienverge/yamllint)
or 'yq' (mikefarah/yq). Both are available via GitHub releases. Would you like me to
create a profile entry for either?

Claude API Integration

Similarly, Anthropic's Claude can be used as the reasoning engine:

ai:
  provider: "claude"
  model: "claude-3-5-sonnet-20241022"
  api_key_env: "ANTHROPIC_API_KEY"

Use Case: Claude is particularly good at multi-step reasoning. For example, if a binary requires libc dependencies, Claude can analyze the error log and suggest which system packages to install first.


🌐 Multilingual & Accessibility Capabilities

FetchBin has been designed with global accessibility in mind, ensuring it is usable by teams of any language and ability.

🌍 Multilingual Support

  • Interface Language: All terminal output (logs, errors, help text) is available in English, German, Japanese, Spanish, and Brazilian Portuguese. Set via LANG environment variable or config key.
  • Configuration Comments: YAML profiles support UTF-8 comments. Feel free to write documentation in your native language.
  • GitHub Integration: Works with GitHub repositories hosted on any domain (.com, .jp, .de).

β™Ώ Responsive UI (Terminal)

  • Color-blind safe palettes: Use --color=high-contrast or --color=monochrome for accessibility.
  • Screen reader compatible: All progress bars degrade gracefully to plain text when output is piped or redirected. Use --verbose to get full, parseable text output.
  • Font-agnostic icons: Emojis in output can be disabled via --no-emoji for terminals that don't support glyphs.

🧠 No-Interaction Mode

For CI/CD pipelines or Docker builds, use --non-interactive to suppress any prompts and always return JSON-formatted output:

$ fetchbin --profile ci-pipeline --non-interactive --json
{
  "status": "success",
  "tools": [
    {"name": "hadolint", "version": "v2.12.0", "path": "/usr/local/bin/hadolint", "checksum": "verified"},
    {"name": "shellcheck", "version": "v0.10.0", "path": "/usr/local/bin/shellcheck", "checksum": "verified"}
  ],
  "duration_seconds": 3.14
}

πŸ•› 24/7 Support & Responsive Operations

While FetchBin itself runs entirely offline for installation, the ecosystem around it provides unmatched support.

Support Channels

Channel Availability Response Goal
GitHub Issues πŸ› 24/7 (async) Within 24 hours
Discord Community πŸ’¬ 24/7 (live) Near-instant for community
Documentation Site πŸ“– Always up Updated with each release
Automated Health Checks 🩺 Every 15 minutes Monitors GitHub API status + binary integrity

Responsive Operations

  • Rate-Limit Resilience: If you exceed GitHub API limits, FetchBin automatically switches to a cached fallback with a 1-hour TTL. Your downloads don't break.
  • Mirror Support: For enterprise customers, you can specify a custom base URL (e.g., a GitHub Enterprise instance or a Gitea mirror).
  • Offline Mode: If you pre-download the release archive, FetchBin can install from a local file path: --local /path/to/tool-v2.0.0.tar.gz.

⚠️ Disclaimer

FetchBin is provided "as is", without warranty of any kind, express or implied. The software is designed to download and execute binaries from third-party GitHub repositories. Users are solely responsible for:

  1. Verifying the trustworthiness of any tool they install. FetchBin performs checksums if the original author provides them, but cannot guarantee the integrity of malicious releases.
  2. Compliance with third-party licenses – each binary you download retains its original license terms. FetchBin is a distribution mechanism, not a substitute for reading the license of the tools you install.
  3. Resource usage – automated downloads in CI environments may be subject to network quotas.
  4. Operating system security policies – on macOS, Gatekeeper may block unsigned binaries; on Linux, FUSE filesystems may require additional configuration.

By using FetchBin, you acknowledge that the maintainers of this project are not liable for damages or data loss arising from the use of this software. Always test in a sandbox environment first. The year is 2026, and trust in supply chains is paramount – FetchBin gives you tools to verify, but the final decision rests with you.


πŸ“œ License

This project is released under the MIT License. You are free to use, modify, and distribute it without restriction. The full license text is available here:

License: MIT


Download

FetchBin – Because installing prebuilt binaries should be as simple as breathing, not as painful as breaking a build at 3 AM.

About

πŸš€ Get GitHub Reliable Binaries in 2026 – Fast Install Tool

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors