feature
briven
supabase
database
the one thing the two platforms genuinely agree on.
a real postgresql 18 database, created in seconds. standard wire protocol, any postgres client.
a real postgres database per project. standard wire protocol.
vector search
pgvector 0.8.6 is already switched on when the database is handed to you. nothing to enable.
pgvector is available; you enable the extension on the project.
how apps connect
the biggest architectural difference between the two.
a pooled postgres connection string, or sql over plain http. no client library is required.
postgrest's rest api and the supabase client libraries, or a direct postgres connection.
sql over http
post one statement to /api/v1/sql. it speaks neon's protocol, so a stock @neondatabase/serverless client works unmodified.
postgrest exposes tables and rpc over http; raw sql goes over the postgres wire protocol.
connection pooling
pgbouncer sits in front of every database and is the only thing you connect to. an idle database holds zero connections.
supavisor pools connections in front of every project.
authorization
organisations, custom roles, and a permission per resource and operation, checked on the server before anything runs.
row-level security policies in postgres, driven by jwt claims.
machine access
api keys you can scope to a single database and mark read-only. stored as a sha-256 hash, compared in constant time.
anon and service-role keys, narrowed by row-level security.
audit trail
every action in the organisation is written to an audit log you can read in the dashboard. available on pro and above.
postgres logs and project logs in the dashboard.
file storage
an s3-compatible bucket per database, on the same infrastructure as the database.
supabase storage, built on s3.
realtime
supabase is broader: briven delivers row changes and stops there.
changes pushed to your application as they happen. commit to delivery measured at 11 milliseconds against a 200 millisecond budget.
postgres changes, broadcast and presence — a mature part of the platform.
branching
different shapes: a briven branch is a copy you keep or bin.
copy a database and work in the copy. a 256 mb database was copied in 524 milliseconds, measured, and the copy is independent from the moment it exists. there is no merge back.
database branches for preview environments, on paid plans.
history and undo
a change log inside the database, row by row — who changed what and when. undo one change, a range, or a whole table, and it refuses rather than guessing when the row has been changed again since. starter and above.
nothing per-row built in: you restore a backup, or write your own audit triggers.
restore points
name a moment before you do something frightening and go back to it. going back builds a new database beside the original, and refuses outright if the shape of your tables changed in between.
point-in-time recovery on paid plans, restoring the project itself.
backups
supabase wins the off-site copy and the self-service restore.
a full backup every night plus the write-ahead log archived continuously between them — and the restore has actually been performed on the live server. the backup repository still sits on the same machine as the databases.
managed backups, with point-in-time recovery on paid plans.
auth for your end users
supabase wins this outright.
not available. briven auth signs you in to the briven dashboard; it is not an auth product for your app.
supabase auth: a full end-user identity product with providers, sso and mfa.
pricing
four flat plans — free, starter, pro, enterprise.
free tier, then a monthly plan plus metered compute add-ons.