Von Fire­ba­se zu Su­pa­ba­se mi­grie­ren: Der har­te Teil ist das Da­ten­mo­dell

Wer von Fire­ba­se zu Su­pa­ba­se mi­griert, un­ter­schätzt fast im­mer den­sel­ben Block: nicht Auth, nicht Sto­rage, son­dern das Re­mo­de­ling de­nor­ma­li­sier­ter Fires­to­re-Coll­ec­tions in nor­ma­li­sier­te Post­gres-Ta­bel­len mit RLS. Eine ehr­li­che Ein­ord­nung, wo Zeit und Geld wirk­lich ver­bren­nen – und wel­che Apps gar nicht erst mi­grie­ren soll­ten.
9 Min. LesezeitMatthias RadscheitMatthias Radscheit
Happycodingde-DE

TL;DR

Bei der Migration von Firebase zu Supabase sind Auth und Storage Routine: Passwort-Hashes übernimmt Supabase nativ, Dateien ziehen in zwei Phasen um. Teuer wird das Daten-Remodeling – denormalisierte Firestore-Collections in normalisierte Postgres-Tabellen mit Row Level Security zu überführen und Realtime-Listener neu zu denken.

  • Auth und Storage sind die einfachen Teile: Supabase Auth verifiziert Firebase-scrypt-Hashes nativ, kein Passwort-Reset für Nutzer nötig.
  • Der eigentliche Aufwand steckt im Datenmodell: Der offizielle Guide kopiert eine Collection in eine Tabelle und legt verschachtelte Felder in jsonb ab – echtes relationales Remodeling bleibt Handarbeit.
  • Firestore Security Rules müssen komplett als Row Level Security in SQL neu geschrieben werden – pfadbasierte Regeln lassen sich nicht 1:1 übersetzen.
  • Firestore-Realtime mit Offline-Cache hat kein direktes Supabase-Pendant: Client-Caching und Conflict-Resolution baut man selbst.
  • Steckt die App tief in FCM, Crashlytics, Remote Config oder ML Kit, ist eine Voll-Migration oft teurer als der Nutzen – dann ist Teilmigration oder bewusstes Bleiben die ehrlichere Entscheidung.

Die meis­ten Mi­gra­ti­ons­an­lei­tun­gen ver­kau­fen den fal­schen Teil als das Pro­blem. Auth und Sto­rage von Fire­ba­se nach Su­pa­ba­se um­zu­zie­hen ist Rou­ti­ne – plan­bar, do­ku­men­tiert, in ei­nem Sprint er­le­digt. Was Pro­jek­te sprengt, ist das Da­ten­mo­dell.

Wer die­sen Ar­ti­kel liest, hat die Grund­satz­ent­schei­dung meist schon ge­trof­fen: weg von Goog­le Cloud, hin zu Post­gres und ei­nem self-host­ba­ren Stack. Die Grün­de da­für – Da­ten­sou­ve­rä­ni­tät, Kos­ten­kur­ve, Ven­dor-Lock-in – habe ich an an­de­rer Stel­le aus­führ­lich be­han­delt. Hier geht es um die Me­cha­nik. Was tat­säch­lich pas­siert, wenn man von Fire­ba­se zu Su­pa­ba­se mi­griert, in wel­cher Rei­hen­fol­ge der Schmerz auf­tritt, und wo das Bud­get ver­brennt, wenn man un­vor­be­rei­tet star­tet.

Wer von Fire­ba­se zu Su­pa­ba­se mi­griert, kämpft ge­gen das Da­ten­mo­dell

Fires­to­re und Post­gres ha­ben grund­ver­schie­de­ne Welt­bil­der. Fires­to­re ist eine do­ku­men­ten­ori­en­tier­te NoS­QL-Da­ten­bank, die für Lese-Per­for­mance op­ti­miert wird, in­dem man Da­ten du­pli­ziert. Man mo­del­liert nicht nach En­ti­tä­ten und Be­zie­hun­gen, son­dern nach Zu­griffs­mus­tern: Was zeigt die­ser Screen? Ge­nau das lan­det in ei­nem Do­ku­ment, red­un­dant, de­nor­ma­li­siert, oft mehr­fach. Eine Be­stel­lung ent­hält die Lie­fer­adres­se als Ko­pie, der Nut­zer­na­me steht in fünf Coll­ec­tions, weil ein Join teu­er wäre.

Post­gres dreht das um. Eine re­la­tio­na­le Da­ten­bank lebt von Nor­ma­li­sie­rung: eine Wahr­heit pro Fakt, ver­knüpft über Fremd­schlüs­sel. Der Schritt von Fires­to­re zu Post­greS­QL ist des­halb kein Da­ten­trans­fer, son­dern eine Mo­del­lie­rungs­auf­ga­be. Man über­setzt nicht Zei­len, man ent­wirft ein Sche­ma neu. Wer mit der Ar­chi­tek­tur von Su­pa­ba­se noch nicht ver­traut ist, fin­det die Grund­la­gen in mei­nem Über­blick, was Su­pa­ba­se tech­nisch aus­macht.

Der of­fi­zi­el­le Mi­gra­ti­ons-Gui­de macht das ehr­lich sicht­bar. Er be­schreibt das Werk­zeug als et­was, das „den ge­sam­ten In­halt ei­ner ein­zel­nen Fires­to­re-Coll­ec­tion in eine ein­zel­ne Post­gres-Ta­bel­le ko­piert" (Su­pa­ba­se-Do­ku­men­ta­ti­on zur Fires­to­re-Da­ten­mi­gra­ti­on). Drei Node-Skrip­te er­le­di­gen den Ex­port, die JSON-Kon­ver­tie­rung und den Im­port. Ver­schach­tel­te Fel­der lan­den per De­fault in ei­ner jsonb-Spal­te. Das funk­tio­niert – aber es pro­du­ziert Post­gres-Ta­bel­len, die in­nen noch wie Fires­to­re aus­se­hen. Eine Coll­ec­tion, eine Ta­bel­le, der Rest als JSON-Blob.

Das ist kein re­la­tio­na­les Mo­dell. Es ist Fires­to­re in ei­nem Post­gres-Kos­tüm. Wer es da­bei be­lässt, ver­schenkt ge­nau die Stär­ken, für die er mi­griert: Joins, Cons­traints, In­te­gri­tät, ech­te Ab­fra­gen. Das sau­be­re Re­mo­de­ling – Coll­ec­tions auf­bre­chen, Be­zie­hun­gen ex­pli­zit ma­chen, jsonb dort be­hal­ten, wo es Sinn er­gibt, und nur dort – ist Hand­ar­beit und Kopf­ar­beit. Und es ist der Pos­ten, an dem die Stun­den auf­lau­fen.

Fire­ba­se Auth Mi­gra­ti­on: we­ni­ger dra­ma­tisch als ge­dacht

Die gute Nach­richt, die in den meis­ten Dis­kus­sio­nen un­ter­geht: Die Fire­ba­se Auth Mi­gra­ti­on ist kein Bruch für die Nut­zer. Nie­mand muss sein Pass­wort zu­rück­set­zen, wenn man es rich­tig macht.

Der Grund liegt in der Ar­chi­tek­tur von Su­pa­ba­se Auth, in­tern Go­True. Go­True ve­ri­fi­ziert Fire­ba­se-scrypt-Hash­es na­tiv über ei­nen Dis­patcher, der am $fbscrypt$-Pre­fix er­kennt, wel­ches Hash-Ver­fah­ren ein ge­spei­cher­tes Pass­wort ver­wen­det – ne­ben bcrypt und Ar­gon2. Prak­tisch heißt das: Man ex­por­tiert die Nut­zer aus Fire­ba­se, im­por­tiert sie samt Hash, und die An­mel­dung funk­tio­niert mit dem be­stehen­den Pass­wort wei­ter. Beim nächs­ten er­folg­rei­chen Log­in kann Su­pa­ba­se in­tern auf bcrypt um­stel­len, den De­fault für neue Pass­wör­ter.

Der Ab­lauf ist me­cha­nisch. Zwei Skrip­te aus dem Com­mu­ni­ty-Too­ling fire­ba­se-to-su­pa­ba­se er­le­di­gen die Ar­beit: ei­nes ex­por­tiert die User als JSON, ei­nes im­por­tiert sie. Wich­tig da­bei: Man muss vier SCRYPT-Pa­ra­me­ter aus der Fire­ba­se-Con­so­le ko­pie­ren – base64_si­gner_key, base64_salt_se­pa­ra­tor, rounds und mem_cost. Ohne die­se vier Wer­te kann Go­True die Hash­es nicht ve­ri­fi­zie­ren.

Ge­nau hier sitzt der ein­zi­ge re­le­van­te Fall­strick der Auth-Mi­gra­ti­on. Es gibt ei­nen do­ku­men­tier­ten Bug, bei dem falsch im­por­tier­te Hash­es mit lee­rem en­cryp­t­ed_pass­word-Feld in der Da­ten­bank lan­den. Das Er­geb­nis: Je­der Log­in schlägt fehl, ob­wohl die Nut­zer schein­bar vor­han­den sind. Der Fix ist der kor­rek­te $fbscrypt$-Im­port-Pfad. Wer den of­fi­zi­el­len Pfad nutzt und vor­her mit ei­nem Test­nut­zer prüft, trifft das Pro­blem gar nicht erst. Auth ist plan­bar, wenn man es plant – nicht weil es tri­vi­al ist, son­dern weil der Weg voll­stän­dig do­ku­men­tiert und das Ver­hal­ten de­ter­mi­nis­tisch ist. Wer statt Pass­wort-Log­in auf ei­nen ei­ge­nen Iden­ti­ty-Pro­vi­der set­zen will, soll­te par­al­lel die Key­cloak-Op­ti­on als Auth-Lay­er prü­fen.

Ein Hin­weis zum Too­ling: fire­ba­se-to-su­pa­ba­se ist ein Com­mu­ni­ty-Repo, nicht Su­pa­ba­se-Core. Es deckt Auth, Fires­to­re, Sto­rage und Func­tions ab, wird aber com­mu­ni­ty-ge­tra­gen ge­pflegt, nicht als ma­na­ged Pro­dukt. Für ei­nen Pro­duk­tiv-Um­zug heißt das: Skrip­te vor­her le­sen, in ei­ner Sta­ging-Um­ge­bung durch­spie­len, nicht blind auf der Live-Da­ten­bank aus­füh­ren.

Fire­ba­se Sto­rage Mi­gra­ti­on und die Sa­che mit den pri­va­ten Bu­ckets

Die Fire­ba­se Sto­rage Mi­gra­ti­on folgt ei­nem simp­len Zwei-Pha­sen-Mus­ter: her­un­ter­la­den, hoch­la­den. Da­tei­en aus Fire­ba­se Sto­rage ex­por­tie­ren, in Su­pa­ba­se-Bu­ckets schrei­ben. Bei gro­ßen Be­stän­den ar­bei­tet man mit Pa­gi­na­ti­on und Bat­ches, sonst läuft man in Spei­cher- oder Time­out-Gren­zen.

Der eine Punkt, der Teams über­rascht: Neue Su­pa­ba­se-Bu­ckets sind per De­fault pri­vat. Bei Fire­ba­se re­gelt der Zu­griff oft eine Se­cu­ri­ty Rule, und vie­les ist fak­tisch öf­fent­lich les­bar. Zieht man Da­tei­en nach Su­pa­ba­se und ver­gisst, die Zu­griffs­re­geln ex­pli­zit zu set­zen, sind plötz­lich alle Ava­tare, Vor­schau­bil­der und PDFs nicht mehr er­reich­bar – oder, beim um­ge­kehr­ten Feh­ler, öf­fent­lich, wo sie es nicht sein soll­ten. Das ist kein tech­ni­sches Pro­blem, son­dern eine Check­lis­ten-Fra­ge. Man ent­schei­det pro Bu­cket be­wusst: pri­vat mit si­gnier­ten URLs oder öf­fent­lich. Ge­nau das ist der Si­cher­heits­ge­winn, wenn man ihn nutzt.

Sto­rage ist da­mit, wie Auth, ein ge­lös­tes Pro­blem. Auf­wand: über­schau­bar und li­ne­ar zur Da­ten­men­ge. Ri­si­ko: ge­ring, so­lan­ge man die De­fault-Pri­vat­heit kennt.

Mi­gra­ti­on Fall­stri­cke: Se­cu­ri­ty Ru­les und Re­al­time

Die wah­ren Mi­gra­ti­on Fall­stri­cke ver­ste­cken sich an zwei Stel­len – und bei­de hän­gen am Kon­zept, nicht am Trans­fer.

Fires­to­re Se­cu­ri­ty Ru­les sind pfad­ba­siert. Man schreibt Re­geln ent­lang der Do­ku­ment­pfa­de, in ei­ner ei­ge­nen DSL, die Zu­griff je nach re­quest.auth und Do­ku­ment­in­halt er­laubt oder ver­wei­gert. In Su­pa­ba­se über­setzt sich das in Row Le­vel Se­cu­ri­ty: SQL-Po­li­ci­es pro Ta­bel­le, ge­trennt nach SEL­ECT, IN­SERT, UP­DATE und DE­LE­TE. Das ist kein Su­chen-und-Er­set­zen. Die pfad­ba­sier­te Lo­gik muss als re­la­tio­na­le Be­din­gung neu ge­dacht wer­den – „darf Nut­zer X die­ses Do­ku­ment se­hen" wird zu „wel­che Zei­len die­ser Ta­bel­le gibt die Po­li­cy für auth.uid() frei".

Der Ge­winn ist be­trächt­lich, wenn man ihn ver­steht. RLS fil­tert nicht nur di­rek­te Ab­fra­gen, son­dern auch Re­al­time-Sub­scrip­ti­ons au­to­ma­tisch mit. Eine kor­rekt ge­schrie­be­ne Po­li­cy schützt da­mit den Read-Zu­griff über alle Ka­nä­le hin­weg – ein ar­chi­tek­to­ni­scher Vor­teil, den Fires­to­re-Ru­les in die­ser Form nicht bie­ten. War­um Row Le­vel Se­cu­ri­ty mehr als ein Si­cher­heits­fea­ture ist und wie man Po­li­ci­es sau­ber struk­tu­riert, habe ich in ei­nem ei­ge­nen Ar­ti­kel über RLS als Game Ch­an­ger be­schrie­ben. Für die Mi­gra­ti­on gilt: Plant Zeit ein, die kom­plet­te Re­gel­lo­gik neu zu schrei­ben und zu tes­ten. Das ist kein Ne­ben­bei-Task.

Der zwei­te kon­zep­tio­nel­le Bruch ist Re­al­time. Fires­to­res onS­napshot ist mehr als ein Live-Up­date: Es bringt ei­nen lo­ka­len Off­line-Cache und Con­flict-Re­so­lu­ti­on mit, die App funk­tio­niert ohne Netz wei­ter und syn­chro­ni­siert spä­ter. Su­pa­ba­se Re­al­time streamt Post­gres-WAL-Än­de­run­gen über Web­So­ckets (Do­ku­men­ta­ti­on zu Post­gres Ch­an­ges) – schnell und sau­ber, aber ohne na­ti­ve Off­line-Per­sis­tenz. Wer Fires­to­res Off­line-Ver­hal­ten ge­braucht hat, baut das Cli­ent-Caching selbst, etwa mit Tan­Stack Que­ry. Für eine klas­si­sche Web-App ist das oft kein The­ma. Für eine off­line-first Mo­bi­le-App ist es ein ei­ge­ner Im­ple­men­tie­rungs­block, der die Mi­gra­ti­on spür­bar ver­teu­ert.

Wie tief steckt die App im Fire­ba­se-Öko­sys­tem?

An die­ser Stel­le muss ich die Ge­gen­po­si­ti­on fair be­nen­nen, weil sie in vie­len Fäl­len recht hat. Nutzt eine App nur Fires­to­re, Fire­ba­se Auth und Sto­rage, ist der Um­zug ein klar um­ris­se­nes Pro­jekt. Sitzt sie aber tief im Fire­ba­se-Mo­bi­le-Öko­sys­tem, än­dert sich die Rech­nung grund­le­gend.

FCM für Push-Be­nach­rich­ti­gun­gen, Crash­ly­tics für Crash-Re­port­ing, Re­mo­te Con­fig für Fea­ture-Flags, ML Kit für On-De­vice-Mo­del­le, Fire­ba­se Ana­ly­tics – für die­se Diens­te gibt es kein di­rek­tes Su­pa­ba­se-Pen­dant. Su­pa­ba­se hat kei­nen ei­ge­nen Push-Ser­vice; Push läuft wei­ter über FCM oder APNs, an­ge­sto­ßen aus Edge Func­tions. Die Mi­gra­ti­on ent­fernt die FCM-Ab­hän­gig­keit also nicht, sie ver­schiebt nur, von wo aus man sie auf­ruft. Crash­ly­tics, Re­mo­te Con­fig und ML Kit ha­ben kein Ge­gen­stück – man er­setzt sie über Dritt­an­bie­ter wie Sen­try oder be­hält für die­se Tei­le schlicht Fire­ba­se.

Das ist der ehr­li­che Kern des Ziel­kon­flikts: Je mehr eine App die­se Mo­bi­le-spe­zi­fi­schen Bau­stei­ne nutzt, des­to wei­ter ent­fernt sich die Mi­gra­ti­on vom rei­nen Da­ten­bank-Wech­sel. Aus „Fires­to­re zu Post­greS­QL" wird dann „Fires­to­re zu Post­greS­QL plus FCM neu ver­drah­ten plus Crash­ly­tics er­set­zen plus Re­mo­te Con­fig nach­bau­en". Die­se Pos­ten muss man ein­zeln be­wer­ten, be­vor man ein Bud­get nennt. Eine Teil­mi­gra­ti­on – Da­ten­bank nach Su­pa­ba­se, Mo­bi­le-Te­le­me­trie bei Fire­ba­se – ist in sol­chen Fäl­len oft die wirt­schaft­lich sau­be­re Lö­sung, kein Kom­pro­miss aus Schwä­che.

Was eine Mi­gra­ti­on rea­lis­tisch kos­tet

Zah­len ohne Kon­text sind wert­los, des­halb der Rah­men vor­weg. Eine sau­be­re Erst­im­ple­men­tie­rung ei­nes self-hos­ted Su­pa­ba­se-Stacks – Set­up, In­te­gra­ti­on, Se­cu­ri­ty, Test­ing – liegt er­fah­rungs­ge­mäß bei ein­ma­lig 5.000 bis 20.000 Euro Ent­wick­lungs­auf­wand. Eine Mi­gra­ti­on kommt oben­drauf und ver­teilt sich höchst un­gleich.

Auth und Sto­rage sind die güns­ti­gen Blö­cke: do­ku­men­tiert, de­ter­mi­nis­tisch, in Ta­gen er­le­digt. Der Da­ten­trans­fer selbst – Skrip­te lau­fen las­sen, Coll­ec­tions ko­pie­ren – ist eben­falls über­schau­bar. Was die Rech­nung treibt, ist das, wor­über nie­mand gern spricht: das Re­mo­de­ling des Da­ten­mo­dells, das Neu­schrei­ben der Se­cu­ri­ty Ru­les als RLS und, falls re­le­vant, der Nach­bau von Re­al­time-Off­line-Ver­hal­ten und Fire­ba­se-Mo­bi­le-Fea­tures. Bei ei­nem Misch­satz von rund 120 Euro pro Ent­wick­ler­stun­de ent­schei­det die Kom­ple­xi­tät des Da­ten­mo­dells, ob eine Mi­gra­ti­on im un­te­ren oder obe­ren Be­reich der Span­ne lan­det.

Der stra­te­gi­sche Punkt da­hin­ter: Die lau­fen­den Kos­ten ei­nes self-hos­ted Stacks sin­ken über die Zeit, wäh­rend die Kos­ten von Ma­na­ged Ser­vices mit dem Pro­jekt­er­folg stei­gen. Eine Mi­gra­ti­on ist eine Ein­mal­in­ves­ti­ti­on ge­gen eine Kos­ten­kur­ve, die sich um­kehrt. Wie sich das über drei Jah­re rech­net und wel­che Be­triebs­kos­ten rea­lis­tisch sind, be­hand­le ich im TCO-Ver­gleich für Su­pa­ba­se in Pro­duk­ti­on. Wer die stra­te­gi­sche Ge­samt­lo­gik hin­ter dem Wech­sel sucht – war­um Su­pa­ba­se für DACH-Or­ga­ni­sa­tio­nen eine ernst­haf­te Sou­ve­rä­ni­täts-Op­ti­on ist –, fin­det sie auf un­se­rer Su­pa­ba­se-Über­sichts­sei­te.

Man­che Apps soll­ten nicht mi­grie­ren

Jetzt der un­be­que­me Teil, den ich of­fen sage, ob­wohl hap­py­co­ding an Mi­gra­tio­nen ver­dient. Nicht jede Fire­ba­se-App ge­hört nach Su­pa­ba­se. Man­che soll­ten ge­nau dort blei­ben, wo sie sind.

Lebt eine App über­wie­gend von Fire­ba­se-spe­zi­fi­schen Mo­bi­le-Fea­tures – Push, Crash­ly­tics, Re­mo­te Con­fig, ML Kit, On-De­vice-Ma­gie – und steht kei­ne ech­te Sou­ve­rä­ni­täts- oder Kos­ten­an­for­de­rung da­hin­ter, dann ist eine Mi­gra­ti­on eine teu­re Be­we­gung ohne Ziel. Man tauscht eine funk­tio­nie­ren­de Ar­chi­tek­tur ge­gen eine an­de­re, baut die Hälf­te des Fire­ba­se-Öko­sys­tems über Um­we­ge nach und zahlt da­für Ent­wick­lungs­bud­get, das an kei­ner Stel­le ei­nen mess­ba­ren Vor­teil er­zeugt. Man mi­griert dann für ein Ge­fühl, nicht für eine An­for­de­rung.

Der ehr­li­che Test be­steht aus zwei Fra­gen. Ers­tens: Gibt es ei­nen kon­kre­ten Trei­ber – DSGVO-Druck, ein Da­ten­sou­ve­rä­ni­täts-Man­dat vom Vor­stand, eine Fires­to­re-Kos­ten­kur­ve, die mit dem Er­folg ex­plo­diert? Die Da­ten­schutz-Di­men­si­on habe ich se­pa­rat auf­ge­ar­bei­tet, denn auch Goog­le bleibt als US-Kon­zern dem CLOUD Act un­ter­wor­fen, trotz EU-Spei­cher­ort – nach­zu­le­sen in mei­nem Bei­trag über Da­ten­schutz als stra­te­gi­sche Ent­schei­dung. Zwei­tens: Be­wegt sich die App über­wie­gend auf der Da­ten­ebe­ne, oder hängt ihr Wert an Mo­bi­le-spe­zi­fi­scher Fire­ba­se-In­fra­struk­tur? Sitzt der Wert in den Da­ten und gibt es ei­nen Trei­ber, lohnt die Mi­gra­ti­on fast im­mer. Hängt der Wert an Fire­ba­se-only-Fea­tures und fehlt der Trei­ber, ist Blei­ben die pro­fes­sio­nel­le Ant­wort.

Was ich Ent­schei­dern rate

Be­han­deln Sie die Mi­gra­ti­on nicht als Da­ten­trans­fer, son­dern als Re-Ar­chi­tek­tur Ih­res Da­ten­mo­dells – denn ge­nau das ist sie. Auth, Sto­rage und der rei­ne Ex­port sind ge­lös­te Pro­ble­me; wer sie als Haupt­ri­si­ko ein­plant, plant am Ri­si­ko vor­bei. Das Geld und die Zeit flie­ßen ins Re­mo­de­ling von Fires­to­re-Coll­ec­tions zu nor­ma­li­sier­ten Post­gres-Ta­bel­len, ins Über­set­zen der Se­cu­ri­ty Ru­les in Row Le­vel Se­cu­ri­ty und in al­les, was am Fire­ba­se-Mo­bi­le-Öko­sys­tem hängt.

Be­vor ir­gend­ein Skript läuft, ge­hört eine ehr­li­che Be­stands­auf­nah­me auf den Tisch: Wie tief steckt die App im Öko­sys­tem, wie ver­schach­telt ist das Da­ten­mo­dell, gibt es ei­nen stra­te­gi­schen Trei­ber jen­seits von „Post­gres klingt bes­ser". Fällt die­se Prü­fung klar aus, ist die Mi­gra­ti­on eine der sau­bers­ten In­ves­ti­tio­nen in tech­no­lo­gi­sche Sou­ve­rä­ni­tät, die man ma­chen kann. Fällt sie un­klar aus, ist die mu­ti­ge­re Ent­schei­dung, nicht zu mi­grie­ren – und das Bud­get dort ein­zu­set­zen, wo es ei­nen ech­ten Un­ter­schied macht.

Häufige Fragen

Müssen Nutzer nach der Migration von Firebase zu Supabase ihr Passwort zurücksetzen?
Nein. Supabase Auth (GoTrue) verifiziert Firebase-scrypt-Hashes nativ über einen $fbscrypt$-Prefix-Dispatcher. Werden die vier Firebase-Hash-Parameter (base64_signer_key, base64_salt_separator, rounds, mem_cost) korrekt aus der Firebase-Console exportiert und importiert, melden sich Nutzer mit ihrem bestehenden Passwort an. Bei falschem Import-Pfad landen Hashes mit leerem encrypted_password und der Login schlägt fehl – ein dokumentierter Fallstrick.
Was ist der schwierigste Teil einer Firebase-zu-Supabase-Migration?
Das Daten-Remodeling. Firestore-Collections sind denormalisiert und für Read-Optimierung dupliziert; Postgres lebt von normalisierten, relational verknüpften Tabellen. Der offizielle Guide flattet eine Collection in eine Tabelle und legt verschachtelte Felder in jsonb ab. Ein sauberes relationales Modell mit Fremdschlüsseln und Row Level Security entsteht daraus nicht automatisch – das ist Handarbeit und der größte Kostenblock.
Wann sollte man NICHT von Firebase zu Supabase migrieren?
Wenn die App tief im Firebase-Mobile-Ökosystem steckt – FCM Push, Crashlytics, Remote Config, ML Kit, Analytics – und keine echte Souveränitäts- oder Kostenanforderung besteht. Diese Dienste haben kein direktes Supabase-Pendant, müssen also separat ersetzt oder über Drittanbieter abgedeckt werden. Ohne strategischen Treiber verbrennt die Migration Budget für ein Gefühl statt für einen messbaren Vorteil.
Lässt sich Firestore-Realtime mit Offline-Sync auf Supabase übertragen?
Nicht 1:1. Supabase Realtime streamt Postgres-WAL-Änderungen über WebSockets, bietet aber keine native Offline-Persistenz und Conflict-Resolution wie Firestores onSnapshot mit lokalem Cache. Das Client-seitige Caching baut man selbst, etwa mit TanStack Query. Für viele Web-Apps ist das unkritisch; für offline-first Mobile-Apps ist es ein eigener Implementierungsblock, den man früh einplanen muss.

Quellen

Ähnliche Artikel

Offen für ausgewählte Projekte

Lassen Sie uns über Ihr Projekt sprechen

Bu­chen Sie ei­nen un­ver­bind­li­chen Ter­min, schrei­ben Sie uns eine E-Mail oder nut­zen Sie das For­mu­lar – wir freu­en uns auf Ihre Nach­richt.

150+
Abgeschlossene Projekte
15
Jahre Erfahrung
8
Senior‑Level Teammitglieder