Skip to content

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
Step-by-step guide: how to use transfer.shInstall, first run, examples, tips and FAQs

How to get it

  1. 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. 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. 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

ProjectStarsTypeLevelUpdatedBest for
transfer.sh (this)15.9kAppintermediate5 days agoDevelopers who want to share files from a terminal without a web browser
magic-wormhole23.1kCLIbeginner5 days agoPeople who want to send a file to someone without setting up an account or shared service
traefik65.4kAppintermediate4 days agoTeams running many microservices in Docker, Swarm, or Kubernetes
croc40.8kCLIbeginner4 days agoPeople who need to send a file to someone without setting up a server, accounts, or port forwarding
gluetun16kAppintermediate8 days agoPeople who want one Docker container to run traffic through a VPN for other containers
dozzle14.8kAppbeginner4 days agoDevelopers 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.