Migration guide
Move from Supabase to ɳSelf
ɳSelf runs the same stack: Postgres, a GraphQL API (Hasura), Auth, and S3 storage. The migration tool exports your Supabase project and imports it into a self-hosted ɳSelf instance.
Cost
Supabase Pro starts at $25/mo. ɳSelf on a $6/mo Hetzner VPS + $3.99/mo ɳSelf+ = $10/mo for the same capability.
Ownership
Your Postgres runs on your server. No shared infrastructure, no egress fees, no usage limits.
Extensibility
Add AI, video, messaging, and monitoring plugins without leaving the stack.
Migration steps
Install ɳSelf
# macOS
brew install nself-org/nself/nself
# Linux / WSL
curl -sSL https://install.nself.org | bashCreate a new ɳSelf project
nself init myapp --fast
nself build
nself startYour stack is live at nself urls. Confirm it before migrating data.
Run the migration tool
nself migrate supabase \
--project-ref YOUR_SUPABASE_PROJECT_REF \
--access-token YOUR_SUPABASE_ACCESS_TOKENThe tool pulls your schema, data, auth users, and storage files. It generates an import plan before touching anything. Review the plan and confirm.
Verify the import
nself doctor
nself migrate supabase --verifyThe verify command counts rows, checks auth user count, and confirms storage files match the source. Fix any gaps before cutting over DNS.
Update your app
ɳSelf uses the same Postgres connection string format. For GraphQL, point your client at the new Hasura endpoint. Auth tokens use the same JWT format.
# Old (Supabase)
NEXT_PUBLIC_SUPABASE_URL=https://xyz.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
# New (ɳSelf)
NSELF_GRAPHQL_URL=https://api.yourdomain.com/v1/graphql
NSELF_AUTH_URL=https://auth.yourdomain.com
NSELF_ANON_KEY=eyJ... # from nself env printCut over DNS and cancel Supabase
Point your domain at the new server, run a final nself doctor, and watch Grafana for 24 hours. Once stable, cancel your Supabase plan.
Common questions
Does it migrate my auth users?
Yes. Email/password and OAuth users migrate. Passwords re-hash on next login. Magic link users receive a password-reset email from your new auth server.
What about Supabase Edge Functions?
Edge Functions become Custom Services in ɳSelf. Map each function to a CS_N slot in your config. The migration tool flags functions that need manual work.
Is the Supabase JS client compatible?
The Supabase JS client works against ɳSelf's PostgREST and Auth endpoints with a URL swap. The GraphQL client targets the Hasura endpoint directly and requires no SDK change.
What's the downtime?
Near zero for read traffic. Write downtime is the DNS propagation window (typically 1-5 minutes with a low TTL). The migration tool supports a brief maintenance-mode flag on your app during cutover.