migrate / supabase
supabase + convex-style reactivity, on the same postgres.
supabase exposes postgres directly through postgrest + row-level security; briven puts a typed function layer in front and adds convex-style reactive subscriptions. you keep the postgres you already trust, with proper functions and reactive queries on top.
what you're afraid of
will i lose my data?
no. it's postgres on both ends. pg_dump | pg_restore moves every row to briven without translation. row-counts match exactly.
what happens to my row-level security policies?
they become explicit guards inside your briven functions. instead of `auth.uid() = user_id` in SQL, you write `if (ctx.session.userId !== row.userId) throw forbidden`. you can read the rule in code.
do my edge functions port?
directly. supabase edge functions (Deno) port to briven functions (also Deno-isolate based). the request/response signature is the same shape.
the conceptual mapping
your mental model survives the move. left column: what you call it in supabase. right column: where it lives in briven.
| supabase | briven |
|---|---|
| supabase create table | briven schema DSL → identical postgres tables |
| row-level security policy | explicit guard in the briven function (readable, debuggable) |
| supabase edge functions (Deno) | briven functions (Deno isolates) — same runtime, same imports |
| supabase auth (GoTrue) | Better Auth — email + magic-link + OAuth. user ids preserved. |
| supabase realtime (postgres replication) | briven realtime (LISTEN/NOTIFY + WS). useQuery() hook. |
| supabase storage | briven storage (S3-compatible MinIO under the hood) |
what the migration actually costs
ranked honestly: what comes for free, what we automate, what stays manual.
- free
data move — pg_dump from supabase, pg_restore into briven's data plane. no transformation.
- auto
schema port — the schema is already postgres; we just bring it across.
- auto
edge functions — port directly. same Deno-isolate runtime, same Web standard APIs.
- manual
RLS → function guards — every policy gets rewritten as an explicit check inside the function that replaces the affected query. tedious; mechanical.
- manual
supabase auth → Better Auth — user table copies cleanly. OAuth providers reconfigure. one-time fresh sign-in for password users.
questions you actually have
- will my client-side @supabase/supabase-js calls still work?
- no — you swap that client for @briven/client-react. but the queries you used to write inline as postgrest filters become typed briven functions instead, which is a clarity upgrade.
- what about my supabase storage buckets?
- briven storage is S3-compatible (MinIO). we mirror your buckets one-to-one and rewrite your client-side upload URLs.
- are realtime subscriptions faster on briven?
- comparable. briven uses LISTEN/NOTIFY where supabase uses logical replication. both deliver <100ms updates for typical loads.
- what about pgvector / postgis / other extensions?
- briven's postgres is the same postgres — extensions you used on supabase work on briven if your tier permits. pgvector is enabled by default.
ready to start? no signup needed
leave us your email and we'll reach out within one business day. your supabase stays untouched the entire time.
already got a briven account?
jump straight into the in-product wizard for a more detailed intake form — you can save progress and track status from your dashboard.