Switch from Supabase

Same Postgres, same supabase-js, stronger guarantees.

Import your schema, row-level security, users with their passwords, data and storage in one command. Your app keeps using supabase-js: change the URL and key, and from() and rpc() calls work as before.

What moves

Schema and policies

Tables, views, functions, triggers and RLS policies from the public schema.

Users and passwords

auth.users with their ids and bcrypt hashes, so nobody resets anything.

Every row

Data copied table by table, with a report of anything that failed.

Storage

Buckets and objects, with the service_role key you provide.

Two commands

  1. 1

    Dry run

    Checks the connection, extensions and policies, and writes nothing.

    sov import supabase \
      --db-url 'postgresql://postgres:PASSWORD@db.REF.supabase.co:5432/postgres' \
      --supabase-url https://REF.supabase.co --service-key "$SUPABASE_SERVICE_ROLE_KEY" --dry-run
  2. 2

    Import

    Schema, then users, then data, then storage. Point supabase-js at your Sovaria URL and anon key.

    sov import supabase --db-url '...' \
      --supabase-url https://REF.supabase.co --service-key "$SUPABASE_SERVICE_ROLE_KEY"

Everything has a place

SupabaseSovaria
PostgresPostgres 16 per project, with pgvector and the common extensions
PostgREST and supabase-jsThe same /rest/v1 API: supabase-js keeps working
RLS policiesRLS plus default-deny gateway policies and simulation
GoTrue authAuth with MFA, passkeys, SAML and attestation
StorageStorage buckets, S3-compatible API and signed URLs
Edge FunctionsFunctions in Python, JavaScript, TypeScript or Go
RealtimeChannels, presence, database changes and end-to-end encrypted channels
BranchingEnvironments and API versions, with version history
Firestore-style documentsCollections in the same project (Supabase has none)

Questions

How do my policies change?

Sovaria databases have no anon or authenticated role. A policy TO authenticated becomes TO public with auth.uid() IS NOT NULL added; TO anon policies are reported for you to check.

Do I have to rewrite my app?

No. Change the URL and anon key; supabase-js from() and rpc() calls go to the same REST API shape.

Can I move part of it first?

Yes. --only schema,auth runs parts on their own, and every step can be dry-run first.

Start building on Sovaria

A free project takes a minute. Your data stays behind rules from the first request.