type: runbook
status: active
timestamp: 2026-06-22
tags: [runbook, hosting, free-tier, databases, firestore, neon, supabase, turso, cloudflare-d1, upstash]

Free hosting — databases (Firestore, Supabase, Neon, Turso, Mongo, CockroachDB, Upstash, D1, KV)

DB free-tier numbers for Firestore, Neon, D1, Turso, KV

Databases — free tiers (2026-06-22)

The family pattern: Firestore for app data, Cloudflare D1 + KV for edge state, Neon for ad-hoc Postgres. Other providers in this table are validated fallbacks.

The table

#ProviderFree tierCard@signupCard to use freeKYCVerdict
1Firebase Firestore Spark1 GiB stored, 50K reads/day, 20K writes/day, 20K deletes/day, 10 GiB egress/moNONONOKEEP (family default)
2Cloudflare D15M rows read/day, 100K rows written/day, 5 GB storageNONONOKEEP (edge SQL)
3Cloudflare KV100K reads/day, 1K writes/list/delete each/day, 1 GB storageNONONOKEEP (edge KV)
4Neon Postgres10 projects, 0.5 GB/project, 100 CU-hrs/project/mo, 5 GB egress, unlimited branches, scale-to-zeroNONONOKEEP (ad-hoc PG)
5Supabase Free500 MB DB, 1 GB file storage, 50K MAU, 2 projects, pauses after 7-day inactivityNONONOKEEP (2-project ceiling kills fan-out)
6Turso libSQL100 DBs, 5 GB total storage, 500M row reads/mo, 10M row writes/moNONONOKEEP
7MongoDB Atlas M0512 MB storage, shared CPU, 1 cluster/project, ~100 ops/sec, no expiryNONONOKEEP
8CockroachDB Basic5 GiB storage + 50M RUs/mo, scale-to-zeroNONONOKEEP
9Upstash Redis256 MB data, 500K commands/mo (was 10K/day until 2025-03-12), 10 GB bandwidthNONONOKEEP
10Tembo Hobby0.25 vCPU, 1 GiB RAM, 10 GiB storage, no SLA/HA, free foreverNONONOEVALUATE
11Aiven Free PGSingle node, 1 GB storage (cut from 5 GB 2025-05-15), 20-conn cap, no time limitNONONOEVALUATE
12PlanetScaleNo free tier; Hobby killed Apr 8 2024 — cheapest now Scaler ~$39/moDROP (killed)
13XataFree tier discontinued 2025 (enterprise pivot)DROP (killed)

How the family picks per use case

Use caseFirst pickSecond pickWhy
App database (users, sessions, content)Firestore SparkSupabaseFirestore = no-card default, generous reads/day. Supabase if you need real SQL and don’t fan out past 2 projects.
Edge SQL (read at the edge)Cloudflare D1Turso libSQLD1 lives in the Cloudflare account already used for Pages + Workers. Turso for libSQL features (branching, embedded replicas).
Edge KV (session, feature flags, small lookups)Cloudflare KVUpstash RedisKV is free + co-located with Workers. Upstash for Redis-API compatibility.
Ad-hoc Postgres (analytics, prototypes, branchable)NeonAivenNeon = 10 projects + branching is killer for branch-per-PR previews. Aiven for “I want a single PG and don’t care about branches”.
Document DB at scaleMongoDB Atlas M0FirestoreMongo for genuine document-DB queries (aggregations).
Large-scale OLAP-leaning relationalCockroachDB BasicNeonCockroach for distributed SQL semantics; Neon for plain PG.
Redis-API ephemeral cacheUpstashCloudflare KVUpstash for true Redis API; KV for simpler reads.

Quirks per provider

Recommendation for the family

  1. App data (every site + app): Firestore Spark — already the default, no migration needed.
  2. Edge state (per-Worker / per-Pages-Function): Cloudflare D1 + KV — same Cloudflare account.
  3. Prototype Postgres / branch-per-PR previews: Neon — 10 projects covers 10 simultaneous projects, plenty of headroom.
  4. Redis cache: Upstash Redis (500K commands/mo) until we genuinely outgrow the cap.
  5. Anything else: see the use-case table above.

Firestore project + emulator

Image storage replication for max durability

Images uploaded by users (or assets large enough to justify external hosting — anything >100 KB that isn’t ideal as a build-time static asset) are replicated across 4 hosts on upload for max durability + first-200-wins client-side failover:

  1. Cloudinary (25 credits/mo; transforms + CDN)
  2. ImageKit (20 GB + 20 GB; unlimited transforms)
  3. imgbb (32 MB/image cap; no expiry, no signup needed)
  4. GitHub Releases (cold storage; not CDN-fast but durable)

Stored URL shape in Firestore is a JSON tuple {cloudinary, imagekit, imgbb, ghRelease}; the client <img> wrapper tries each in order, first 200 wins. Details in image-cdn.md.

Image-only assets ride this replication strategy; general object storage (backups, large binaries) stays on Backblaze B2 per object-storage.md.

Sources


Edit on GitHub · Back to index