Cloud storage decision

UploadThing

Keep paying only if you need hosted convenience; otherwise self-hosting the open-source repo is realistic — the vendor provides an MIT repo so you can run a replacement yourself for modest engineering effort.

Visit website
You pay

$10/mo

$120/yr

Read off the official pricing page.

You’d pay instead

$20one-off6 h to build

$19/mo3 h/mo upkeep

On cash alone, building overtakes the subscription at 3 seats.

Open-source builds that already do this

Every project below is open source and already does this job today. Fork one, self-host it, or take the parts you need - the build prompt further down assumes an empty file, and this is the shortcut past that. Licences differ; check the one on each card before you ship. All UploadThing alternatives, with the arithmetic →

What a replacement has to do

  • Provide authenticated client upload button → accept upload metadata on server → generate/upload to object storage → record file metadata → show files in dashboard / trigger onUploadComplete hooks

What it still won’t have

  • Managed multi-region storage and bandwidth optimizations
  • Built-in audit log retention windows and UI (7/30 days tiers)
  • Polished hosted dashboard, SLA, and commercial support
  • Usage-based billing, team features and private-file hosting regions

What remains hard

  • Product polish and ongoing maintenance
Read the build prompt

First-year cost

Keep paying

Paying is—cheaper in year one.

On cash alone, building overtakes the subscription at 3 seats.

Paid seatsseats

Money you would actually spend

Keep paying
—

Subscription price × seats × 12

Build it
—

AI build —APIs + hosting —

Time you would spend

—

—

What you would spend

What we assumed

The verdict above measures whether you could build it. This one is only about money.

Runnable build prompt

Not run yet
Build a self-hosted UploadThing-compatible file upload service using Node.js (Nest/Express), TypeScript, Postgres for metadata, and S3-compatible object storage (MinIO or AWS S3). Core features in scope: server auth middleware that validates user and returns signed upload parameters/URLs; a Typescript UploadButton client component that uploads files and calls a server onUploadComplete endpoint; storage adapter for S3 and local filesystem; a webhook/onUploadComplete handler that records file metadata in Postgres; a basic admin dashboard (list, filter, delete files). Out of scope: reimplementing advanced billing, multi-region storage orchestration, or commercial dashboard polish. Require TLS-enabled Docker deployment, environment-based config, error handling for upload failures, unit tests for server endpoints, and basic integration tests for full upload flow.
How we checked4 sources · 1/1 runs agreed · evidence score 99

How the score was reached

  • Self-host verdict base92
  • An open-source build was found+5
  • 4 cited sources+3
  • Price verified on pricing page+3
  • 1/1 assessment runs agreed+4
  • Evidence score99

The base comes from the verdict. Everything under it is a check that either happened or did not, and each one is a fact frozen in this record rather than a judgement made at render time - so the same evidence always produces the same number.

How scoring works →

Cited sources · 4

Every page the run actually retrieved.

Integrity checks

What held up, and what did not.

✓ Price read off the page✓ 1 independent runs, one answer✓ Citations limited to fetched pages! 1 moat recorded