Uploadcare
A weekend of work, and real gaps remain.
Handles the whole file upload path: a widget in the browser, resumable transfer, storage, processing and delivery from a network.
Build me the file upload path I actually need instead of Uploadcare. Start from the rule that decides the architecture: **files must never pass through your application server.** Sign a direct upload to object storage and let the browser talk to it. Everything else follows. STACK - Node 20+ with Fastify — only for signing and bookkeeping - SQLite through better-sqlite3, WAL mode - Object storage with presigned multipart uploads - Uppy in the browser for the widget half - sharp and ffmpeg on a worker for derivatives - Caddy in front THE DATA MODEL - uploads: id, owner_id, key, filename, declared_type, detected_type, bytes, sha256, status, created_at, completed_at - derivatives: id, upload_id, kind, key, bytes, created_at - scans: id, upload_id, verdict, detail, at THE UPLOAD ITSELF - Your server issues a presigned multipart URL with a size cap, a type constraint and a short expiry, and records a pending row - The browser uploads directly, in parts, resuming after a dropped connection. A 2GB file over a phone connection is the case that decides whether this works - Storage notifies completion, or the client confirms and the server verifies the object exists and its size — **never trust the client's word that an upload finished** VALIDATION, WHICH IS SECURITY AND NOT A FORMALITY - **Detect the type from the file's own bytes, never from the extension or the declared content type.** A .jpg that is actually HTML, served from your domain, is stored cross-site scripting - Serve user files from a separate domain, always with `Content-Disposition: attachment` unless the type is one you deliberately render inline, and with a strict content security policy - Hard caps on size, dimensions and megapixels; a decompression bomb is a real attack and sharp will happily try - Scan with ClamAV on a worker before the file is reachable. Quarantine until it passes DERIVATIVES - Thumbnails, a poster frame, a PDF first page. Generated on a queue with a concurrency cap, never during the request - Store the hash and deduplicate: the same file uploaded twice is one object with two rows DELIVERY - Signed expiring URLs for anything private, and a cheap network in front for anything public - Range requests supported, so video seeking works OPERATIONS - A sweeper deleting pending uploads that never completed, or storage fills with abandoned halves - Per-owner quotas, and bytes stored and served recorded daily - Deletion that actually deletes: the object, its derivatives and the rows WHAT MATTERS MOST Direct-to-storage uploads and type detection from the bytes. The first is why it scales; the second is why it does not become an attack on your own users.
What you lose
- A widget that handles every browser, retry and connection quirk
- Resumable uploads for large files without your server in the path
- Storage and delivery with nothing to run
- Virus scanning and content moderation on the way in
If you would rather not build
- tus for resumable uploads, an open protocol with servers in every language
- A presigned S3 upload, which is fifty lines and no dependency
The escape hatch
open source · no votes, no paid placement
Uppy
$0Browser upload widget with resumable transfer and cloud sources.
transloadit/uppyfree · open source
Why this verdict
our own opinion · changed only by a person
56/100
Verdict kinda at 56: Uppy plus presigned storage covers the widget and the transfer, and the delivery network is worth renting. The content-type rule is the one that bites people who build this quickly.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.
Questions about Uploadcare
answered from the record above
Is Uploadcare free?
No — the plan we track is $79 a month. Starter at $79/month with uploads, storage and delivery included.
Can you replace Uploadcare by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 56 out of 100, build time a weekend. Read what you lose before you decide.
How much does Uploadcare cost?
$79 a month on Starter — $948 a year. Recorded 14 Aug 2026.
What do you lose by replacing Uploadcare?
A widget that handles every browser, retry and connection quirk; Resumable uploads for large files without your server in the path; Storage and delivery with nothing to run; Virus scanning and content moderation on the way in. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Uploadcare?
Yes: Uppy, tusd. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

