{"id":36399802,"url":"https://github.com/ghimiresdp/furl-cli","last_synced_at":"2026-05-30T10:00:51.022Z","repository":{"id":329755321,"uuid":"1119941584","full_name":"ghimiresdp/furl-cli","owner":"ghimiresdp","description":"A fast, multithreaded CLI downloader built in Rust.","archived":false,"fork":false,"pushed_at":"2026-05-29T17:06:44.000Z","size":304,"stargazers_count":8,"open_issues_count":8,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-29T18:12:17.799Z","etag":null,"topics":["download-manager","downloader","file-downloader","network-util"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/furl-cli","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ghimiresdp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-20T06:33:32.000Z","updated_at":"2026-05-29T08:03:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ghimiresdp/furl-cli","commit_stats":null,"previous_names":["ghimiresdp/furl-cli"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/ghimiresdp/furl-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghimiresdp%2Ffurl-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghimiresdp%2Ffurl-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghimiresdp%2Ffurl-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghimiresdp%2Ffurl-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ghimiresdp","download_url":"https://codeload.github.com/ghimiresdp/furl-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghimiresdp%2Ffurl-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33687722,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["download-manager","downloader","file-downloader","network-util"],"created_at":"2026-01-11T16:02:48.723Z","updated_at":"2026-05-30T10:00:51.016Z","avatar_url":"https://github.com/ghimiresdp.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fURL (`furl-cli`)\n\n[![CI](https://github.com/ghimiresdp/furl-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/ghimiresdp/furl-cli/actions/workflows/ci.yml)\n[![Release](https://github.com/ghimiresdp/furl-cli/actions/workflows/release.yml/badge.svg)](https://github.com/ghimiresdp/furl-cli/actions/workflows/release.yml)\n\nA fast, multithreaded CLI downloader built in Rust.\n\nfurl is a high-performance command-line tool designed to download files faster\nby utilizing multiple threads to fetch chunks of data concurrently. Inspired by\nthe simplicity of cURL and the robustness of wget.\n\n\u003e [!Warning]\n\u003e This branch is usually ahead of the latest release. If something does not\n\u003e work as expected, consider checking out a specific release tag, or install\n\u003e a stable version via cargo or winget. For more, see the [Installation](#installation) section.\n\n![Example image](res/images/example.png)\n\n## ✨ Features\n\n- **Smart Parallel Downloads**: Automatically splits large files into chunks and\n  downloads them across multiple threads when needed and size is known. Also\n  automatically shrinks the maximum length of chunk to 10MB for better resource\n  utilization.\n- **Modern Async**: Built on top of `tokio` and `reqwest` for maximum efficiency.\n- **Visual Progress**: Beautiful, real-time progress bars using `indicatif`.\n- **Rust Powered**: Memory-safe and \"fearless\" concurrency.\n\n## Installation\n\nYou can install `furl` using WinGet, Cargo, or by building it from source.\n\n### Windows (Recommended: WinGet)\n\nFor Windows users, WinGet is the recommended installation method.\nRequirement: WinGet must be available on your system (included by default on modern Windows 10/11 setups).\n\n```shell\nwinget install ghimiresdp.furl\n```\n\n### Crates.io\n\nUse this method on any platform where Rust is installed.\nRequirement: Rust toolchain and Cargo must be installed.\nInstall Rust from the official guide: \u003chttps://www.rust-lang.org/tools/install\u003e\n\n```shell\ncargo install furl-cli\n```\n\n### From Source\n\nUse this method if you want to build from the latest source code or contribute changes.\nRequirement: Git, Rust toolchain, and Cargo must be installed.\nInstall Rust from the official guide: \u003chttps://www.rust-lang.org/tools/install\u003e\n\n```shell\ngit clone https://github.com/ghimiresdp/furl-cli.git\ncd furl-cli\ncargo build --release\n```\n\n### Pre-built Binaries\n\nIf `furl` is not yet available in your package manager, you can download pre-built binaries from the **Assets** section of the [latest release](https://github.com/ghimiresdp/furl-cli/releases/latest).\n\nIf you need an older version, browse all published releases in the [Releases](https://github.com/ghimiresdp/furl-cli/releases) section and check the **Assets** section for that release.\n\n## 🛠 Usage\n\n`furl` can be used in 2 modes `Library mode` and `Binary mode`.\n\n### Binary Mode\n\nYou need to install the `furl-cli` and add it to the path before you can use it\nin the binary mode. For more details, you can check the\n[Installation](#installation) section.\n\n#### Without output directory\n\nWhen no output directory is passed, it automatically downloads the file in the\ncurrent terminal directory (PWD).\n\n```bash\nfurl [URL]\n```\n\n**Example:**\n\n```bash\nfurl https://raw.githubusercontent.com/ghimiresdp/furl-cli/refs/heads/main/res/images/example.png\n```\n\n#### With output directory\n\n```bash\nfurl [URL] -o [path/to/the/directory]\n```\n\n**Example:**\n\n```bash\nfurl https://raw.githubusercontent.com/ghimiresdp/furl-cli/refs/heads/main/res/images/example.png -o ./tmp -t 32\n```\n\n### Library Mode\n\nIn library mode, you can just import the `Downloader` struct and use its\n`download()` method to download files.\n\n```rust\nuse furl_core::{DownloadConfig, Downloader};\n\n// since Downloader::download() method is async, it needs to be implemented\n// inside the async function. if it is main function, we can use\n// `#[tokio::main]` macro.\n#[tokio::main]\nasync fn main() {\n    let url = \"https://raw.githubusercontent.com/ghimiresdp/furl-cli/refs/heads/main/res/images/example.png\";\n\n    let config = DownloadConfig::default().set_max_chunk_size(5 * 1024 * 1024); // 5 MB\n\n    let mut downloader = Downloader::new(url).with_config(config);\n\n    if downloader.download(\".\", None, Some(4)).await.is_ok() {\n        println!(\"Download completed successfully!\");\n    } else {\n        println!(\"Download failed.\");\n    }\n}\n\n```\n\nFor runnable workspace examples that embed `furl-cli` as a library,\ncheck the [examples/](examples) directory (e.g. [embedded-minimal](examples/embedded-minimal), [no-indicator](examples/no-indicator)).\n\n## 🏗 Architecture Decisions\n\nProject design decisions are documented as Architecture Decision Records\n(ADRs) under [docs/adr](docs/adr). The ADR index is available at\n[docs/adr/README.md](docs/adr/README.md).\n\n## 📦 Examples\n\nImplementation-oriented examples live in the [examples](examples)\ndirectory. These are standalone workspace crates that show how to use\n`furl-cli` as a library in real applications.\n\n## 🗺 Roadmap\n\n- [x] Multithreaded chunk downloading\n- [x] Customize number of threads with arguments\n- [x] Basic CLI argument parsing (clap)\n- [x] Real-time progress bars\n- [x] Smart Threading (Completely ignore threading for files smaller than 1 MB).\n- [x] Package manager support (Windows: WinGet)\n- [x] Examples\n- [ ] Config file support (furl.toml)\n- [ ] Support for Proxy and Basic Auth\n- [ ] Resume interrupted downloads (Checkpoints)\n- [ ] Package manager support (Linux: APT)\n- [ ] Package manager support (Linux: Flatpak)\n- [ ] Package manager support (Linux: Snap)\n- [ ] Package manager support (macOS: Homebrew)\n\n## 🤝 Contributing\n\nContributions are welcome! Since this project is actively being developed,\nplease open an issue first to discuss the changes you'd like to make.\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)`\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\nFor more details, please check [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## 📄 License\n\nThis project is licensed under the Apache License 2.0.\nSee the [LICENSE](LICENSE) file for details.\n\n### Third-Party Licenses\n\nThis software uses several open-source components. You can view the full list of\ndependencies and their licenses using `cargo-license`:\n\n\u003e [!NOTE]\n\u003e furl-cli (or fURL) is a successor to my previous project\n\u003e [ghimiresdp/rust-raid](https://github.com/ghimiresdp/rust-raid)'s\n\u003e [cget](https://github.com/ghimiresdp/rust-raid/tree/main/projects/cget) download manager.\n\u003e It incorporates refined logic and improved multithreading from that original\n\u003e implementation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghimiresdp%2Ffurl-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fghimiresdp%2Ffurl-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghimiresdp%2Ffurl-cli/lists"}