Make one real URL before you keep reading

Upload a file up to 10 MB. The public URL works immediately, with no password or credit card. Executable files require email verification.

transfer.sh Alternative: 5 cURL Upload Tools That Still Work

· · 8 min read

transfer.sh is remembered for one-command uploads, but its familiar workflow does not answer every production requirement. Compare anonymous sharing, expiry, ownership, and API stability separately instead of treating every alternative as interchangeable.

The right transfer.sh replacement depends on the job. An anonymous throwaway link, an account-owned API upload, and a public URL for an application are different requirements.

Start with the requirement

  • Persistent API and CDN URL: use FilePost. It needs an API key, returns JSON, and keeps files online until you delete them.
  • Anonymous one-off upload: use 0x0.st or catbox.moe. Good for quick public sharing, not a production dependency.
  • Expiring one-download link: use file.io. It is closest to the temporary-file behavior people remember from transfer.sh.
  • Large media files: use pixeldrain if the file size matters more than the API shape.

If another system needs the URL

If the URL will be read later by an app or workflow, choose persistence over anonymous convenience:

Upload → capture the returned URL → save it in your database or send it to the next automation step.

FilePost is the fit when that URL must remain available after the transfer finishes. Use file.io or an anonymous host when the file is intentionally temporary.

The comparison uses expiry, API shape, file size, and whether the returned URL is suitable for an application or automation workflow.

What Made transfer.sh Great, and What to Look For

If you loved transfer.sh, you were relying on at least three things:

Different alternatives emphasize different parts of that list. Pick the one that matches your actual job.

Quick Comparison Table

Feature FilePost file.io 0x0.st catbox.moe pixeldrain
cURL upload in one line Yes Yes Yes Yes Yes
Free tier Yes (1 provisional / 15 verified) Yes Yes (anonymous) Yes (anonymous) Yes
URLs with no automatic expiry by default Yes No (default 1 download) 30 to 365 days (size-based) Yes (not guaranteed) Yes
Management API Yes Limited No Partial (account-based) Yes (with account)
Max file size 50 MB free / 500 MB paid 100 MB free 512 MB 200 MB 20 GB
Dedicated CDN Yes No No No Yes
Starting paid price 4 USD/mo (Lite) Varies Free only Donation-based Around 4 EUR/mo

1. FilePost: Best for Persistent cURL Uploads with a Real API

FilePost keeps the cURL-first feel of transfer.sh but adds persistence, a CDN, and a management API. You sign up once, get an API key, and your uploads return a CDN URL with no automatic expiry by default.

Why Choose FilePost

Upload a File (One Line)

curl -X POST https://upload.filepost.dev/v1/upload \
  -H "X-API-Key: your_api_key" \
  -F "file=@build.tar.gz"

Response:

{
  "url": "https://cdn.filepost.dev/file/filepost/uploads/a1/a1b2c3.tar.gz",
  "file_id": "a1b2c3d4e5f6",
  "size": 4823104
}

transfer.sh Muscle Memory, Adapted

If you had a shell function for transfer.sh, the port is a couple of lines:

# Before: transfer.sh
transfer() {
  curl --progress-bar --upload-file "$1" "https://transfer.sh/$(basename "$1")"
}

# After: FilePost (extract the URL from the JSON response)
upload() {
  curl -s -X POST https://upload.filepost.dev/v1/upload \
    -H "X-API-Key: $FILEPOST_KEY" \
    -F "file=@$1" | jq -r .url
}

Add export FILEPOST_KEY=fh_... to your shell rc file and you are back to one-command sharing.

If the payload is an archive, the ZIP to URL guide shows the same public-link workflow for ZIP, TAR, and GZ files.

Move a workflow from transfer.sh

Test the request with a small file from your own workflow. If the returned URL works in the next step, the basic integration is working.

Test a small upload

2. file.io: Closest to transfer.sh's Default (Auto-Delete)

file.io is the most direct spiritual successor to transfer.sh's "files go away" default. Uploads auto-delete after the first download or at the end of a set retention period.

What it does well

Tradeoffs

Good fit: Quick one-off transfers where you explicitly want the file to go away. See our file.io alternative comparison for when to pick something else.

3. 0x0.st: Best for Fully Anonymous cURL Uploads

0x0.st (The Null Pointer) is a minimalist anonymous file host. No accounts, no signup, just cURL. It is operated as a hobby service, which makes it a fine fit for informal sharing and a bad fit for anything production-critical.

Upload Example

curl -F 'file=@hello.txt' https://0x0.st

What it does well

Tradeoffs

Good fit: One-off text snippets and small files you want to share publicly and anonymously. Not a production choice. If you are specifically comparing 0x0.st against an account-based API, see the focused 0x0.st alternative guide.

4. catbox.moe: Anonymous Permanent Hosting

catbox.moe is another minimalist anonymous file host, focused on persistent (not time-limited) uploads. Popular among hobby communities for image and small-file sharing.

Upload Example

curl -F "reqtype=fileupload" \
     -F "fileToUpload=@image.png" \
     https://catbox.moe/user/api.php

What it does well

Tradeoffs

Good fit: Hobby projects and community use, not business applications.

5. pixeldrain: Best for Large Files with an Account

pixeldrain supports files up to 20 GB per upload and has a clean web UI plus a REST API. With an account you get a real management layer.

Upload Example

curl -T image.png -u :YOUR_API_KEY \
     https://pixeldrain.com/api/file/image.png

What it does well

Tradeoffs

Good fit: Large media files you want to share publicly, with an API.

How to Choose the Right transfer.sh Alternative

Self-Hosting transfer.sh

The transfer.sh source code is on GitHub and you can still run it on your own server or S3 bucket. Self-hosting makes sense when files must stay inside your infrastructure.

If you go self-hosted, expect to handle abuse reports, storage growth, and CDN caching yourself. Otherwise, those responsibilities are the main tradeoff compared with a hosted service.

Conclusion

For persistent links, an authenticated upload API such as FilePost is a closer fit than transfer.sh's temporary-sharing model. For anonymous or self-destructing links, 0x0.st, catbox.moe, or file.io may be more appropriate, depending on retention and operational requirements.

If you need a persistent URL, start with the authenticated upload example above and test it with a small file from your own workflow.