Migrate from Bubble: extract data types into a stack you can compile
A Bubble app is data types, option sets, privacy rules, client and backend workflows, and often plugin bindings glued to Bubble’s runtime. Migration is extracting those types via the Data API or a rehearsed CSV into a destination schema, translating editor assumptions into lockfile CI, and landing on a conventional start command. You keep product behavior; you stop needing Bubble’s GUI and Live assumptions to serve users.
CodeCross LLC calls migrate-from-bubble a data-type-plus-workflow extract: inventory types, option sets, and privacy rules, rehearse a Data API or CSV restore onto a destination schema, and prove login plus one write without the Bubble editor open. Success is users recognized by the same email or unique id after Bubble Live is no longer write authority.
Why a raw Data API dump fails as a cutover
Editor Run cannot fake cutover parity
Not every Bubble app needs a full dump. Every app needs to decide what Bubble owned versus disposable page seed — and how unique ids are recognized on the destination.
A Bubble unique id is treated as enough
Sessions, password hashes, and consent flags need separate treatment. Destination recognition is not a primary-key copy.
Domains move before destination env exists
Stand up destination environments first. Plugin-pane values must not be copied into client bags. Certificates, OAuth, and email senders are one graph.
Rollback is “we still have the Bubble app”
Rollback means Bubble — or the prior write authority — can again accept writes without split-brain. Freeze data-type schema at cutover and time-box reversal.
Parity skips fixtures editor Run never exercised
An old Bubble account, a brand-new signup, edge roles, empty states, file-manager attachments, and deep links.
The Bubble cutover sequence
Inventory data types, rehearse imports, then switch write authority
We will not flip domains to prove velocity. We flip them after a signed editor-Run parity report and a rehearsed rollback to the last known-good Bubble write authority.
01
Classify Bubble things as authoritative, derived, or throwaway
Decide what the database owned versus page seed. Missing classifications surprise you when real Bubble accounts hit the destination.
02
Preserve identity links Bubble Auth issued
Sessions, unique ids, hashes, and consent get their own line. A Bubble user id alone is rarely enough.
03
Rehearse domain and secret cutover before users leave Bubble Live
Sealed Bubble and destination env map. Verify OAuth and email, then rotate plugin keys after the destination can receive Bubble traffic.
04
Sign the editor-Run parity report, then time-box Bubble reversal
Representative accounts, permissions, files, and who decides Bubble is authoritative again. Destination writes Bubble never saw stay reserved for reconciliation.
How to
Migrate from Bubble with a cutover editor Run cannot fake
A Bubble-to-owned transfer of things, secrets, and unique ids. Success is a signed parity report plus a rehearsed rollback.
Step 01
Inventory Bubble and classify every data type
Authoritative, derived, or throwaway. Sessions, password hashes, and consent flags each get a line.
Step 02
Stand up destination environments before domains move
Keep Bubble and destination env names in a sealed map. Plugin-pane values must not land in client bags. Schedule Auth allowlists, email senders, and callbacks as one graph.
Step 03
Build Bubble fixtures editor Run never exercised
Old account, brand-new signup, edge roles, empty states, file-manager attachments, and deep links.
Step 04
Replay Bubble journeys and record the Live cursor
Compare visible outcomes and side effects Bubble triggered (emails, recurring workflows). Freeze data-type schema at cutover. Preserve destination writes Bubble never saw.
Step 05
Kill Bubble’s write role only after the parity report is signed
Quiet cohort monitoring through a traffic rehearsal. Support knows Bubble-era failure modes on the new stack. Time-box reversal so both sides do not mint accounts.
Read next
Proof, the essay, and sibling intents
These pages are already on the site. Use them to pressure-test the bet before a call.
What belongs in the Bubble extract versus what stays behind?
Take data types, option sets, privacy-rule notes, and a written map of API Connector names and run commands. Leave editor caches, local plugin experiments, and unpublished page drafts out of the destination. Capture file-manager or connection requirements separately so CI does not invent schema. Unpublished page experiments that never hit a user need an explicit include-or-drop pass.
How do you turn Bubble editor Run into a destination you can compile?
List data types and workflow names the editor assumed. Pin them in a written schema. Replace “available because Bubble bundled it” plugins with destination libraries. Encode the editor’s start as install, test, and a conventional process. Fail the pipeline if restore only succeeds inside Bubble’s runtime.
How should Data API and Auth cutover work during the extract?
Export secret names from the plugin pane into an env template; mint new values on the destination; never commit editor keys. Point the app at a destination schema (restored or dual-written) and verify rules on a clean runner. Update Auth callbacks that still hardcode bubbleapps.io before domains move. Rotate old pane values after cutover so leaked editor copies die.
Why does “CSV dump the database” without normalization fail on a standard host?
Destination images lack Bubble-bundled plugins the editor hid, start paths assume Bubble’s working directory, editor Run process shape disappears, and secrets arrive empty. Auth still expects bubbleapps.io hostnames. Normalize schema, process model, and env first; then flip. A green editor Run is not a portable build.
Cut over Bubble with a parity report, not hope.
Bring data-type classes, unique ids, and the fixture accounts. We will put domains last — and name the Bubble write authority you roll back to.
“What impressed us most about CodeCross was their ability to deeply understand our vision and translate it into a complete digital solution. Unlike many agencies that just focus on technical delivery, CodeCross approached our project like true partners.”