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.
- Why FetchBin Exists
- Core Architecture (Mermaid)
- Key Features & Differentiators
- Emoji OS Compatibility Matrix
- Quickstart: Example Profile Configuration
- Example Console Invocation
- Multi-Model AI Integration (OpenAI & Claude)
- Multilingual & Accessibility Capabilities
- 24/7 Support & Responsive Operations
- Disclaimer
- License
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.
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
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.
| 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. |
- No Root Required: Unlike
aptoryum, you don't needsudoto 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.
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.
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 inowner/repoformat.version: Use semantic versioning operators (^,~,>=,latest).^14.0means any 14.x.x version, preferring the highest.install_path: Where to place the binary.checksum:true(auto-detect matching.sha256file in the release),false(skip), or a direct URL.archive_options: Customize how archives are extracted (e.g., strip the first directory level).
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). |
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.
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?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.
FetchBin has been designed with global accessibility in mind, ensuring it is usable by teams of any language and ability.
- Interface Language: All terminal output (logs, errors, help text) is available in English, German, Japanese, Spanish, and Brazilian Portuguese. Set via
LANGenvironment 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).
- Color-blind safe palettes: Use
--color=high-contrastor--color=monochromefor accessibility. - Screen reader compatible: All progress bars degrade gracefully to plain text when output is piped or redirected. Use
--verboseto get full, parseable text output. - Font-agnostic icons: Emojis in output can be disabled via
--no-emojifor terminals that don't support glyphs.
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
}While FetchBin itself runs entirely offline for installation, the ecosystem around it provides unmatched support.
| 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 |
- 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.
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:
- 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.
- 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.
- Resource usage β automated downloads in CI environments may be subject to network quotas.
- Operating system security policies β on macOS, Gatekeeper may block unsigned binaries; on Linux,
FUSEfilesystems 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.
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:
FetchBin β Because installing prebuilt binaries should be as simple as breathing, not as painful as breaking a build at 3 AM.