Skip to content

dotbins

Manage CLI tool binaries in your dotfiles repository

dotbins manages CLI tool binaries in your dotfiles repository, offering:

  • ✅ Cross-platform binary management (macOS, Linux, Windows)
  • ✅ No admin privileges required
  • ✅ Version-controlled CLI tools
  • ✅ Downloads from GitHub releases
  • ✅ Perfect for dotfiles synchronization

No package manager, no sudo, no problem.

See this example .dotbins repository: basnijholt/.dotbins completely managed with dotbins.

Note

💡 What makes dotbins different? Unlike similar tools, dotbins uniquely integrates tool-specific shell configurations (aliases, completions, etc.) directly in your dotfiles workflow, not just binary downloads, and allows a Git workflow for managing binaries.

See it in action

Features

  • 🌐 Supports multiple platforms (macOS, Linux, Windows) and architectures (amd64, arm64, etc.)
  • 📦 Downloads and organizes binaries from GitHub releases
  • 🔄 Installs and updates tools to their latest versions with a single command
  • 📌 Pin tools to specific versions with the tag parameter
  • 📊 Tracks installed versions and update timestamps for all tools
  • 🧩 Extracts binaries from various archive formats (zip, tar.gz)
  • 📂 Organizes tools by platform and architecture for easy access
  • 🐙 Easy integration with your dotfiles repository for version control
  • ⚙️ Automatic PATH & Shell Code: Configures PATH and applies custom shell snippets (shell_code).

Why I Created dotbins

I frequently works across multiple environments where I clone my dotfiles repository with all my preferred configurations. I faced a common frustration: some of my favorite tools (fzf, bat, zoxide, etc.) were not available on the new system and installing them with a package manager is too much work or even not possible. dotbins was born out of this frustration.

It allows me to:

  1. Track pre-compiled binaries in a separate Git repository (using Git LFS for efficient storage)
  2. Include that repository as a submodule in my dotfiles
  3. Ensure all my essential tools are immediately available after cloning, regardless of system permissions

Now when I clone my dotfiles on any new system, I get not just my configurations but also all the CLI tools I depend on for productivity, ready to use with their specific aliases and shell initializations automatically configured.

No package manager, no sudo, no problem!

Get Started -> View Configuration ->

Comparison with Alternatives

dotbins fills a specific niche in the binary management ecosystem. Here's how it compares to key alternatives:

Tool Version Management Shell Integration Dotfiles Integration Primary Use Case
dotbins Latest only Built-in via shell_code First-class with Git (LFS) Complete dotfiles solution
binenv Multiple versions with constraints Separate completion scripts Not focused on Development environments
eget Latest or specific only None Not focused on Quick one-off installs
asdf/aqua Multiple plugins & versions Plugin-specific Not focused on Development environments
apt/brew System packages None Not possible System-wide management

Key Alternatives

Version Managers (e.g., binenv, asdf)

  • Pros: Advanced version management (constraints like >=1.2.3), multiple versions side-by-side
  • Cons vs. dotbins:
  • Focus on version management rather than dotfiles integration
  • Separate configuration needed for shell integration (aliases, completions)
  • Often use shims or more complex architecture
  • When to choose: For development environments where you need multiple versions of tools

Binary Downloaders (e.g., eget)

  • Pros: Lightweight, fast for one-off downloads
  • Cons vs. dotbins:
  • No configuration for multiple tools
  • No shell integration for aliases or environment setup
  • No version tracking between sessions
  • When to choose: For quick installation of individual tools without configuration needs

System Package Managers (apt, brew, etc.)

  • Pros: System-wide installation, dependency management
  • Cons vs. dotbins:
  • Require admin privileges
  • Not portable across systems
  • Cannot be version-controlled in dotfiles
  • When to choose: For system-wide software needed by multiple users

The dotbins Difference

dotbins uniquely combines:

  1. Binary management - Downloading from GitHub Releases
  2. Shell configuration - Defining aliases and shell setup in the same file:
    bat:
      repo: sharkdp/bat
      shell_code: |
        alias cat="bat --plain --paging=never"
    
  3. Dotfiles integration - Designed to be version-controlled as a Git repository
  4. Cross-platform portability - Works the same across Linux, macOS, Windows

This makes it perfect for users who want to manage their complete shell environment in a version-controlled dotfiles repository that can be easily deployed on any system.

Support and Contributions

We appreciate your feedback and contributions! If you encounter any issues or have suggestions for improvements, please file an issue on the GitHub repository. We also welcome pull requests for bug fixes or new features.

Happy tooling! 🧰🛠️🎉