Foundation

File Storage

Store the files your users upload — avatars, attachments, exports — and serve them back without filling up your app server.

Ask your AI about this, with this page as the source:ChatGPT ↗Claude ↗Perplexity ↗

The real choice

Raw object storage or an upload service. Buckets (S3 and the S3-compatible clones) are cheap and portable but leave uploads, validation and access rules to you; upload services and platform-bundled storage hand you a working upload flow and pick the bucket for you.

Pick by situation

Tap the ones that are you — the tools that fit light up below.
  • You're already on AWS, or want old files moved to cheaper tiers and uploads to trigger processingAmazon S3
  • Your users' images, video or downloads are fetched a lot by the publicCloudflare R2
  • You're in a TypeScript app and want uploads working today without wiring presigned URLsUploadThing
  • You host a Next.js app on Vercel and don't want another accountVercel Blob
  • Your backend is on Supabase and who can see a file depends on who owns the dataSupabase

The contenders

Grouped by the side of the choice they answer, not ranked. Open a row for when to use it, the trade-off and what makers say.

ToolBest for
Object storage2
Cloudflare R2service · free tierFiles that get downloaded often — the S3 API without egress fees.4$1.35R2 Standard

Use it whenYou serve user images, video or downloads to the public.

Trade-offFewer storage tiers and event features than S3.

llms.txtMCP

Used by Melies, PayPing, BetterPic, BrandingStudio.ai®.

For S3, super helpful and useful. First time used it, was always weirded out on S3, idk why, but cloudflare made it really easy to setup and manage the receipt upload functionality on PayPing.
PayPing, the makerSep 2026 ↗
Amazon S3serviceApps already on AWS, or ones that need lifecycle rules, storage tiers and event triggers.175 open source$11S3 Standard (US East)40.1M/wk+0% vs npm

Use it whenThe rest of your infrastructure is on AWS, or files should move to cheaper tiers or kick off processing automatically.

Trade-offEgress fees add up when files are downloaded a lot, and IAM setup is fiddly for one person.

In Lovable

No maker's product we track shows it for this yet · in 175 open-source projects.

Upload service1
UploadThingservice · free tierTypeScript apps that want typed upload endpoints and drop-in upload components instead of wiring presigned URLs.8 open source$10100GB App183.6k/wk−20% vs npm

Use it whenYou want uploads done in an afternoon without touching bucket policies or CORS settings.

Trade-offFiles live in UploadThing's storage; moving away means migrating them.

No maker's product we track shows it for this yet · in 8 open-source projects.

Bundled with your platform2
Supabaseplatform · open source · free tierApps already on Supabase — storage access follows the same row-level security policies as your data.3$25Pro25.4M/wk+96% vs npm

Use it whenWho can read a file depends on who owns the row it belongs to.

Trade-offOnly worth it if the rest of your backend is on Supabase.

llms.txtMCPCLIIn Bolt, Lovable, v0

Used by BeforeSunset AI, giselle, Greta.

Supabase powers much of the backend behind Greta, including database, authentication, and storage. It enables creators to launch full-stack apps quickly without worrying about backend infrastructure.
Greta, the makerSep 2026 ↗
Vercel Blobservice · free tierNext.js apps hosted on Vercel that need simple uploads with no extra account.33 open source$32Pro5.8M/wk+115% vs npm

Use it whenYou're prototyping on Vercel and need somewhere to put uploads today.

Trade-offTies storage to your Vercel bill; usage-based transfer costs grow with traffic.

llms.txtMCPCLIIn v0

No maker's product we track shows it for this yet · in 33 open-source projects.

Cost: the cheapest plan that fits stored 100 GB, downloaded 200 GB, from list prices. Try your own numbers →

Cost as you grow

Each contender's cheapest usable plan as usage rises.

$0$50$200$500$1,000$2,000110501002505001k5k10k
SupabaseVercel BlobUploadThingCloudflare R2Amazon S3x: stored (GB), other usage scaled with it · cheapest usable plan at each point, list prices · try your own numbers

Who switches to what

Public pull requests on GitHub since Oct 2024 whose title says "X to Y" — real code changes, by developers in general rather than makers only. Pick a flow to see its pull requests.

Firebase → Supabase: 298 pull requestsSupabase → Firebase: 113 pull requestsVercel Blob → Supabase: 13 pull requestsSupabase → Vercel Blob: 6 pull requestsUploadThing → Vercel Blob: 3 pull requestsFirebase 298Supabase 119Vercel Blob 13UploadThing 3Supabase 311Firebase 113Vercel Blob 9Moving fromMoving to
Firebase → Supabase298 PRs

Before you choose

How to approach it

Upload straight from the browser to storage with a presigned URL; never stream files through your own server. Store only the object key in your database, not a full URL, so you can move buckets or add a CDN later. If downloads will be heavy (video, public images), check egress pricing before anything else.

Common mistakes
  • Saving full public URLs in the database instead of object keys, so moving buckets or adding a CDN means rewriting every row.
  • Making the whole bucket public to get images showing, which also exposes private attachments to anyone who finds or guesses a URL.
  • Signing upload URLs without a size or content-type limit, so anyone can drop huge or unexpected files into your bucket at your cost.

Other options

Real choices most makers here won't need to weigh.

Decided alongside

What the 10 makers' products here chose for their other decisions.