Retour au blog
GUIDE TECHNIQUE · 14 MIN DE LECTURE

Migrer un projet Supabase vers Aurabase en 1h

Julien Brochard · Head of DevRel· 09 avril 2026

Si vous êtes sur Supabase et que vous lorgnez vers Aurabase, la bonne nouvelle c'est que le plus dur, c'est de choisir. La migration en elle-même prend entre une heure et un weekend selon la taille du projet — et 95% de votre code ne bouge pas.

Chez Aurabase, on s'est donné une contrainte forte dès le design : la surface SDK et les conventions RLS devaient être drop-in compatible avec Supabase. Même createClient(), même .from().select().eq(), mêmes policies SQL Postgres. L'idée : si vous voulez partir, partez — on rend ça trivial. Voici le playbook complet.

#
Audit préalable

Ce qui bouge, ce qui reste

§ 01

Avant de commencer, listez ce qui va changer et ce qui va rester. Spoiler : la majorité reste.

Schéma PostgresIDENTIQUEpg_dump → aura db restore. Extensions, triggers, functions, indexes — tout passe.
Policies RLSIDENTIQUEMême syntaxe. auth.uid(), auth.role(), auth.jwt() fonctionnent tels quels.
SDK JavaScript95% IDENTIQUERemplacez @supabase/supabase-js par @aurabase/client. Même API chainable.
Auth flowsIDENTIQUEsignUp, signInWithPassword, signInWithOAuth, mfa — mêmes noms, mêmes signatures.
Storage APIIDENTIQUEaura.storage.from(bucket).upload(...) · compat S3 · policies RLS transférables.
RealtimeIDENTIQUEchannel().on("postgres_changes", ...) inchangé. Presence + broadcast pareils.
Edge FunctionsADAPTATION MINEUREDeno → WASM. Deno.serve() devient edge.handler(). 15 lignes à toucher max.
DashboardDIFFÉRENTStudio Aurabase · on vous aide à retrouver vos repères.
#
Étape 1

Créer le projet Aurabase cible

§ 02

Créez un projet avec la même région que votre Supabase actuel. Même cluster régional = latence de migration négligeable.

terminal
BASH
# Compte Aurabase + CLI
npm i -g @aurabase/cli
aura login
# Créer le projet (même région que Supabase)
aura project create my-app --region eu-west-3 --plan pro
# Récupérer les clés
aura project keys my-app --format env >> .env.aurabase
#
Étape 2

Dump Supabase, restore Aurabase

§ 03

Un pg_dump standard. Aurabase accepte du SQL Postgres vanilla, pas besoin de transformation intermédiaire.

terminal
BASH
# Récupérer la connection string Supabase depuis leur dashboard
export SUPABASE_DB_URL="postgresql://postgres:...@db.xxx.supabase.co:5432/postgres"
# Dump du schéma public (sans les schémas système Supabase)
pg_dump "$SUPABASE_DB_URL" \
--schema=public \
--no-owner --no-acl \
--format=custom \
-f supabase-dump.pgdump
# Restore dans Aurabase (parallel 8 workers pour les gros dumps)
aura db restore supabase-dump.pgdump --env prod --parallel 8 --confirm
# Regénérer les types TypeScript
aura types gen > src/aurabase.types.ts
Astuce
Pour un projet de 50 GB avec 200 tables, comptez ~25 minutes pour l'étape dump + restore. On'a mesuré en interne avec les bases de démo Supabase.
#
Étape 3

Migrer les utilisateurs et leurs hashes

§ 04

C'est ici que la plupart des migrations coincent ailleurs : il faut forcer tous les users à reset leur mot de passe. Chez nous, non — Supabase et Aurabase utilisent tous deux Argon2id avec les mêmes paramètres par défaut. Les hashes passent tels quels.

migrate-users.sh
BASH
# Export Supabase (nécessite leur service_role_key)
aura migrate export-supabase \
--url $SUPABASE_URL \
--service-key $SUPABASE_SERVICE_ROLE \
--output users.jsonl
# → 42 318 users exported · 1 847 MFA factors · 12 OAuth accounts
# Import dans Aurabase · hashes préservés, MFA conservés
aura auth import users.jsonl --env prod
# → 42 318 imported in 24s · zéro collision email
Info
Les sessions actives côté Supabase ne sont pas portées (impossible techniquement — chaque plateforme signe ses JWT avec sa propre clé). Les users se reconnecteront normalement à leur prochaine visite. Leur mot de passe fonctionne immédiatement.
#
Étape 4

Adapter le code client

§ 05

Une recherche/remplacement suffit pour 95% des cas.

lib/supabase.ts → lib/aurabase.ts
TYPESCRIPT
// AVANT (Supabase)
import { createClient } from '@supabase/supabase-js'
export const supabase = createClient(url, key)
// APRÈS (Aurabase)
import { createClient } from '@aurabase/client'
export const aura = createClient(url, key)
// Le reste du code ne change pas :
await aura.from('posts').select('*').eq('author_id', userId)
#
Étape 5

Adapter les Edge Functions

§ 06

Supabase utilise Deno, Aurabase compile en WASM. L'adaptation est mécanique.

functions/hello/index.ts
TYPESCRIPT
// AVANT (Supabase Deno)
Deno.serve(async (req) => {
const { name } = await req.json()
return new Response(JSON.stringify({ hello: name }))
})
// APRÈS (Aurabase WASM)
import { edge } from '@aurabase/edge'
export default edge.handler(async (req) => {
const { name } = await req.json()
return Response.json({ hello: name })
})
#
Cutover

Bascule DNS et mise en production

§ 07

Deux stratégies possibles. On recommande la première pour 99% des cas.

  1. Cutover direct — changez AURA_URL et AURA_ANON_KEY dans vos env vars, redéployez. Les users se reconnectent, tout fonctionne. C'est ce qu'ont fait 90% de nos migrations.
  2. Dual-write temporaire — écrivez dans Supabase + Aurabase simultanément pendant 48h, vérifiez la cohérence via aura migrate diff, puis coupez Supabase. À privilégier pour les apps critiques.
#
Aide

On est là si ça coince

§ 08

Pour les projets > 100 GB ou avec des contraintes de compliance strictes (HIPAA, PCI), notre équipe fait la migration avec vous. C'est gratuit sur le plan Enterprise, 800€ en one-shot ailleurs.

Demander un accompagnement →
PRÊT À MIGRER ?

Essayez gratuitement pendant que vous lisez.

Créez un projet Aurabase en 60 secondes, importez un dump de test. Vous verrez — c'est trivial.

Créer un projet Guide technique complet
Aucune carte bancaire requise · 500 MB gratuits · 50 000 MAU