Estra Cloud · Firestore-compatible backend

The Firestore API,
on Cloudflare's edge.

Documents, queries, realtime, auth, rules, triggers and files, built on D1, Durable Objects, Queues and R2. Keep your firestore.rules, change one host, and pay Cloudflare's price plus 12%.

- https://firestore.googleapis.com/v1/projects/my-app/…
+ https://api.my-app.com/v1/projects/my-app/…
client rules D1 commit topics listeners queue trigger offline cache
One write: checked by your rules, committed atomically, fanned out to every listener.

In production at venven since October 2026

115,083
documents moved from Firestore
25 / 25
app queries return identical results
30 / 30
security-rules tests pass unchanged
0
users asked to sign in again

Platform

Everything Firestore apps lean on. Nothing you have to rewrite.

D1

Documents & queries

Collections are real SQL tables. Compound and or filters, in, array-contains, collection groups, cursors, aggregates and radius search.

Rules

Your rules, as written

firestore.rules and storage.rules compile as-is, or write rules in TypeScript. Test them without an emulator.

Durable Objects

Realtime

onSnapshot over hibernating WebSockets, sharded topics, resume after reconnect, plus presence and broadcast channels.

Client

Offline first

A local cache with latency compensation and pending writes, so the app keeps working on a train.

Auth

Sign-in, or keep yours

Email, Google, Apple and GitHub, account linking and session cookies. Imports Firebase users with their password hashes, or accepts Firebase ID tokens as they are.

Queues

Triggers & callables

onCreate, onUpdate and onDelete with retries, callable functions and storage triggers. Push notifications go out over FCM.

R2

Files

Uploads, downloads and storage rules, with zero egress fees, so a viral image doesn't turn into an invoice.

Gateway

Speaks Firebase

Serves the Firestore and Identity Toolkit REST paths, a firebase-admin-shaped Node client, and a Kotlin Multiplatform SDK for iOS and Android.

Also included: an admin console, live aggregates and counters, Yjs collaboration, and a frozen /v1 API contract.

Migrate

Three commands, then a host change.

  1. 01

    Draft a schema

    Estra reads your Firestore data and drafts a typed schema for you to review: collections, fields and subcollections.

    estra-import schema --project my-app
  2. 02

    Copy and verify

    It copies every collection and user without writing anything to Firebase, then compares the two side by side. Top up with --since until you switch.

    estra-import data --project my-app
    estra-import verify --random --sample 200
  3. 03

    Switch hosts

    Point the SDK or REST base URL at Estra. Sessions carry over, and Firestore stays untouched as your rollback.

    initializeFirestore(app, { estraUrl })

Pricing

Cloudflare's price, plus 12%. That's the whole markup.

No instance sizes, no per-user fees, no egress fees. Every rate below is Cloudflare's list price with 12% added, and we show both.

Self-hosted

$0 forever

MIT licensed. Deploy Estra to your own Cloudflare account and pay Cloudflare directly.

View on GitHub

Starter

$0 / month

  • 1M API requests
  • 2M rows written, 1B rows read
  • 500 MB database, 1 GB files
  • 1M realtime messages
  • Never pauses
Start free

A document write costs one row, plus one row per index it touches, plus two rows for the realtime change feed. That's typically 4–6 rows. Reads cost about a tenth of a cent per million rows.

Compare

Your workload, three monthly bills.

Pick a preset or drag the sliders. Same workload, each provider's list prices.

How we calculate this
  • Estra: about 10 documents per read request, 3 rows read and 5 rows written per document, 4 ms of CPU per request, and 3 realtime fan-out messages per write. Files average 2 MB, and about 10% of them are new each month. Downloads average 0.5 MB. The Starter allowance applies, then the Pro minimum.
  • Firebase: Firestore Standard in nam5 ($0.60/M reads, $1.80/M writes, $0.18/GiB), with the free quotas (50k reads and 20k writes a day). Cloud Storage at $0.026/GB, $0.12/GB egress after 100 GB, and $0.05 per 10k uploads. Firebase Auth is counted as free.
  • Supabase: Pro at $25 with 8 GB of disk, 100 GB of files and 250 GB of egress included. The overages are $0.125/GB of disk, $0.0213/GB of files, $0.09/GB of egress and $0.00325 per MAU over 100k. Compute is sized to load (Micro, Small, Medium, Large), net of the $10 credit. Small workloads use the Free plan, which pauses after a week of inactivity.
  • List prices were checked on 22 October 2026. Database egress is ignored for every provider. Your mileage will vary, so model your own numbers.

Questions

The fine print, up front.

What are the limits?

Each database holds up to 10 GB, which is D1's cap. Split larger apps across databases. A query returns up to 1,000 documents a page, and the schema is strict: a write that names an undeclared field is refused, which catches typos before they become data.

Can I keep Firebase Auth?

Yes. Estra accepts Firebase ID tokens, so you can move the database first and nobody signs in again. You can move auth later, with password hashes imported, or never.

Am I locked in?

No. Estra is MIT licensed and runs on standard Cloudflare products. Take your data, or the whole deployment, to your own account whenever you like.

When is Estra cheaper than Firebase or Supabase?

Usually when reads, file downloads or traffic dominate, since reads are nearly free and egress is free. Write-heavy apps with many indexes pay more per write than on Supabase. The calculator above shows where your workload lands.

Where does my data live?

In Cloudflare D1 and R2, in the region you pick when you create the project. Hosted projects run on Realm 8's Cloudflare account. Self-hosted ones run on yours.

Bring your Firestore app. Keep everything else.