File Storage
Store the files your users upload — avatars, attachments, exports — and serve them back without filling up your app server.
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 processing
Amazon S3 - Your users' images, video or downloads are fetched a lot by the public
Cloudflare R2 - You're in a TypeScript app and want uploads working today without wiring presigned URLs
UploadThing - You host a Next.js app on Vercel and don't want another account
Vercel Blob - Your backend is on Supabase and who can see a file depends on who owns the data
Supabase
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.
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.txtMCPUsed 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.
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 LovableNo maker's product we track shows it for this yet · in 175 open-source projects.
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.
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, v0Used 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.
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
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.
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.
- feat migrate auth and data from Firebase to Supabasezabdax/callimachus · 2026-10-02
- feat: migrate from Firebase to Supabase with offline-first support an…xabhishek54/personal-finance-tracker · 2026-09-30
- Start Firebase to Supabase migrationapurbabhaiya/Apurba-Roy · 2026-09-29
- Foundation: connect Firebase sessions to Supabase toolkit accountswinningj26-prog/aiStudio-BudgetPlanner · 2026-09-29
- Foundation: connect Firebase identity to Supabase account servicewinningj26-prog/aiStudio-BudgetPlanner · 2026-09-29
- Migrate from Firebase to Supabase for auth, database, and storagekaitodecode/nyated.adikurniawan.com · 2026-09-27
- Firebase to self-hosted Supabase migration + accumulated Beta feature worksandschi/StreamCast-Pro · 2026-09-26
- Migrate authentication provider from Firebase to Supabasesametboy112-ctrl/JOKERWEB · 2026-09-25
- Migrate the backend from Firebase to Supabase PostgreSQL with RLSmonarch7107/Mohammed-Fazil-Cattery- · 2026-09-24
- Remove Firebase completely and migrate to Supabaseyouknowwalid/MD-WALID-RAHMAN · 2026-09-24
- Migrate shared state from Supabase to Firebaseryanlay/tcfdlabschool.github.io · 2026-10-01
- Migrate database from Supabase to Firebase FirestoreubcWiCS/marketing-manager · 2026-09-30
- Migrate backend from Supabase to Firebase (specs + steering)livanuj/homemade_Uno · 2026-09-29
- Migrate backend from Supabase to Firebase: Firestore, Auth, Functions and client adapterJanStoutBlack/rankride · 2026-09-28
- feat: migrate backend from Supabase SQL to Firebase Firestore NoSQLparthasdey2304/paisa-lainden · 2026-09-27
- feat: migrate auth from Supabase to Firebase with Google OAuthSushma-1206/ai-pr-copilot · 2026-09-26
- feat: migrate Supabase to Firebase - fixes 504 timeoutAdinath-Jagtap/TripTogether · 2026-09-26
- feat: migrate admin data from Supabase to Firebasebustmartin05/barriguita · 2026-09-25
- feat(auth): migrate from Supabase to Firebase Authenticationfer-araujo/solarpanel-system · 2026-09-22
- Migrate backend from Supabase to FirebaseJoeK1973/RC-Endurance-Pit-Wall · 2026-09-22
- Lead Engine: move persistence from Vercel Blob to Supabasejankovicdominik01-sudo/portfolio-2026 · 2026-10-01
- Migrate Vercel Blob to Supabase Storagengowda759/Rayaramathaynk · 2026-09-19
- Migrate pin storage from Vercel Blob to Supabase Postgres0xpranayyy/world · 2026-09-07
- Move PIN admin gallery from Vercel Blob to SupabaseGolfChariotsMike/glacier-air · 2026-09-03
- Move killcam storage from Vercel Blob to SupabaseConnorXTan/phonegame · 2026-08-09
- feat: switch file uploads from Vercel Blob to Supabase StorageCai305/guranda · 2026-07-31
- feat(storage): migrate file uploads from vercel blob to supabase storagelardecambinda/apollo-api · 2026-07-22
- feat: migrate image storage from Vercel Blob to Supabase StorageCeylon-Marketplace/ceylon-marketplace · 2026-06-26
- Switch media hosting from Vercel Blob to Supabase Storage (fixes upload)enoceantours-whales/Social-Media-Break · 2026-06-17
- docs: migrate tech spec from Neon/Vercel Blob to Supabasemazaevoumar07-dev/oumi-roll · 2026-05-29
- Migrate from Supabase to Vercel Blob for data storagerb7jx9kh85-prog/prospects-research · 2026-08-07
- Migrate persistence from Supabase to Vercel Blob and move admin flow client-sideBiosaude/UFR-Biosaude · 2026-08-06
- feat: migrate file storage from Supabase to Vercel BlobAnasco26/g2-gist-project · 2026-07-09
- Switch file storage from Supabase Storage to Vercel Bloboutsideatlana/FableOUTATL · 2026-06-15
- Migrate DB to Postgres/Supabase and switch file storage to Vercel BlobseasonHL/content-sharing-platform · 2026-03-31
- feat: migrate gallery from Supabase to Vercel Blob StorageXerrion/xerrion-io · 2026-02-18
- complete migration from uploadThing to Vercel BlobMurrayMint7/disco-soulstice · 2026-07-13
- update config. changed from uploadthing to vercel blobkenrique100/cnersh-webapp · 2026-06-20
- Migrate file uploads from UploadThing to Vercel Blobdccakes/SCV · 2026-03-25
Before you choose
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.
- 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.