/technology/vs-supabase/ · The comparison, with sources
Different answers to the same question.
Supabase is a mature hosted platform with Postgres from day one. Harness is a compiled backend that runs in your own account, and most of the managed layer is still on the roadmap. Both columns below are meant to survive a Supabase engineer reading them.
Coming from Supabase? Step 1 shipping
Users with their passwords, tables with PostGIS, files into R2, and a switch you can undo. Not one click yet: the read-only first step runs today from source, the other four are designed.
Shippingin the repo Designedpublic issues, unbuilt Plannednamed, unspecified
| Capability | Supabase (per its docs) | Cratefield Harness |
|---|---|---|
| Database | Managed Postgres per project, with extensions such as pgvector. docs | Cloudflare D1 (SQLite) per backend; 10 GB per database, single-threaded. Or real Postgres through the same port, on the native runtime Shipping |
| Multi-tenant isolation | Row Level Security policies on shared tables, keyed by JWT claims. docs | One database per tenant; no shared tables, no RLS. Shipping |
| Where it runs | Supabase-hosted projects, or self-hosted from the open-source stack. docs | Managed by us, in your infrastructure account or ours — two modes Planned |
| Composition | Dashboard settings, SQL, Edge Functions in TypeScript. docs | Rust crates listed in Cargo.toml, compiled into one binary Shipping |
| Auth | Hosted auth with email, phone, social and SSO providers. docs | Passkeys, Google, Apple, Meta, email and password, magic links, sessions, authorization code + PKCE, ES256 JWTs with JWKS Shipping. Password login needs the paid Workers plan |
| Realtime | Postgres changes, broadcast and presence over websockets. docs | A Realtime port with an in-process adapter, which is the native runtime’s half Shipping. The Cloudflare Durable Object adapter behind the same port Designed, #103 |
| Object storage | S3-compatible storage with policies and image transforms. docs | A Blob port over R2 on Cloudflare, or a directory on a native binary Shipping, #105. No access policies or image transforms |
| Dashboard | Table editor, SQL editor, logs, auth and storage management. docs | Admin pages per module, built from its declared surface, behind a token login Shipping. No general data browser; build logs and deploy history wait on the control plane Planned |
| Custom domains | A paid add-on: $10 per domain per month, per project. docs | Cloudflare for SaaS: 100 custom hostnames included, then $0.10 per hostname per month, to a limit of 50,000 Planned |
| Egress | Pro includes 250 GB, then $0.09 per GB. docs | Workers and R2 make no charge for data transfer out Shipping |
| Idle projects | Free projects are paused after 1 week of inactivity, restorable for 90 days, then backups only. Paid projects are not paused. docs | No administrative pause and nothing to restore. Compute scales to zero, so idle costs only storage. The Durable Object behind a D1 database hibernates between requests, which is a cold start, not an outage Shipping |
| License | Apache 2.0 for the core stack; components vary. docs | MIT across all crates Shipping |
| Usable today | Yes. Create a project and query it this afternoon. docs | Open-source core, yes. Managed layer, no Shipping |
The limits, in full
What Cloudflare D1 is, and is not.
From developers.cloudflare.com, checked 2026-09-06. Re-check before relying on them.
| Databases per account (Workers Paid) | 50,000 |
| Storage per database | 10 GB, cannot be raised |
| Storage per account | 1 TB |
| Queries per Worker invocation | 1,000 |
| Maximum row size | 2 MB |
| Query timeout | 30 s |
| Concurrency model | single-threaded per database |
| Throughput at 1 ms / query | ~1,000 queries/s |
| Throughput at 100 ms / query | ~10 queries/s |
Cost is a separate question from capability, and it has its own page: published list prices for Supabase, Railway and Firebase, and the shape of the cost underneath a Cratefield backend.
Fairness
When Supabase is the right answer.
- You need Postgres extensions, pgvector, or LISTEN/NOTIFY today.
- You need realtime subscriptions on a hosted backend. The
Realtimeport is merged, but only the in-process adapter is, so today that means running the native binary yourself. - A single database will exceed 10 GB and you want it hosted. The Postgres adapter lifts that cap, but only if you run the native binary yourself.
- You want a dashboard data browser and a large community answering questions this afternoon.
- You need something operated for you now. The Cratefield control plane is Planned, not running.
If the account boundary and compile-time composition matter more than the list above, request early access. Already on Supabase? The move is planned as five steps, and the page says where each one stands.