An UploadThing Alternative
UploadThing Alternative: Plain REST and Prepaid Credits vs Typed SDK
UploadThing ships a typed SDK; files.link is plain REST. Pick the one that fits your stack and your billing model.
UploadThing made a clear bet: give Next.js and React developers a typed SDK (createUploadthing, useUploadThing, the <UploadButton> component) plus a server route handler, so file uploads feel like the rest of a modern TypeScript app. If you live entirely in React, that DX is hard to beat. files.link makes the opposite bet — no SDK to install, no framework coupling, just three HTTP calls any language can make.
Where UploadThing gives you onUploadComplete callbacks and middleware-style file validation baked into a typed router, files.link gives you POST /v1/files/{folderId} (returns {success, urls:[{url,id,...}]}), a PUT to the returned presigned URL, and POST /v1/files/confirm-upload with {ids:[...]}. The auth is a raw API key in the Authorization header — no Bearer prefix, no SDK token dance.
That portability is the whole point: the same upload works from a Go worker, a Python Celery task, a Rust CLI, or a cron job that UploadThing's React-centric design never targeted. The billing models diverge just as sharply. UploadThing prices around uploads and stored bytes; files.link uses prepaid credits that debit daily against storage and delivery, with automatic top-ups so a traffic spike doesn't fail uploads.
If your costs are spiky and you'd rather pre-fund a balance than reconcile per-upload line items, the credit model is calmer. A practical migration from UploadThing's client SDK: drop the <UploadButton>, request a presigned URL from your own backend (which calls POST /v1/files/{folderId}), have the browser PUT the file directly to that URL, then call confirm-upload.
You lose UploadThing's automatic client progress component and typed onUploadComplete, so you reimplement progress with the native XHR/fetch upload events and persist metadata in your own confirm handler. Be honest about the trade: UploadThing's file-type and size validation hooks, typed end-to-end inference, and polished React components are real conveniences files.link does not ship.
If your only runtime is React/Next.js and you value that typed cohesion, UploadThing is the better tool. files.link wins when uploads come from many runtimes, when you want zero SDK lock-in, or when prepaid usage billing fits your cashflow better than per-upload metering. Plenty of teams run both — UploadThing for the browser-tight flow, files.link for backend-originated and cron-driven uploads.
Benefits With No Complexity
Global CDN delivery
Edge-cached worldwide
Signed-URL security
What You Get
Unlimited files
Unlimited storage
Public + Private storage
CDN ready links
Prepaid credits
More coming soon
How files.link Works
1. Upload
2. Copy
3. Use Anywhere
Why Developers Choose files.link
A Better Way to Store & Deliver Files
| UploadThing | AWS S3 (direct) | files.link | |
|---|---|---|---|
| Plain REST API (any language/stack) | |||
| No vendor SDK required | |||
| Prepaid credit billing (no per-upload fee) | |||
| Typed React/Next.js SDK + components | |||
| Built-in upload validation hooks | |||
| Global CDN delivery included |
Calculate Your Needs
Storage
Egress
CDN Bandwidth
Try the REST-Only Path
- Global CDN delivery
- Edge-cached worldwide
- Signed-URL security
- Unlimited files
- Unlimited storage
- Public + Private storage
- No subscription — prepaid credits keep spend predictable