Firebase Storage Alternatives Now That Spark Lost Storage

The main Firebase Storage alternatives are backend storage services with access rules built in (StitchDB Storage, Supabase Storage, Appwrite Storage) and raw object storage you secure yourself (Cloudflare R2, Amazon S3). If you used Firebase Storage because security rules tied files to signed-in users, pick one of the first group. If you only need cheap buckets behind your own server, R2's free egress is hard to beat.

Many developers are asking this question for a concrete reason: since February 3, 2026, Cloud Storage for Firebase requires the Blaze plan, even for default buckets.

#What changed in Firebase Storage

Firebase's FAQ on the storage changes says Cloud Storage for Firebase now requires the pay-as-you-go Blaze plan. For a project still on Spark:

  • Calls to the Cloud Storage APIs fail with 402 or 403 errors.
  • You lose read and write access to all buckets, including the default *.appspot.com bucket.
  • The data stays in the bucket, but it's inaccessible until you upgrade.

Blaze still has a no-cost allowance, as of November 2026:

Bucket typeStoredDownloadsOperations
Legacy *.appspot.com5 GB1 GB per day20K uploads/day, 50K downloads/day
*.firebasestorage.app and new buckets5 GB-months100 GB per month5K uploads/month, 50K downloads/month

The free quota for new buckets applies only in us-central1, us-west1 and us-east1; buckets in other regions don't get it. Blaze also means attaching a billing account, which is the part many hobby developers dislike.

#Alternatives compared

AlternativeFree storage (Nov 2026)Access rulesImage resizingNotes
StitchDB Storage1 GBSQL policies on storage.objectsYes, every planEU data centers, S3 endpoint, part of a backend
Supabase Storage1 GBSQL policies on storage.objectsPro and upMany regions, part of a backend
Appwrite StorageSee Appwrite pricingAppwrite permissionsSee Appwrite docsSelf-hostable
Cloudflare R210 GB-monthNone built in, your codeVia Cloudflare ImagesNo egress fees
Amazon S3See AWS pricingIAM and presigned URLsNoThe default for AWS shops

#StitchDB Storage

StitchDB is a hosted backend with a dedicated Postgres database per project, plus Auth, APIs, Realtime and Storage. Files live in buckets, and access is decided by policies on storage.objects, the same way Row Level Security protects tables. That's the closest match to Firebase security rules.

A Firebase rule like "users can write only to their own folder":

Text
match /users/{userId}/{file} {
  allow read, write: if request.auth.uid == userId;
}

becomes a storage policy:

SQL
create policy "Users manage files in their folder" on storage.objects
  for all to authenticated
  using (bucket_id = 'docs' and (storage.foldername(name))[1] = auth.uid()::text)
  with check (bucket_id = 'docs' and (storage.foldername(name))[1] = auth.uid()::text);

Uploading from a web app:

JavaScript
const file = event.target.files[0]
const { data, error } = await stitchdb.storage
  .from('avatars')
  .upload(`${user.id}/avatar.png`, file, { upsert: true })

const { data: { publicUrl } } = stitchdb.storage.from('avatars').getPublicUrl(data.path)

What else you get, from the docs:

  • Image resizing on every plan. Width, height, crop mode, quality and WebP/AVIF output by URL. Monthly transformations: 1,000 on Free, 25,000 on Pro, 100,000 on Scale. Cached public renders don't count.
  • Signed URLs for private files and one-time upload URLs.
  • Resumable uploads (TUS) for large files.
  • An S3-compatible endpoint for the aws cli, rclone and boto3.
  • Caching: public files are cached on the servers that answer for your project.

Limits as of November 2026: Free 1 GB storage and 50 MB per file; Pro ($15.99/month) 100 GB; Scale ($49/month) 250 GB. Extra storage with the spend cap off is $0.02 per GB. The spend cap is on by default on paid plans, so you never pay more than the plan price unless you turn it off.

Trade-offs: files are stored in EU object storage only, and the platform is younger than Firebase. If you use Firebase for push, analytics and Crashlytics too, moving only storage leaves you with two consoles.

#Supabase Storage

Same model as StitchDB: buckets, storage.objects policies, signed URLs and resumable uploads. Free has 1 GB; Pro (from $25/month) includes 100 GB, then $0.0213 per GB. Image transformations are on Pro and above, with 100 origin images included and $5 per 1,000 after that. Free projects pause after one week of inactivity. Supabase offers many regions, including the US and Asia.

#Appwrite Storage

Appwrite is an open-source backend with storage, auth, databases and functions, available as Appwrite Cloud or self-hosted with Docker. Its Pro plan is $25/month per project since September 2025. Storage permissions use Appwrite's own permission model rather than SQL. A good choice if you want to self-host the whole stack.

#Cloudflare R2

R2 is S3-compatible object storage with free egress. The free tier includes 10 GB-months of storage, 1 million Class A and 10 million Class B operations a month; after that it's $0.015 per GB-month (R2 pricing). There's no user-aware access layer: your server or a Worker must check who may read or write and hand out presigned URLs. Best when you have a backend already and serve a lot of downloads.

#Amazon S3

The standard. Fine-grained IAM, every feature you can think of, and a learning curve to match. For mobile and web apps without a backend team, the amount of glue (presigned URLs, CORS, CloudFront) is the main cost.

#How to migrate files out of Firebase

  1. Upgrade to Blaze temporarily if your project is on Spark, or you can't read the bucket. Set a budget alert first.
  2. Copy the files with gsutil or gcloud storage cp -r gs://<bucket> ./export.
  3. Upload them to the new storage. With StitchDB's S3 endpoint, rclone or the aws cli can push a whole folder:
Terminal
aws s3 cp ./export s3://avatars/ --recursive --profile stitchdb \
  --endpoint-url https://<project-ref>.p.stitchdb.com/storage/v1/s3
  1. Rewrite stored URLs. Firestore documents often contain full download URLs with tokens. Store paths instead, and build URLs in the app.
  2. Translate rules to policies, one rule at a time, and test with a signed-in test user.
  3. Downgrade or delete the Firebase bucket once traffic has moved.

S3 access keys bypass storage policies like the service_role key, so use them only from your machine or a server. If the rest of your Firebase project is moving too, see Migrate from Firebase to Postgres, and for the upload code itself, File uploads and storage for web and mobile apps.

#When to stay on Firebase Storage

If you already use Blaze, your files are in a US region with a free quota, and you depend on Firebase SDK features such as upload tasks with pause/resume on mobile, staying is reasonable. For many apps the change is mostly about needing a billing account, not about higher costs.

#FAQ

#Is Firebase Storage still free?

Not on Spark. Since February 3, 2026 it requires Blaze. Blaze includes a no-cost quota (for example 5 GB-months stored for new buckets in three US regions), as of November 2026.

#What is the cheapest Firebase Storage alternative?

For raw storage with heavy downloads, Cloudflare R2 (free egress). For storage with user permissions included, StitchDB Free (1 GB) or Pro ($15.99/month for 100 GB) and Supabase are the simplest.

#Do StitchDB storage policies work like Firebase security rules?

They do the same job. Policies are SQL on storage.objects and use auth.uid(), the same function your table policies use.

#Can I serve resized images from StitchDB Storage?

Yes, on every plan, by adding width, height, resize, quality or format to a render URL.

Keep your files next to your users and data: create a free StitchDB project.