#userspace #zero-config #binary-manager #no-install #portable-tools

app poof

Easy to use zero-config, zero-install, zero-dependencies manager of pre-built software that works like magic

4 releases (2 breaking)

0.4.0 May 2, 2025
0.3.1 Apr 30, 2025
0.3.0 Apr 28, 2025
0.2.0 Apr 27, 2025

#238 in Command line utilities

Download history 46/week @ 2025-04-21 316/week @ 2025-04-28 34/week @ 2025-05-05 16/week @ 2025-05-12

412 downloads per month

MIT license

180KB
1.5K SLoC

poof logo

GitHub Release Crates.io Crates.io MSRV

CI Security audit dependency status

Licenses License: MIT

poof πŸͺ„ - magic manager of pre-built software

Easy-to-use all-in-one binary with zero-config, zero-install, and zero-dependencies.

You just run poof install someuser/somerepo and... poof! it is installed and available in your shell.

"poof-poof"

What poof says when it makes awesome pre-built software available for you!

"I am poof"

What poof thinks of itself

Note: this project is actively being developed. I'm making ongoing improvements to the code while trying to maintain stability and up-to-date documentation. However, things may break. If you encounter some issues during this development phase, please report them. Thank you!

Features

  • πŸ› οΈ Zero-config: Works immediately without any setup required for first run
  • πŸ“¦ Zero-install: Simply download the binary for your platform and use it right away
  • πŸ”— Zero-dependencies: It runs standalone without requiring any additional software
  • πŸ‘€ User-space: Designed to work in user-space, no root access needed
  • 🌍 Cross-platform: Works on Linux and macOS (FreeBSD and Windows support is planned)
  • πŸš€ Easy to use: Just run poof and it will do the rest

Bonus:

  • βš™οΈ Written in Rust: with linting and formatting applied at commit time
  • 0️⃣ Zero-versioned: because major versions are a thing of the past (and poof, albeit magic, is baby).

Why

More and more often modern tools are built with languages like Rust and Go, and offer pre-built binaries. But they aren't always available in standard package managers. Here's where poof helps:

  • Download and put in $PATH binaries from GitHub with a single command
  • Install tools discovered on sites like Terminal Trove instantly
  • Test newer versions of tools before they reach official repositories without uninstalling your current version
  • Fast jump on interesting utilities you read about without hassle
  • Prefer use of pre-built, portable, self-contained binaries without involving system package managers

Quick start

  1. Get poof using one of the methods below:

    • Pre-built binary: Download the binary from latest release, and move it to $PATH.
    • binstall: If you have binstall, you can get the binary using cargo and skip compilation:
    cargo binstall poof
    
    • cargo: Build and install latest release on crates.io using cargo:
    cargo install --locked poof
    
    • From source: Build and install from source code on GitHub:
    cargo install --locked --git https://github.com/pirafrank/poof --tag VERSION
    

    Note: Replace VERSION with the desired version to install. Not specifying a tag will install from main branch. main branch should be stable, but it's unreleased software and may contain bugs or breaking changes. It should considered beta quality software.

  2. Add poof's bin directory to $PATH. Paste the following to your ~/.bashrc or ~/.zshrc:

    On Linux:

    export PATH="${HOME}/.local/share/poof/bin:${PATH}"
    

    On macOS:

    export PATH="${HOME}/Library/Application Support/poof/bin:${PATH}"
    
  3. Done! Now try to install something, for example:

    poof install pirafrank/rust_exif_renamer
    

About poof's bin directory

After installing poof, you need to add its bin directory to your $PATH. Be sure it is at the beginning of your $PATH so that it takes precedence over any other version of the same binary you may have installed other ways.

Having a dedicated directory for poof binaries is a good practice, as it allows you to:

  • keep them separate from other software installed on your system,
  • keep them separate from paths you may manually edit (like ~/.local/bin),
  • easily temporarily disable poof by removing the directory from your $PATH (see below).

Usage


poof - magic manager of pre-built software

Usage: poof [OPTIONS] <COMMAND>

Commands:
  download  Only download binary for the platform in current directory. No install
  install   Download binary for the platform and install it
  list      List installed binaries and their versions
  use       Make an installed version the one to be used by default
  enable    Persistently add poof’s bin directory to your shell PATH
  check     Check if poof's bin directory is in the PATH
  info      Show install and environment information
  version   Show version information
  help      Print this message or the help of the given subcommand(s)

Options:
  -v, --verbose...  Increase logging verbosity
  -q, --quiet...    Decrease logging verbosity
  -h, --help        Print help
  -V, --version     Print version

For more information, visit: https://github.com/pirafrank/poof

If you encounter any issues, please report them at:
https://github.com/pirafrank/poof/issues

Where poof stores data

poof stores its data in standard directories via the dirs crate. Specifically, it uses the following directories:

Installed binaries and bin directory:

  • Linux: ~/.local/share/poof
  • macOS: ~/Library/Application Support/poof

Cache of downloaded releases:

  • Linux: ~/.cache/poof
  • macOS: ~/Library/Caches/poof

Enable

Easily add poof's bin directory to your $PATH by running:

poof enable

It will append a line to your ~/.bashrc or ~/.zshrc. Afterwards, reload your shell with:

source ~/.bashrc
# or
source ~/.zshrc

or just open a new terminal.

You can safely re-run poof enable: it will detect the existing line and do nothing if it’s already present.

Disable

If you want to disable poof, you can do so by removing its bin directory from your $PATH.

You can do this by commenting out the line you added to your ~/.bashrc or ~/.zshrc file, or by removing the directory from $PATH variable in your shell session.

Uninstall

To uninstall poof, just delete the binary from your $PATH.

If you have installed it using cargo, you can uninstall it with:

cargo uninstall poof

After you uninstall poof, you should remove its bin directory from your $PATH, and delete its data and cache directories as well.

Project goals

  • Fetch and put in $PATH pre-built binaries available on Internet
  • Work without requiring buckets, repositories, or registries
  • Work out-of-the-box with no setup or configuration needed
  • Be designed to in user-space
  • Be as cross-platform as possible
  • Be easy to use, with sensible and ergonomic commands and options
  • Have no external dependencies

Non-goals

  • Build software from source code
  • Manage software that doesn't provide pre-built binaries
  • Act as a general package manager
  • Manage software installed by other tools or package managers
    • Replace or modify binaries installed by other package managers
    • Manage dependencies required by the software
    • Handle language-specific package managers (pip, npm, cargo, etc.)
    • Interface with system package managers (apt, yum, brew, etc.)

Roadmap

A list of features implemented/to implement is available in the Wiki. The list is not final and may change over time.

Contributing

Contributions are welcome! Please read the CONTRIBUTING file for details on how to contribute to this project. Please make sure to follow the code of conduct when contributing.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgements

poof software is born out of a necessity of mine, yet its name is a tribute to the much more famous poof.

Dependencies

~17–32MB
~510K SLoC