explaingit

dutchcoders/transfer.sh

15,837GoAudience · ops devopsComplexity · 3/5Setup · moderate

TLDR

A self-hosted command-line file sharing server, run one curl command to upload a file and get back a shareable link, with support for S3, Google Drive, or local storage.

Mindmap

mindmap
  root((repo))
    How it works
      Single curl upload
      Returns shareable link
      Delete URL provided
    Storage backends
      Amazon S3
      Google Drive
      Local filesystem
    Security options
      Client encryption
      IP allowlist
      Auth protection
    Audience
      DevOps engineers
      Sysadmins
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Share a log file or build artifact from a CI pipeline using a single curl command without opening a browser.

USE CASE 2

Run your own file-sharing service on a VPS or Docker host instead of relying on third-party upload sites.

USE CASE 3

Upload sensitive files with gpg encryption before sending so the server never sees the plain contents.

USE CASE 4

Set expiry dates and download limits on shared files so they automatically disappear after use.

Tech stack

GoDockerAmazon S3Google DriveStorj

Getting it running

Difficulty · moderate Time to first run · 30min

Requires a server or Docker host to self-host, the maintainers recommend running your own instance rather than using a third-party deployment.

In plain English

Transfer.sh is a tool for sharing files from the command line. Instead of opening a website, signing in, and uploading through a browser, you run a single command in your terminal and get back a link you can send to someone else. The description calls it easy and fast file sharing from the command-line. It works as a self-hosted server. The code in this repository is the server itself, so anyone can run their own instance. The maintainers explicitly say that if you want to use the software, you should host your own installation rather than relying on a third party. The server can store uploaded files in several places: Amazon S3, Google Drive, Storj, or the local file system on the machine running the server. Uploads and downloads happen through ordinary HTTP requests, which means standard tools like curl can talk to it without any custom client. A few special request headers let you tweak behaviour: you can cap the number of downloads a link allows, set how many days the file lives before being deleted, or ask the server to encrypt the file with a password. You can also encrypt files yourself before uploading, using something like gpg, so the server never sees the plain contents. Every upload comes back with a delete URL so you can remove the file when you no longer need it. The README mentions optional integration with VirusTotal for scanning uploads, basic HTTP authentication, IP allow and block lists, and TLS configuration for serving over HTTPS. The project is written in Go and is distributed both as source and as a Docker image, based on the topics listed. The full README is longer than what was provided.

Copy-paste prompts

Prompt 1
Help me deploy transfer.sh on a VPS using Docker, configured to store files on Amazon S3 with HTTPS via a reverse proxy.
Prompt 2
Write a bash function that uploads a file to my transfer.sh instance with a 7-day expiry and a 5-download limit, then copies the returned link to my clipboard.
Prompt 3
Configure transfer.sh with basic HTTP authentication and an IP allowlist so only my team can upload files to my self-hosted instance.
Prompt 4
Set up a transfer.sh instance with Docker Compose using local file storage, VirusTotal scanning enabled, and TLS termination via a Cloudflare tunnel.
Open on GitHub → Explain another repo

← dutchcoders on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.