Documents & queries
Collections are real SQL tables. Compound and or filters, in, array-contains, collection groups, cursors, aggregates and radius search.
Estra Cloud · Firestore-compatible backend
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/…
In production at venven since October 2026
Platform
Collections are real SQL tables. Compound and or filters, in, array-contains, collection groups, cursors, aggregates and radius search.
firestore.rules and storage.rules compile as-is, or write rules in TypeScript. Test them without an emulator.
onSnapshot over hibernating WebSockets, sharded topics, resume after reconnect, plus presence and broadcast channels.
A local cache with latency compensation and pending writes, so the app keeps working on a train.
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.
onCreate, onUpdate and onDelete with retries, callable functions and storage triggers. Push notifications go out over FCM.
Uploads, downloads and storage rules, with zero egress fees, so a viral image doesn't turn into an invoice.
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
Estra reads your Firestore data and drafts a typed schema for you to review: collections, fields and subcollections.
estra-import schema --project my-app
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
Point the SDK or REST base URL at Estra. Sessions carry over, and Firestore stays untouched as your rollback.
initializeFirestore(app, { estraUrl })
Pricing
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.
$0 forever
MIT licensed. Deploy Estra to your own Cloudflare account and pay Cloudflare directly.
View on GitHub$0 / month
$5.60 / month minimum
The minimum counts toward usage. After that you pay the rates below, with no ceilings to upgrade past.
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
Pick a preset or drag the sliders. Same workload, each provider's list prices.
Questions
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.
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.
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.
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.
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.