
transfer.sh
Command-line file sharing: upload a file with curl and get a download link, self-hosted.
- Stars
- 15.9k
- Forks
- 1.6k
- Licence
- MIT
- Language
- Go
- Last update
- 5 days ago
- Type
- App
What it is
transfer.sh is a server you run yourself that lets you upload a file from the terminal with a single curl command and receive a shareable link. Files can be stored on local disk or cloud providers such as Amazon S3, Google Drive, or Storj. The README says it is meant for creating your own instance rather than relying on someone else's.
- Upload a file from the terminal with curl --upload-file and share the returned link
- Encrypt a file with gpg before uploading and decrypt it after download
- Set a download limit with the Max-Downloads header or an expiry with Max-Days
- Delete an uploaded file using the X-Url-Delete link returned in the response headers
Great for
- Developers who want to share files from a terminal without a web browser
- Teams that want to host their own file-sharing service on their own servers
- People who want to use a server-side or client-side encryption step with curl and gpg
- Operators who need to add upload limits such as max downloads or max days
Not ideal for
- People who want a ready-made public service with no setup, since the README says to host your own instance
- Anyone who cannot secure a server, because the README has an open security warning about IP filter and HTTP auth bypass via X-Forwarded-For spoofing
- Non-technical users who are uncomfortable with terminal commands and server configuration
How to get it
- 1
Clone and build from source
You'll need: Go (version not stated in the README excerpt) · Docker, optionally, if you use the Docker image
Clone the repository
git clone https://github.com/dutchcoders/transfer.sh - 2
Run it
- Read the security warning in the README and the linked issue before exposing a server
- Build or run the server from the repository, or use the Docker image if you prefer containers
- Choose a storage provider with the provider setting (local, s3, gdrive, or storj)
- Upload a test file with curl --upload-file ./hello.txt https://your-instance/hello.txt
- Use the returned link to download the file
- 3
Get the most out of it
- Use the Max-Downloads and Max-Days headers to limit how long files stay available
- Pair uploads with gpg for client-side encryption so the server never sees plaintext
- Set HTTP auth or IP whitelisting options, after reviewing the security warning
- Use PROXY_PATH and PROXY_PORT when running behind a reverse proxy
- Use the VirusTotal option with a VIRUSTOTAL_KEY to scan uploaded files
Downloads
Strengths
- Simple workflow: a single curl command uploads and returns a link
- Supports several storage backends, including local disk, S3, Google Drive, and Storj
- Open source under the MIT license with a large community (about 15,900 stars)
Trade-offs
- The README displays an active security warning about an authentication bypass, so check the linked issue before deploying
- Running a file server requires managing storage, TLS, and access controls yourself
- The README is truncated, so some configuration details are not fully visible here
How it compares
| Project | Stars | Type | Level | Updated | Best for |
|---|---|---|---|---|---|
| transfer.sh (this) | 15.9k | App | intermediate | 5 days ago | Developers who want to share files from a terminal without a web browser |
| magic-wormhole | 23.1k | CLI | beginner | 6 days ago | People who want to send a file to someone without setting up an account or shared service |
| traefik | 65.4k | App | intermediate | 4 days ago | Teams running many microservices in Docker, Swarm, or Kubernetes |
| croc | 40.8k | CLI | beginner | 4 days ago | People who need to send a file to someone without setting up a server, accounts, or port forwarding |
| gluetun | 16k | App | intermediate | 8 days ago | People who want one Docker container to run traffic through a VPN for other containers |
| dozzle | 14.8k | App | beginner | 4 days ago | Developers who want to watch container logs while debugging |
Stats synced from GitHub. The assessment above was drafted with AI from the project's README on 2026-10-29 and may miss recent changes — check the README before relying on a command. MIT licence: free to use, modify and distribute, including commercially, as long as you keep the copyright notice.