A temporary cli-first file upload server
- CLI upload support with cURL
- Easily self-hostable with Docker support
- ASCII qr code
- Password-protected uploads
- Real-time download notifications (WebSocket)
- One-click copy for URLs and cURL commands
- Auto-delete files after download or configurable expiry time
- Configurable via environment variables
- https://qcus.outerark.com/
- password:
demo
docker run -d --restart unless-stopped -p 8088:8088 --name qcus arkounay/qcusdocker run -d --restart unless-stopped -p 127.0.0.1:8091:8088 -e UPLOAD_PASSWORD=mysecret --name qcus arkounay/qcusCaddyfile
example.com {
reverse_proxy :8091
}docker run -p 8088:8088 \
-e UPLOAD_PASSWORD=mysecret \
-e MAX_FILE_SIZE_MB=500 \
-e FILE_EXPIRY_MINUTES=30 \
arkounay/qcusdocker run -p 8088:8088 \
-v $(pwd)/uploads:/app/uploads \
arkounay/qcusnpm installnpm run buildgo run main.goor for hot reload:
npm run devThe Vite dev server will run on http://localhost:5173 with hot module reloading.
Navigate to http://localhost:8088
Default password: demo
All configuration is done via environment variables:
| Variable | Default | Description |
|---|---|---|
UPLOAD_PASSWORD |
demo |
Password required for uploads |
MAX_FILE_SIZE_MB |
100 |
Maximum file size in megabytes |
FILE_EXPIRY_MINUTES |
10 |
Minutes before files auto-delete |
PORT |
8088 |
Server port |
curl -F "[email protected]" -H "X-Upload-Password: demo" http://localhost:8088curl -o "filename.txt" http://localhost:8088/download/{fileID}antonin@Antonin ~> curl -T test.txt -H "X-Upload-Password: demo" https://qcus.outerark.com
<qr-code>
File uploaded successfully!
Original name: test.txt
File size: 14 B
Download URL: http://qcus.outerark.com/download/a7496105fae5e95cef51aec0bf4f1a02
cURL command: curl -o "test.txt" http://qcus.outerark.com/download/a7496105fae5e95cef51aec0bf4f1a02