Comparison

Supabase vs Pithy

Both are good, and they are built for different worlds. Supabase gives you a managed Postgres platform with a mature console and someone else on call for your database. Pithy gives you capabilities that compose into your own Worker, on your own Cloudflare account, with no service of ours in the path. The difference that decides it is not a feature. It is where your customers' data lives.

Choose Supabase if

Your application is relational at its core

and you want real Postgres — extensions, stored procedures, point-in-time recovery — behind a polished console, with support you can buy.

Choose Pithy if

You want to own the whole data plane

and run close to your users on Cloudflare — with payments, games, media and support already wired, and nothing of ours between you and your data.

Where they overlap

The table stakes.

If a feature is standard for a modern backend, assume both have it. We are not going to dress one up as a differentiator.

Authentication.

Sessions, OAuth providers and API keys. Both cover it, and neither should claim it as a differentiator.

Object storage.

Signed URLs and per-object ownership. Pithy on R2, Supabase on S3-style buckets.

Vector search.

Embeddings and similarity search. Pithy on Vectorize, Supabase on pgvector.

Live updates.

Both can push to a connected client. What they push, and who writes the server, is not the same thing — see the table.

Encrypted secrets.

Both store secrets encrypted at rest — Supabase Vault in Postgres, Pithy in a dedicated D1. The difference is custody and rotation, and it is in the table below rather than here.

Open source.

Read the code, run it yourself. Supabase is Apache-2.0, Pithy is MIT. Neither locks you in at the license level.

The difference underneath

One of these operates a data plane. The other operates nothing.

Supabase runs the Postgres your customers' data lives in. That is the product, and it is a good one — someone else is on call for your database at three in the morning, and for most teams that is worth paying for.

It is also a database with an administrator: an instance to size, a pool to manage, upgrades to schedule, and compute billed while it idles. D1 has none of those, because it is not a container — it is a serverless database reached over a binding.

Pithy runs nothing. Every capability executes in your Worker, against your D1, KV and R2, in your Cloudflare account. There is no Pithy-operated service in any request path, because there is no Pithy-operated service. Even the dashboard reaches into your Worker with a key you registered and can revoke, rather than holding a copy of your data.

That is not a feature you can put a tick beside. It is the constraint every capability in the kit was designed under, and it decides what happens to your users on the day either company has a bad week.

Feature by feature

Where the two diverge.

FeatureSupabasePithy

Runtime & data

Runtime

Supabase: managed Postgres, regional

Pithy: Cloudflare Workers, global

Yes Yes
Pick a region

Supabase: you choose, and latency follows from it

Pithy: there is no region to pick

Yes No
Full relational SQL

Supabase: full Postgres

Pithy: D1 is SQLite — lighter, and not Postgres

YesPartial
Analytical / event tables Coming soon

Supabase: Postgres will do it until it will not

Partial No
Durable multi-step workflows

Pithy: Cloudflare Workflows are a first-class primitive

No Yes
Subscribe to table changes, declaratively

Supabase: Postgres logical replication streams row changes to clients with no server code

Pithy: you would write the publish yourself

Yes No
Authoritative server-held session state

Pithy: a Durable Object holds what no client can be trusted with, and resolves it

No Yes

Database operations

No instance to size

Supabase: compute tier per project, and you pick it

Pithy: there is no instance

No Yes
No connection pool to manage

Supabase: a real constraint from serverless functions; Supavisor exists for this

Pithy: D1 is reached over a binding, not a connection

No Yes
No idle cost

Supabase: compute is billed while the project is up, busy or not

Pithy: nothing is billed for a database nobody queried

No Yes
No upgrades or maintenance windows

Supabase: Postgres major versions and restarts are yours to schedule

Pithy: Cloudflare's to run

No Yes
No vacuum, bloat or index maintenance

Supabase: routine Postgres operations at scale

Pithy: SQLite has none of it

No Yes
Point-in-time recovery

Supabase: an add-on at $100 a month per seven days of retention, billed outside the spend cap

Pithy: D1 Time Travel: always on, no configuration, no extra charge — any minute in the last 30 days

Yes Yes
Managed daily backups included

Supabase: 7 days on Pro, 14 on Team, 30 on Enterprise

Pithy: Time Travel is the mechanism; there is no separate backup product

YesPartial

Identity

Sessions and OAuth Yes Yes
Passwordless by default

Supabase: supported, but passwords are the default path

Pithy: magic link and email OTP only; no passwords, ever

Partial Yes
Mobile-first bearer tokens

Pithy: rotated refresh tokens in secure device storage, PKCE and deep-link redirects

Partial Yes
Device registration No Yes

Language

Per-request locale negotiation

Supabase: you write it, on both the server and the client

Pithy: URL, the signed-in reader's account, a cookie and Accept-Language, in an order you configure

No Yes
Translated catalogs shipped with the framework

Pithy: Spanish today, updated with the package rather than copied into your repository

No Yes
Override one sentence without forking a catalog

Pithy: lookup walks layers per key, so everything you did not mention keeps arriving

No Yes
Dates, numbers and currency from the same seam

Pithy: the formatting locale does not fall back, so an es-AR reader gets Argentine numbers

No Yes
Missing translations fail the build

Pithy: a pithy doctor finding that names the locale and the keys

No Yes
Errors carry a code a client can translate

Supabase: Postgres and GoTrue errors arrive as English strings

Pithy: the payload's message stays English and the code is the catalog key

No Yes

Money

Stripe No Yes
Paddle

Pithy: merchant of record — they own the tax registration

No Yes
Lemon Squeezy No Yes
Apple In-App Purchase No Yes
Google Play Billing No Yes
One entitlement across every rail

Pithy: buy on iOS, be entitled on the web

No Yes
Per-user balance ledger No Yes

Content & media

Object storage with quotas Yes Yes
Resumable upload Yes Yes
Direct-to-bucket upload

Pithy: bytes never proxy through your Worker

Yes Yes
Image and video pipeline

Supabase: image transformation; video is yours to solve

Pithy: Cloudflare Images and Stream, chosen per media type in config

Partial Yes
AI enrichment of uploads

Pithy: on your own Workers AI binding

No Yes
Vector search Yes Yes

hyi187

Authoritative sessions

Pithy: Durable Objects hold what no client can be trusted with

No Yes
Matchmaking

Pithy: room codes, invites, friends and skill queues

No Yes
Skill rating

Pithy: Elo, Glicko-2 and TrueSkill built in

No Yes
Leaderboards with closing windows No Yes
Play closed-test roster and its fourteen-day clock

Pithy: the step between a finished Android build and production, which nothing else tracks

No Yes

Trust & compliance

Row-level security

Supabase: enforced in the database

Pithy: authorization is per route in your Worker, not per row in the database

YesPartial
Audit trail

Supabase: Postgres logs and extensions, assembled by you

Pithy: a queryable trail attributed to the right actor, including the dashboard

Partial Yes
Encrypted secret storage Yes Yes
Key custody

Supabase: a per-project root key they create and manage, retrievable through their API

Pithy: a worker-only master key, in a store separate from the app database

Partial Yes
Automatic key rotation at rest

Supabase: manual secret rotation is the documented practice

Pithy: append, prove, then expire — a failed rotation leaves the old key working

Partial Yes
Humanity check as middleware No Yes
Privacy classification of fields Coming soon No No
Field encryption at rest Coming soon No No

Observability

Structured logging built into the framework

Supabase: Postgres and function logs, in their own formats

Pithy: one Logger seam; a log call is a record with queryable fields, not a line — and those fields are exactly what the query builder groups by

No Yes
Context carried through background work

Pithy: a Workflow's records carry the run, instance and environment without being passed by hand

No Yes
A log explorer, with a query builder

Supabase: queryable, and genuinely good

Pithy: Cloudflare's Observability dashboard, writing to your own account — and its query builder groups and filters on any field you logged

Yes Yes
Ship logs to your own sink

Supabase: available on higher plans

Pithy: Cloudflare Logpush, on your own account

Partial Yes
An audit trail separate from logs

Supabase: you would build it

Pithy: durable, queryable rows attributed to an actor — including the dashboard

No Yes
Invocation traces

Pithy: Cloudflare groups every log from one trigger into a single invocation

No Yes

Development & environments

A local stack you can run

Supabase: the full Supabase stack, locally

Pithy: Miniflare, the same runtime your Worker deploys to

Yes Yes
Local development without Docker

Supabase: a Docker-compatible runtime is required

Pithy: no containers; pithy dev is the whole dependency

No Yes
Migrations and seed data

Supabase: seed.sql runs on start and on db reset

Pithy: pithy migrate and pithy seed, per environment

Yes Yes
A preview environment per branch

Supabase: Branching, on Pro and above

Pithy: pithy feature create, then pithy provision --feature

Yes Yes
Included rather than a paid add-on

Supabase: Branching needs Pro or above, and a preview branch bills by the hour on top of the plan

Pithy: the CLI is free; you pay Cloudflare for the resources the branch actually uses, at the same rates as anything else

No Yes
Every resource cloned, not only the database

Supabase: a preview branch is a Supabase project — the database and its configuration

Pithy: its own D1, KV, R2 and its own secrets master key, named from the branch

Partial Yes
An isolated worktree with pinned ports

Pithy: several features run at once; each gets its own port block, assigned once and never probed

No Yes
Teardown that cannot strand a resource

Supabase: branches are deleted through the platform

Pithy: names are recomputed from the branch, so a half-finished run still cleans up

Partial Yes

Operations & DX

CLI scaffolding and migrations Yes Yes
Front end scaffolded into the backend

Pithy: one command, one origin, one deploy — with sign-in and paywall screens

No Yes
Support inbox No Yes
Play closed-test tracking No Yes
Management dashboard

Supabase: their console, holding your data

Pithy: reaches into your Worker with a key you can revoke

Yes Yes
A polished platform console

Supabase: years of polish, a table editor, a SQL editor and a good log explorer

Pithy: Cloudflare's own, and it is very good — the console the account already uses for Workers, D1, R2 and the logs

Yes Yes
Panes for users, money and the trail

Supabase: an auth user list and a table editor over the rows; entitlements, purchases and a trail are yours to model

Pithy: users, entitlements, purchases, subscriptions, support and the trail — and a user can be comped, revoked or signed out everywhere

Partial Yes

Ownership

No charges for egress

Supabase: bandwidth is metered and billed above the plan's allowance

Pithy: Cloudflare charges nothing for egress, on Workers or on R2

No Yes
Your data stays in your account

Supabase: self-host, or their cloud holds it

Pithy: there is no other option; we operate nothing

Partial Yes
Self-hostable Yes Yes
Open-source license

Supabase: Apache-2.0

Pithy: MIT

Yes Yes
No vendor in the request path

Supabase: their platform, unless you self-host

Pithy: nothing of ours sits between your app and its data

Partial Yes

The saffron tick marks where Pithy leads — not that the other column is absent. Every claim about Supabase was checked against their own documentation on 2026-08-25; both products change, and this page is a snapshot rather than a maintained contract.

Where Pithy pulls ahead

The parts Supabase does not have.

01

Money is in the kit, on five rails.

Apple, Google, Stripe, Paddle and Lemon Squeezy resolve to one cross-rail entitlement, with every purchase row in a database you own. Supabase has no payments story at all — you bring Stripe and wire it, and the cross-rail case is yours to build.

02

Games are a first-class use case.

Authoritative sessions on Durable Objects, matchmaking, skill rating and leaderboards ship as composable capabilities. On Supabase this is a project, not a dependency.

03

The expensive add-ons are not add-ons.

Point-in-time recovery is $100 a month per seven days of retention on Supabase, billed outside their spend cap. On D1 it is called Time Travel, it is always on, it reaches back thirty days, and it costs nothing. Preview environments are the same shape: theirs need a Pro plan and bill by the hour, ours are the CLI. The pattern is worth naming, because it is where a platform bill actually comes from.

04

The bill has no cliff in it.

Cloudflare meters requests, CPU time, storage and reads. There is no tier that steps from $25 to $599 because you added a second project or a third teammate, and no seat to buy. The number moves with what your application actually did, which means a quiet month costs almost nothing and a busy one costs proportionally — and you can work out which before you commit.

05

Egress is free, and that is not a detail.

Cloudflare does not bill for bandwidth out — not from Workers, and not from R2. For anything serving files, media or a busy API, egress is the line that quietly decides the bill everywhere else, and here it is zero. It is also why moving off is cheap, which is the honest version of the same fact: nothing is holding your data in by making it expensive to leave.

06

A whole environment per branch, and no bill for having one.

One command cuts a worktree, reserves ports and seeds a local backend; a second gives that branch its own D1, KV, R2 and master key on your Cloudflare account. Every name derives from the branch, so provisioning is idempotent, resumable and safe to run from CI — and teardown deletes by recomputed name, so an abandoned run still cleans up. Supabase does this too, on Pro and above, billed by the hour per branch.

07

It runs where your users are.

Workers execute in hundreds of cities. There is no primary region to be far from, and no read replica to reason about — which also means no region to pick when you do not know where your users will be.

08

Nothing of ours is in the path.

No service to be down, no plan to be throttled by, no dashboard holding your customers' data. The management plane reaches in with a key you registered and can delete.

09

A second language is one line of config.

Every capability contributes its English, one seam renders it, and the reader's locale is negotiated per request from the URL, their account, a cookie and Accept-Language. Supabase has no position on language at all — you choose a library, wire it twice for the server and the browser, and own the catalogs forever. Here the translations ship with the package, an override is one entry rather than a fork, and a missing one fails `pithy doctor` instead of surfacing to a reader.

Where Supabase wins

Sometimes it is the better pick.

Real Postgres.

Decades of SQL maturity, window functions, CTEs and query planning that D1 does not attempt. If your data model is genuinely relational, this is not close.

Extensions.

PostGIS, pg_cron, pgvector and the rest of the ecosystem, installable. D1 has no equivalent.

Backups you can reason about.

Daily backups are included on paid plans and the restore path is well trodden, with a decade of Postgres operational practice behind it. D1's Time Travel is younger, even though it costs nothing and reaches back further.

Realtime you do not write.

Subscribe a client to a table and changes arrive, with no server code at all. Pithy's realtime is a Durable Object you design — more control, and more of your afternoon.

Branching without touching git.

You can spin a preview branch straight from their dashboard, schema changes and all, with no repository configuration. Pithy's equivalent starts at a terminal in your project.

Row-level security.

Authorization enforced in the database, so a mistake in one handler cannot leak another tenant's rows. Pithy authorizes per route, which is a weaker guarantee.

The console.

A table editor, a SQL editor, a genuinely good log explorer, and years of polish — all in one place. With Pithy, your data is in the Pithy dashboard and your logs are in Cloudflare's, which is two places to look.

A larger ecosystem.

More tutorials, more integrations, more answers already written down. Pithy is new and that shows.

Support you can buy.

A contract, an SLA and a person to escalate to. Pithy has GitHub issues.

Someone else runs the database.

Sizing, pooling, upgrades and backups are theirs to worry about, and for a team without an operations person that is worth real money.

Cost

A plan is a step. Usage is a slope.

Supabase sells plans; Cloudflare sells usage. That is the whole difference, and which one is cheaper depends entirely on your shape. What is worth understanding is how each behaves as you grow: a plan is predictable until the day it steps, and usage is proportional the whole way.

SupabasePithy
EntryFree plan, $0Cloudflare free tier, $0
First paid stepPro, from $25 per monthWorkers Paid, from $5 per month
Compute$10 per month per project, less $10 of included creditsmetered per request and per CPU millisecond
Second stepTeam, from $599 per monthnone — the same rates keep applying
Egressmetered and billed above the plan allowancenothing. Cloudflare does not charge for egress
A quiet monththe plan price, in fullclose to nothing
Point-in-time recovery$100 a month per 7 days of retention, outside the spend capincluded, 30 days, at no charge
A preview environment per pull requestPro or above, then roughly a cent an hour per branchno fee; you pay Cloudflare for what the branch uses
Ten projectscompute billed per project on top of the planthe same rates, and no per-project floor
Who you paySupabase, for the platform — plus Cloudflare or anyone else you also runCloudflare, directly, at their published rates. Pithy bills nothing

Both vendors set and change their own prices, and these figures were read on 2026-08-18. Supabase's pricing page and Cloudflare's are the authority — not this page. Note that a Supabase plan price is a floor rather than a total: compute is billed per project on top of it.

What it takes to move.

It is a real conversion, and it is worth saying so plainly. D1 is SQLite. Moving from Postgres means giving up extensions, stored procedures and any query that leans on Postgres-specific behavior, and rewriting row-level security as route-level authorization.

If your schema is straightforward and your authorization already lives in application code, that is a few days. If you have PostGIS, materialized views and thirty policies, it is not a migration — it is a rewrite, and Supabase is the better answer.

You can find out for the price of an afternoon.

Add one capability to a Worker and deploy it to your own Cloudflare account. If the shape is wrong you have lost an afternoon; if it is right you have skipped the part of this decision that is guesswork.

Get started All comparisons