furl-cli 0.3.0

A fast, multithreaded CLI downloader built in Rust.
Documentation
# fURL (`furl-cli`)

A fast, multithreaded CLI downloader built in Rust.

furl is a high-performance command-line tool designed to download files faster
by utilizing multiple threads to fetch chunks of data concurrently. Inspired by
the simplicity of cURL and the robustness of wget.

> [!NOTE]
> ⚠️ WORK IN PROGRESS: This project is currently in early development.
> The core multithreaded engine is functional, but features like advanced
> authentication and complex retry logic are still being implemented.
>
> furl is a successor to my previous project
> [ghimiresdp/rust-raid]https://github.com/ghimiresdp/rust-raid's
> `cget` download manager.
> It incorporates refined logic and improved multithreading from that original
> implementation.

## ✨ Features

- **Parallel Downloads**: Automatically splits large files into chunks and
  downloads them across multiple threads.
- **Modern Async**: Built on top of `tokio` and `reqwest` for maximum efficiency.
- **Visual Progress**: Beautiful, real-time progress bars using `indicatif`.
- **Rust Powered**: Memory-safe and "fearless" concurrency.

## 🚀 Installation

### From Crates.io (Recommended)

```bash
cargo install furl-cli
```

### From Source

```bash
git clone https://github.com/ghimiresdp/furl-cli.git
cd furl
cargo build --release
```

## 🛠 Usage

### without output directory

when no output directory is passed, it automatically downloads the file in the
current terminal directory (PWD).

```bash
furl [URL]
```

**Example:**

```bash
furl https://example.com/large-file.iso
```

### with output directory

```bash
furl [URL] -o [path/to/the/directory]
```

**Example:**

```bash
furl https://example.com/large-file.iso -o ~/Downloads
```

## 🗺 Roadmap

- [x] Multithreaded chunk downloading
- [ ] Basic CLI argument parsing (clap)
- [x] Real-time progress bars
- [ ] Resume interrupted downloads (Checkpoints)
- [ ] Support for Proxy and Basic Auth
- [ ] Config file support (furl.toml)

## 🤝 Contributing

Contributions are welcome! Since this is a WIP, please open an issue first to
discuss the changes you'd like to make.

1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)`
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

For more details, please check [CONTRIBUTING.md]CONTRIBUTING.md.

## 📄 License

This project is licensed under the Apache License 2.0.
See the [LICENSE](LICENSE) file for details.

### Third-Party Licenses

This software uses several open-source components. You can view the full list of
dependencies and their licenses using `cargo-license`: