poof 0.6.0

Easy to use zero-config, zero-install, zero-dependencies manager of pre-built software that works like magic
<div align="center">
  <img src="./.assets/poof_logo_bg_tx_384.png" alt="poof logo" width="384"/>

  [![GitHub Release](https://img.shields.io/github/v/release/pirafrank/poof)](https://github.com/pirafrank/poof/releases/latest)
  [![Crates.io](https://img.shields.io/crates/v/poof)](https://crates.io/crates/poof)
  [![Crates.io MSRV](https://img.shields.io/crates/msrv/poof)](https://github.com/pirafrank/poof/blob/main/Cargo.toml)

  [![CI](https://github.com/pirafrank/poof/actions/workflows/ci.yml/badge.svg)](https://github.com/pirafrank/poof/actions/workflows/ci.yml)
  [![Security audit](https://github.com/pirafrank/poof/actions/workflows/security.yml/badge.svg)](https://github.com/pirafrank/poof/actions/workflows/security.yml)
  [![codecov](https://codecov.io/gh/pirafrank/poof/graph/badge.svg?token=UR4XUNOCMO)](https://codecov.io/gh/pirafrank/poof)
  [![dependency status](https://deps.rs/repo/github/pirafrank/poof/status.svg)](https://deps.rs/repo/github/pirafrank/poof)

  [![Licenses](https://github.com/pirafrank/poof/actions/workflows/licenses.yml/badge.svg)](https://github.com/pirafrank/poof/actions/workflows/licenses.yml)
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
</div>

# 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

For more information read below or check the documentation in the wiki. Got an idea? Let's talk in Discussions!

[![GitHub Wiki](https://img.shields.io/badge/GitHub-Wiki-181717?style=flat-square&logo=github&logoColor=white&color=blue)](https://github.com/pirafrank/poof/wiki)
[![GitHub Discussions](https://img.shields.io/badge/GitHub-Discussions-181717?style=flat-square&logo=github&logoColor=white&color=blue)](https://github.com/pirafrank/poof/discussions)

## Features

- **๐Ÿš€ Easy to use**: Sensible commands that are easy to remember and type. Just run `poof help` to know more
- **๐Ÿ‘ค User-space**: Designed to work in user-space and be portable. No root access needed to manage your tools
- **๐Ÿง  Smart asset selection**: Automatically detects your OS, architecture, and libc (glibc vs musl) to download the right binary for your configuration. Supports multi-tool releases, multi-binary assets, mono-repos, and repositories not following Semantic Versioning
- **๐Ÿ“ฆ Archive format support**: Handles 10+ formats including ZIP, TAR, 7z, and all their compressed variants with magic number validation
- **๐Ÿ”„ Version management**: Install multiple versions of the same tool side-by-side and switch between them instantly with `poof use`
- **๐Ÿงน Clean management**: XDG-compliant directory structure with separate cache, data, and bin directories
- **๐Ÿ” Helpful error handling**: Fuzzy matching for repository names catches typos, conflict detection warns about existing binaries, and error messages always provide context

### Platform Support

- **๐ŸŒ Cross-platform**: Works on Linux and macOS (FreeBSD support is planned)
- **๐Ÿ—๏ธ Wide architecture support**: 8 architectures on Linux, and both Intel and Apple Silicon on macOS
- **๐Ÿš Shell integration**: Native support for 7 shells (bash, zsh, fish, elvish, nushell, powershell, xonsh) with auto-completions and one-command PATH setup

### Core Philosophy

- **๐Ÿ› ๏ธ Zero-config**: Use it straight away, no yaml, no TOML or other boring configuration
- **๐Ÿ“ฆ Zero-install**: One self-contained binary you just put in `PATH` and `rm` to uninstall
- **๐Ÿ”— Zero-dependencies**: It runs standalone, no additional software needed

### What's more?

- **โš™๏ธ Written in Rust**: Safe and fast binaries built on reliable dependencies, with linting and formatting applied at commit time
- **0๏ธโƒฃ Zero-versioned**: Because major versions are [a thing of the past]https://0ver.org/ (and *poof*, albeit magic, is baby).

## Why

More and more often modern tools are built with languages like C/C++, Rust or 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]http://terminaltrove.com instantly
- Test newer versions of tools before they reach official repositories without uninstalling your current version
- Easily install multiple versions of the same tool and switch between them
- Keep your system clean from unnecessary packages and dependencies installed via system package managers
- Configure your CI/CD pipelines to use pre-built binaries without messing with additional requirements
- Install software in sandboxed environments without root access

## Requirements

- Linux or macOS released in the last 10 years, running on one of the supported architectures:
  - Linux (`x86_64`, `aarch64`, `armv7l`, `i686`, `ppc64le`, `s390x`, `riscv64gc`, `loongarch64`)
  - macOS (`x86_64`, `aarch64`)

## Quick start

1. Get `poof` latest stable release using this quick one-liner:

    ```sh
    curl -fsSL https://raw.githubusercontent.com/pirafrank/poof/main/install.sh | sh
    ```

    or via one of other [install methods]https://github.com/pirafrank/poof/wiki/How-to-install.

2. Add poof's `bin` directory to `$PATH`:

    ```sh
    poof enable
    ```

    Then reload you shell.

3. **๐ŸŽ‰ Done!** Now try to install something, for example:

    ```sh
    poof install pirafrank/vault-conductor
    ```

Additional information about [installation](https://github.com/pirafrank/poof/wiki/How-to-install) and [supported platforms](https://github.com/pirafrank/poof/wiki/Supported-platforms) is available in the Wiki.

## Usage

Either run:

```sh
poof help
```

or read the [Usage](https://github.com/pirafrank/poof/wiki/Usage) page for additional information.

## About poof's `bin` directory

`poof` installs binaries in its own data directory, then symlinks them to its bin directory.

You can run `poof info` at any time to know where it does store data.

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

- keep them separate from other software installed on your system,
- keep them away from paths the user may manually interact to (like `~/.local/bin`),
- support multiple side-by-side versions of the same software for easy switch,
- easily temporarily disable `poof` by removing its bin directory from your `$PATH` (read below).

## Disable

poof's `bin` directory by default is added at the beginning of `$PATH` so that it takes precedence over any other version of same-named binary you may have installed other ways.

If you want to halt this behavior, you can either:

- [manually configure]https://github.com/pirafrank/poof/wiki/Configure-your-shell your shell setup,
- [disable it]https://github.com/pirafrank/poof/wiki/Disable, temporarily or permanently.

## Documentation

Updated documentation for the latest release is available in the [Wiki](https://github.com/pirafrank/poof/wiki).

## Project goals and non-goals

Have a look at [our project goals](https://github.com/pirafrank/poof/wiki/Project-goals).

## Roadmap

A list of features implemented and to implement is available [in the Wiki](https://github.com/pirafrank/poof/wiki/Features). The list is not final and may change over time.

## Feature requests and Bug reporting

Want to suggest a feature? Found a bug? Please [open an issue](https://github.com/pirafrank/poof/issues). Thank you!

## Contributing

Contributions are welcome! Please read the [Development](https://github.com/pirafrank/poof/wiki/Development) page for information about how to build, and the [CONTRIBUTING](CONTRIBUTING.md) file for details on how to contribute to this project.
Please make sure to follow the [code of conduct](CODE_OF_CONDUCT.md) when contributing. Thank you!

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE.md) 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](https://fairlyoddparents.fandom.com/wiki/Poof).