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 · Email
Documents, queries, realtime, auth, rules, triggers, files and transactional email, on one platform that runs close to your users. Start a new app from a starter with npm create @estra, or keep your firestore.rules and change one host.
- 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.
Email Early access
A Resend-compatible email API on the same platform as your data. Sign-in links and password resets go out through it automatically. Already sending with Resend? Change one variable.
The same POST /emails request, response and errors as Resend. The Resend SDK works as is, pointed at Estra.
No plan tiers for sending domains: one per app, per brand, per region. We generate the DKIM, SPF and DMARC records.
Scoped to the domains that app may send from, rate-limited, shown once, revocable at any time.
Every email is queued and retried until it's accepted. Hard bounces and complaints are suppressed automatically, protecting your reputation.
{{variables}} with HTML escaping, batches of up to 100, and idempotency keys, so a retried request never sends twice.
A 30-day message log, plus daily sent, bounced and complaint totals per app, kept for good.
# Already on Resend? Point the SDK at Estra.
RESEND_BASE_URL=https://api.estra.cloud
RESEND_API_KEY=em_…
// Your code doesn't change.
await resend.emails.send({
from: "Acme <hello@acme.com>",
to: "ada@example.com",
subject: "Welcome to Acme",
html: welcomeEmail({ name: "Ada" }),
});
In production: Monotaur's invitations, digests and alerts.
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 to pick, no per-user fees, no egress fees and no email plans. Usage is billed by the million (email by the thousand), and the first tier is free.
$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; 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. Export your data whenever you like, and because Estra speaks the Firestore API, your app code stays portable.
Usually when reads, file downloads, traffic or email dominate, since reads are nearly free, egress is free, and email costs less than half of Resend's overage rate. Write-heavy apps with many indexes pay more per write than on Supabase. The calculator above shows where your workload lands.
Hosted projects keep their database in North America today, and files are served from a global network with no egress fees. Tell us if you need another region.
Email comes with every Estra project: add your sending domain, publish the DNS records it gives you, and create keys from the dashboard. Email-only accounts are coming.