Skip to main content

Base44 · ZIP/eject-plus-normalization

Migrate from Base44: extract the prompt-to-app into a standard owned deploy

A Base44 project is a prompt history, Vite/React UI, entity schemas, functions, connectors, Auth config, and Base44 built-in hosting glued to Publish App. Migration is pulling ZIP/GitHub export or running `base44 eject`, translating Base44 env into lockfile-based CI, exporting row data separately, and landing on a conventional host. You keep the product behavior; you stop needing Base44’s Publish GUI—and you plan for SDK/backend pieces that still expect Base44 after a naive export.

30 min · senior team · leave with a clear next step

Citation-ready answer

Answer you can cite

CodeCross LLC defines migrate-from-base44 as ZIP/GitHub or base44 eject extraction into standard CI. Operators pull the frontend and ejected backend resources, pin Node and lockfiles, remap secrets for a clean runner, move entity data via CSV, and prove install then build then start without an open Base44 editor. Done when the destination boots from that checkout alone—no Publish App, no Base44-hosted runtime, no Base44 panel for production.

Why a raw Base44 ZIP fails on a standard host

A green Publish App is not a portable, fully owned build

CI images lack runtime the hosted app hid. Auth and entities still call Base44 via app ID. Connectors are not in the ZIP as live credentials. Row data never left Base44.

  • Editor-only junk lands in the remote

    Caches, secret-bearing config files, and prompt notes that never hit disk need an include-or-drop pass. The extract is source, lockfiles, entity schemas, and a written connector map.

  • Install only succeeds when Base44 servers answer

    Replace “available because Publish App” steps with install, Vite build to dist, and a host start. Fail the pipeline if Auth/entity calls you intended to replace still require Base44.

  • Base44 .env gets committed “just this once”

    Export names into a template. Mint new values on the destination. Rotate old Base44 secret values after cutover.

  • Eject copies schemas, not live rows

    Capture table CSV dumps separately. Reconnect or replace connectors by hand. Update Auth callbacks that still hardcode Base44 hostnames before DNS moves.

The extract sequence that actually boots

Pull, pin, remap rows, then prove start without Base44 open

Product behavior stays. Publish App GUI and Base44 backend assumptions leave. The destination is a conventional start command.

01

Take ZIP/GitHub source, lockfiles, schemas, and function entrypoints

Leave Base44 caches and secret-bearing config out. Capture table CSV dumps separately so CI does not invent entity rows.

02

Pin Node and encode Base44’s start path as a CI job

Version files or the base image. Fail if the app only boots when Base44 servers answer Auth/entity calls you intended to replace.

03

Remap env names; restore entity data; reconnect connectors

Never commit Base44 .env. Dual-write or restore rows, then verify the destination database on a clean runner.

04

Prove install → test → build → start with Base44 closed

The destination boots from that checkout alone. Publish App is no longer required for production.

How to

Extract a Base44 tree into standard owned CI

ZIP/eject-plus-normalization. Success is install → test → build → start with no open Base44 editor and no Publish App for production.

  1. Step 01

    Decide what belongs in the extract versus what stays behind

    Take ZIP or GitHub source, lockfiles, entity schema files, function entrypoints via eject, Auth config maps, and a written map of connectors. Leave caches and secret-bearing config out. Capture table CSV dumps separately.

  2. Step 02

    Turn Base44 Publish and env into portable CI

    List VITE_BASE44_* and server secrets Base44 assumed. Pin Node. Replace Publish-only steps with install, Vite build, and a host start or static publish.

  3. Step 03

    Mint destination secrets and remount Auth

    Export names into an env template. Never commit Base44 .env. Update Auth callbacks and CORS that still hardcode Base44 hostnames before DNS moves.

  4. Step 04

    Restore entity rows and reconnect connectors

    Eject copies schemas, not live rows. Restore CSV into the destination database. Reconnect or replace connectors by hand.

  5. Step 05

    Prove the destination boots from checkout alone

    install → test → build → start with the Base44 editor closed. Rotate old Base44 secret values after cutover. Publish App is then optional.

Before you book

Practical answers

Prefer writing? Send project details and we reply within one business day.

What belongs in the Base44 extract versus what stays behind?

Take ZIP or GitHub source, lockfiles, entity schema files, function entrypoints (via eject), Auth config maps, and a written map of connectors. Leave Base44 caches, `.app.jsonc` secrets, and editor-only junk out of the remote. Capture table CSV dumps separately—eject copies schemas, not live rows. Prompt-history notes that never hit disk need an explicit “include or drop” pass.

How do you turn Base44 Publish and env into CI?

List env vars Base44 assumed (`VITE_BASE44_*` and server secrets). Pin Node in the CI image. Replace “available because Publish App” steps with `npm ci` / `pnpm i`, build (often Vite → `dist`), and a host start or static publish. Fail the pipeline if the app only boots when Base44 servers answer Auth/entity calls you intended to replace.

How should secrets, Auth, and data cutover work during the Base44 extract?

Export secret names into an env template; mint new values on the destination; never commit Base44 `.env`. Restore entity data into the destination database; reconnect or replace connectors by hand. Update Auth callbacks and CORS that still hardcode Base44 hostnames before DNS moves. Rotate old Base44 secret values after cutover so leaked panel copies die.

Why does “download the Base44 ZIP” without normalization fail on standard hosts?

CI images lack Base44-injected runtime the hosted app hid; Auth and entities still call Base44 via app ID/base URL; connectors are not in the ZIP as live credentials; row data never left Base44. Normalize install, replace Base44 backend dependencies you are exiting, and env first; then push. A green Base44 Publish App is not a portable, fully owned build.

Boot from checkout—not from the Publish App GUI.

Bring the ZIP or eject and the start command Base44 assumed. We will say whether this is a portable Vite tree — or an app that only runs while Base44 servers answer.

Prefer writing? Send project details on the contact page.

Book a Discovery Call