Linux-first CLI downloader for direct file URLs.
Validate links, stream downloads with progress, and safely extract common archives from a single command.
Quick Start • Release Package • Source Workflow • Examples • Release Notes
Tip
End users should start with the GitHub Release package. Download flowfetch-linux-x86_64.tar.gz, extract it, and run ./flowfetch without installing Python or running pip install.
This animation is generated from a scripted scene with fictional URLs, filenames, and local paths only. It is intentionally not a screen recording from a real machine.
FlowFetch is built for the common "paste a file URL and get the result locally" workflow, without turning a simple download into a setup project.
| Need | What FlowFetch does |
|---|---|
| Direct file downloads | Accepts http:// and https:// URLs and validates them before download |
| Clean terminal feedback | Shows filename, size, progress, speed, and ETA |
| Safer file handling | Writes to .part first, validates, then renames into place |
| Archive-friendly flow | Detects common archive formats and can extract them safely |
| Scriptable behavior | Uses stable exit codes and explicit CLI options |
| Flexible fallback path | Can switch to curl, wget, tar, unzip, gzip, and 7z when needed |
| Workflow | Best for | Python required | First step |
|---|---|---|---|
| Release package | End users who want a ready-to-run binary | No | Download the latest flowfetch-linux-x86_64.tar.gz from Releases |
uv source workflow |
Contributors and users running from source | Yes | uv sync |
pip source workflow |
Compatibility with a plain Python environment | Yes | pip install -r requirements.txt |
This is the recommended path if you want the packaged binary instead of a source checkout.
- Download the latest
flowfetch-linux-x86_64.tar.gzfrom GitHub Releases. - Extract the archive and enter the folder.
- Run
flowfetchdirectly, or install it system-wide.
Run it directly:
tar -xzf flowfetch-linux-x86_64.tar.gz
cd flowfetch-linux-x86_64
chmod +x flowfetch
./flowfetch --help
./flowfetch https://example.com/demo.zipOptional system-wide install:
sudo install -m 0755 flowfetch /usr/local/bin/flowfetch
flowfetch --help
flowfetch https://example.com/demo.zipNote
The release package contains a single Linux x86_64 executable plus LICENSE and a short README.txt. It does not require Python, uv, or pip install.
Preferred uv workflow:
uv sync
uv run flowfetch --help
uv run flowfetch https://example.com/demo.zipDirect script entrypoint:
uv run downloader.py --help
python downloader.py https://example.com/demo.zipPlain pip fallback:
pip install -r requirements.txt
python downloader.py --helpDownload a file:
flowfetch https://example.com/demo.zipDownload to a custom directory and extract automatically:
flowfetch --output-dir ./downloads --extract https://example.com/demo.tar.gzForce the Python downloader:
flowfetch --downloader httpx https://example.com/file.binForce the system extractor:
flowfetch --extractor system --extract https://example.com/demo.7zRun in interactive mode:
flowfetchflowfetch [options] [url]-o, --output-dir: target download directory--filename: force the saved filename--downloader auto|httpx|curl|wget: choose the downloader--extractor auto|python|system: choose the extraction strategy--extract: always extract archives after download--no-extract: never extract archives after download--overwrite: allow overwriting existing targets--rename: auto-rename conflicts--download-threshold: downloader switch threshold such as1g--extract-threshold: extractor switch threshold--retry: number of download retries--timeout: shared connect/read timeout--keep-partial: keep.partfiles on failure--delete-partial: remove.partfiles on failure--no-fallback: disable automatic fallback paths--yes: accept recommended prompts automatically--verbose: print more detailed error information
- It probes metadata before downloading when possible so it can show a filename and expected size.
- Downloads are written to a
.partfile first, then renamed after validation succeeds. - Small and normal-sized files use the Python downloader by default.
- Very large files can switch to
curlorwgetwhen available. - Supported archives use Python extraction by default, with safety checks against path traversal.
- Unsupported or large archive cases can use system extractors when available.
Supported Formats
Python standard library extraction currently supports:
ziptartar.gztgztar.bz2tar.xzgz
Enhanced support via system tools:
7zwith7zor7zz
Optional System Tools
FlowFetch does not require system tools for its default path, but it can use them as an enhancement when:
- a file is large enough to trigger downloader switching
- a format is better handled by system extractors
- the Python path fails and fallback is allowed
Useful tools:
curlwgetunziptargzip7zor7zz
Common Linux install examples:
# Debian / Ubuntu
sudo apt update && sudo apt install -y curl wget unzip tar gzip p7zip-full
# CentOS / RHEL
sudo yum install -y curl wget unzip tar gzip p7zip p7zip-plugins
# Fedora
sudo dnf install -y curl wget unzip tar gzip p7zip p7zip-plugins
# Arch Linux
sudo pacman -S curl wget unzip tar gzip p7zipExit Codes
0: success2: invalid arguments3: user cancelled4: invalid URL5: metadata fetch failed6: download failed7: downloaded file validation failed8: extraction failed9: missing system downloader10: missing system extractor11: unsupported format12: permission denied
downloader.py: current CLI entrypoint and main implementationpyproject.toml: project metadata andflowfetchconsole entrypointuv.lock: locked runtime dependency set for theuvworkflowrequirements.txt: lightweightpipdependency listassets/flowfetch-terminal.svg: terminal-style preview image used in the repository and release notesassets/flowfetch-demo.gif: sanitized animated terminal demo for the GitHub READMEassets/social-preview.png: GitHub social preview image prepared for manual upload in repository settingsflowfetch.spec: PyInstaller spec for the Linux single-file buildrelease/README.txt: short instructions bundled with the binary packagerelease/v0.1.0.md: notes for the first public GitHub ReleaseREADME.md: English project documentationREADME.zh-CN.md: Simplified Chinese project documentationscripts/generate_demo_gif.py: script that regenerates the sanitized demo GIFscripts/generate_social_preview.py: script that regenerates the social preview PNG
This project is licensed under the Apache License 2.0. See LICENSE.
