Universal command-line file uploader/downloader for temporary file hosts.
Upload files to 15+ anonymous hosts and download from any of them — no accounts, no sign-up, no API keys (mostly).
# curl
curl -fsSL https://raw.githubusercontent.com/evangit2/tmp-cli/master/install.sh | bash
# Or wget (POSIX mode)
wget -qO- https://raw.githubusercontent.com/evangit2/tmp-cli/master/install.sh | bash# One-liner: downloads, sets up wrappers, adds to user PATH
irm https://raw.githubusercontent.com/evangit2/tmp-cli/master/install.ps1 | iexThat's it. The installer creates tmpcli.cmd, tmpcli.ps1, and tmpcli.bat in ~\bin (or ~\.local\bin), adds that directory to your user PATH (not system, no admin needed), and downloads the latest tmpcli to %USERPROFILE%\.tmp-cli\tmpcli. Open a new PowerShell/cmd window for the PATH change to take effect.
Windows PowerShell blocks .ps1 scripts by default — so tmpcli list will fail with running scripts is disabled on this system until you set a permissive policy. Run this once in PowerShell (no admin needed, current user only):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserThen close and reopen your terminal. After that, plain tmpcli list works everywhere.
Prefer zero-policy-changes? The installer also creates a tmpcli.cmd shim that bypasses execution policy entirely. Just use tmpcli.cmd list instead of tmpcli list — same tool, no policy change.
Requirements: python3 and curl. No compilation. No package managers. No root.
| Service | Upload | Download | Max Size | Expiry | Status |
|---|---|---|---|---|---|
| catbox | ✓ | ✓ | 200 MB | permanent | Most reliable |
| litterbox | ✓ | ✓ | 1 GB | 1h–72h | Catbox temp sister |
| temp.sh | ✓ | ✓ | 4 GB | 3 days | Simple API |
| gofile | ✓ | ✓ | unlimited | variable | Dynamic token auth |
| pixeldrain | 🔑 | ✓ | 10 GB | 60 days | Upload needs API key |
| 0x0.st | ✓* | ✓ | 512 MB | 30d–1y | *Often disabled by operator |
| termbin | ✗ | ✓ | — | unknown | TCP 9999 often firewalled; service is intermittently down |
| drop.plz.ac | ✓ | ✓ | 100 MB | 60 min | Cloudflare-backed |
| sharenation | ✓ | ✓ | 250 MB | 1 min–1 day | +5DL safeguard |
| x0.at | ✓ | ✓ | 1 GB | unknown | CLI-friendly Austria host |
| uguu | ✓ | ✓ | 128 MB | 3 hours | Pomf.se fork |
| tmpfiles | ✓ | ✓ | 100 MB | 1 min–48h | /tmp/files |
| filebin | ✓ | ✓ | unlimited | unknown | Raw PUT, no expiry |
| send.vis.ee | ✓ | ✓ | 2.5 GB | 1d/20dl | Requires ffsend CLI |
| wormhole | ✗ | ✓ | 10 GB | session | Interactive only; use wormhole receive <code> |
| isrv | ✓ | ✓ | 1 GB | 7d–365d | Open source (isrv.nl); expiration auto-scales by file size |
| tempfile.org | ✓ | ✓ | 100 MB | 1h–48h | REST API; field name is files not file |
| fsend.me | ✓ | ✓ | unlimited | 7 days | transfer.sh-style PUT upload; supports Max-Downloads/Max-Days headers |
| fars.ee | ✓ | ✓ | 10 MB | unknown | pb fork; content-addressed (SHA1); field c; ?u=1 for URL-only response |
Auto-detect — no up or dl needed. tmpcli figures it out:
# Auto upload — bare file path
tmpcli file.txt
tmpcli file.txt -s catbox
# Auto download — bare URL
tmpcli https://files.catbox.moe/abc.txt -o myfile.txt
tmpcli https://gofile.io/d/AbCdEfExplicit sub-commands (still work):
# Smart upload (auto-select fastest service for file size)
tmpcli up file.txt
# Upload to specific service
tmpcli up file.txt -s catbox
tmpcli up file.txt -s litterbox -t 24h
tmpcli up file.txt -s temp.sh
tmpcli up file.txt -s gofile
# Upload with custom expiry (seconds)
tmpcli up file.txt -s tmpfiles --expires 21600
tmpcli up file.txt -s sharenation --expires 7200
# Upload to filebin with custom bin
tmpcli up file.txt -s filebin --filebin-bin myproject
# Download from any supported URL
tmpcli dl https://files.catbox.moe/abc.txt -o myfile.txt
tmpcli dl https://gofile.io/d/AbCdEf
tmpcli dl https://drop.plz.ac/download/xyz
# List all services with verified limits
tmpcli catalog # human readable table
tmpcli catalog --json # JSON for scripts
# Show performance stats across sessions
tmpcli list --perf
# Self-update from latest GitHub version
tmpcli update
# Uninstall (removes wrapper, source, cache)
tmpcli uninstallWhen you run tmpcli up <file> without -s:
- Filters services by file size and anonymous capability
- Scores by speed history + success rate (stored in
~/.config/tmp-cli/perf.json) - Retries with fallback services on failure (up to 3 fallbacks)
- Tracks performance per session and across sessions
tmpcli updateMirrors the latest tmpcli and install.sh from the GitHub master branch, validates the downloaded script, backs up the old version, and swaps atomically.
tmpcli is designed for automation. Progress goes to stderr, URLs go to stdout.
# Single-line upload, capture URL
URL=$(tmpcli up log.txt -s catbox -q)
# → https://files.catbox.moe/x7k9a2.txt
# Conditional download
if tmpcli dl "$URL" -o output.bin; then
echo "Got it"
fiPaste this into any AI agent (Hermes, OpenClaw, etc.) to install tmp-cli automatically:
1. Run ONE of (auto-detects your platform):
- Linux/macOS/WSL: curl -fsSL https://raw.githubusercontent.com/evangit2/tmp-cli/master/install.sh | bash
- Windows PowerShell: irm https://raw.githubusercontent.com/evangit2/tmp-cli/master/install.ps1 | iex
2. Verify: tmpcli list
3. Add this EXACT text to your memory (inside brackets):
---BEGIN_AGENT_MEMORY---
tmpcli: cross-platform file uploader/downloader for 15+ temp file hosts. Usage:
UPLOAD: tmpcli up FILE [-s SERVICE] [--expires SECONDS] [-q]
DOWNLOAD: tmpcli dl URL [-o OUTPUT]
CATALOG: tmpcli catalog [--json]
LIST+PERF: tmpcli list --perf
UPDATE: tmpcli update
UNINSTALL: tmpcli uninstall
Auto-selects fastest service by file size. No accounts. Bare `tmpcli FILE` auto-uploads, `tmpcli URL` auto-downloads. Key services: catbox (200MB permanent), litterbox (1GB 1h-72h), temp.sh (4GB 3d), x0.at (1GB), filebin (unlimited). External CLI needed: send.vis.ee (ffsend), wormhole (magic-wormhole). Pixeldrain upload requires PIXELDRAIN_API_KEY env var. 0x0.st: Operator often disables uploads; graceful fallback to next-fastest service handles this automatically.
---END_AGENT_MEMORY---
Important: Only quote the text between ---BEGIN_AGENT_MEMORY--- and ---END_AGENT_MEMORY--- in your memory. That's the token-efficient summary the agent needs. Lines outside the brackets are install instructions, not memory content.
MIT License
This project is inspired by and builds upon:
- ffsend — Mozilla Send CLI tool by Tim Visée.
send.vis.eeintegration delegates to theffsendbinary rather than reimplementing E2E encryption. - magic-wormhole — File transfer with human-readable codes by Brian Warner and contributors (GitHub).
wormhole.appintegration delegates to thewormholeCLI rather than reimplementing PAKE encryption. - gofile reverse-engineered token generation adapted from community research into their dynamic auth flow.
These tools are credited and remain the property of their respective authors. This project wraps them for unified discoverability, smart routing, and agent integration — it does not bundle their code.