Skip to content
s3nd
Menu

File sharing for people

A transfer.sh alternative with no service to run

Terminal-first sharing, a short secret to hand over, and an expiry. Both are happy to store the object in an S3 bucket.

What transfer.sh is

In its own terms.

A file-sharing service you drive with curl: PUT a file, get a URL back, share it. Written in Go, self-hostable, with pluggable storage backends that include S3. The public instance made it famous; the self-hosted server is what teams actually run.

Side by side

Where they part ways.

 s3ndtransfer.sh
What it isA CLI, a library and React hooks over your own S3 bucketSelf-hostable upload service with links
Where the data livesYour bucket: S3, R2, MinIO, Scaleway, WasabiIts server’s storage; an S3 backend is available
Both ends online at onceNo. The code is redeemed later, until it expiresNo
From inside your web appYes, through one route on your serverBy URL
AccountsNone. The code is the whole handshakeNone
HostingYour bucket, plus your server when a browser takes partSelf-hosted
PriceFree. You pay your storage provider for a few objects that expireFree
LicenseMITMIT

The differences

What actually changes.

A server you run versus a bucket you have

transfer.sh is a service in front of storage. The s3nd CLI is the bucket with no service in front; when you do want a server, it is a route inside the API you already deploy.

A URL versus a code

A transfer.sh link carries a random path that is the secret. An s3nd code is eight characters designed to be read aloud, with the confusable letters removed and repaired on the way back.

Files versus files and state

transfer.sh moves files. s3nd moves files and snapshots of application state, with schema versions and conditional writes, from a library as well as a command.

The decision

Pick the one that fits.

Pick transfer.sh when

  • A curl-able upload endpoint for a team, with links.
  • You already run it and it works.

Pick s3nd when

  • Nothing to run: the CLI talks straight to the bucket.
  • Codes people can read out loud rather than URLs to paste.
  • App state with versioning and expiry enforced on read.

Put a file. Hand over the code.

Point it at the bucket you already pay for. Nothing to deploy, nothing to sign up for, nothing in the middle.

npm install -g @s3nd/clis3nd init --provider r2 --bucket drops3nd put ./anything.zip