Base44 documents two on-disk layouts, and they say different things about your entity schemas. The Code tab and GitHub 2-way sync layout puts entities/ and functions/ at the top level, and its project-structure page carries a Note: “Entities: When using GitHub 2-way integration, entities are managed in Base44 and are not included in your local repository.” The CLI layout, the one base44 eject produces, puts entity schemas, functions and configuration under base44/, and Base44’s eject page says “Your entity schemas are copied to the new project, but data is not.” Both pages are right about their own layout. Neither layout gives you the rows.
Base44 code export works four ways: a ZIP button, two-way GitHub sync, the base44 eject CLI command, and copying files out of the Code tab. ZIP and GitHub need the Builder plan or higher. What comes out is a React app plus a directory of declaration files. What never comes out is your data, or a backend that runs elsewhere.
This page covers getting the code out and reading what you got. Whether you should leave at all, what rebuilding the backend on your own stack costs, and whether the other AI builders let you export anything in the first place are separate questions for separate pages. So is an attempt to get a Base44 app onto phones.
The four ways to get your code out of Base44
Base44’s quick-start guide answers the download question in one sentence: “Yes, you can export your app’s code as a ZIP file or to GitHub on a Builder plan or higher.” That covers two routes. The other two live in the developer docs and behave differently enough to matter.
| Route | Plan needed | What you get | The door it closes |
|---|---|---|---|
| Export project as ZIP | Builder or higher | A one-time snapshot of the code, downloaded from the Code view | None. Nothing syncs back, and nothing changes inside Base44 |
| GitHub 2-way sync | Builder or higher | A live repository on branch main, synced both directions | Three, listed below. Base44’s own page calls the connection permanent |
base44 eject CLI | Not stated on the eject page | A new Base44 project with its own app ID, plus the code locally | Your data. The new project starts empty |
| Copy from the Code tab | Not stated in the Code tab docs | Whatever you select and paste, file by file | None, and nothing syncs either way |
On Free and Starter there is no ZIP button and no GitHub connection. Base44’s pricing page puts Github integration at Builder, $50 a month or $40 a month billed annually, checked 15 August 2026. Builder is also the first tier with backend functions, so below it there is usually no server-side code to export. What each Base44 plan costs has the per-tier table.
The free route comes with a caveat. Base44’s Code tab documentation states no plan requirement and no download button, and the pricing page lists “In-app code edits” starting at Starter, not at Free. Whether you can open the Code tab on the free plan and copy files out of it is not something Base44’s own pages confirm today, so treat manual copying as a Starter-and-up fallback.
What code does Base44 actually give you
Base44 writes a standard React application on Vite, with Tailwind, your screens as files under src/pages, and one file that talks to the backend.
Base44’s project-structure page puts package.json, vite.config.js, tailwind.config.js and index.html at the root and states that “Base44 apps are standard React apps built with Vite”. The public example used below carries src/api/base44Client.js, a short module whose whole job is to build one createClient from an app ID, a token and a base URL.
The part that is not a normal React app is the base44/ directory the CLI layout produces. Base44’s backend project-structure page lists what belongs there: config.jsonc, .app.jsonc, a .types folder, then agents/, agent-skills/, auth/, connectors/, entities/ and functions/. Those are declarations. They describe the app to Base44’s runtime and they are not the runtime.
Connecting GitHub to Base44, and the doors it closes
Yes, you can connect GitHub to Base44, and it is the route most people mean when they ask about exporting. Base44’s GitHub integration page states the terms plainly: the sync requires “the Builder plan or higher”, only an app owner can make the first connection, the branch has to be named main, and “There’s no option to manually push updates from your Base44 app to GitHub.” Changes travel back by committing to main. To run the clone locally you supply VITE_BASE44_APP_ID and VITE_BASE44_APP_BASE_URL in an env file, because that code still talks to Base44’s servers.
Three things stop being reversible once you connect.
- The connection itself. The page states: “GitHub sync is permanent. You can’t disconnect or transfer the project back to Base44.”
- Your earlier version history. “After you connect GitHub to your app, you cannot use Version History to revert to versions from before the GitHub integration.” Only what is in the repository is restorable after that.
- The repository name. “After disconnecting, you cannot reconnect to the same repository.”
That same page documents the click path for disconnecting: Code tab, GitHub, More Actions, Disconnect, about thirty seconds. So “permanent” reads as meaning the project cannot be pulled back into Base44’s editor-only mode, rather than that the link cannot be cut. Ask support which reading applies to your account before you rely on either one.
Your backend functions come out as files. The backend does not.
Base44 backend functions are custom server-side code, yours or the AI’s, that runs off the browser so it can hold secrets and call other services. The documented CLI layout includes them as real TypeScript files. They still will not run anywhere but Base44 without a rewrite.
Opening one shows why the files travel and the behavior does not. This is the top of base44/functions/bookingAutoReply/entry.ts in one public Base44 export, read on 15 August 2026:
import { createClientFromRequest } from 'npm:@base44/sdk@0.8.23';
Deno.serve(async (req) => {
try {
const base44 = createClientFromRequest(req);
const payload = await req.json();
Further down, the same file reads data with await base44.asServiceRole.entities.Contact.filter({ name: booking.client_name }) and sends mail through base44.asServiceRole.integrations.Core.SendEmail. Three dependencies are baked into those six lines: a Deno runtime, an SDK pulled from npm at a pinned version, and a service-role client whose database is Base44’s. Move that file to a normal Node server and it does not start. Move it to a normal Postgres and it has nothing to query.
Base44’s backend functions documentation fills in the rest: functions “run on Deno”, each gets an endpoint at https://<your-app-domain>/functions/<function-name>, “Each project supports a maximum of 50 backend functions”, and execution stops at five minutes.
What the export leaves behind
- Your data. Entity schemas come out as JSON Schema. Records do not. To get the rows you export table by table from the app dashboard: Data, select the table, More Actions, Export, which Base44’s data documentation says “downloads as a CSV file”. One table per download.
- Your users and their sign-in. Authentication is a Base44 service. The documented CLI layout can carry an
auth/config.jsoncdeclaration, not the user accounts themselves. - The built-in integrations. Base44’s integrations page lists Invoke LLM, SendEmail, UploadFile, GenerateImage and ExtractDataFromUploadedFile, and says they “do not require a paid plan, extra setup, or separate API keys”. That is Base44 paying the model, mail and storage bills. Off the platform, each one becomes an account you open and a bill you pay.
- Your connectors. A connector file describes a connection without being one. The whole
base44/connectors/googlecalendar.jsoncfile in the public example above is eight lines: atypeand three OAuth permissions. No token, no refresh, no account. Connectors also need Builder or higher. - Your secrets. The credentials your functions use sit on Base44’s side and have to be reissued wherever you land.
- Enforcement of your permission rules. The rules travel as declarations; the thing that applies them on every request is Base44’s runtime. Whether Base44 is safe covers where those rules are set and what they do.
The CLI route loses the data too, and says so. Base44’s eject documentation states that base44 eject “creates a new backend on Base44 with its own app ID and downloads your code locally”, and that “Your entity schemas are copied to the new project, but data is not”. Ejecting moves you to a different Base44 project, and you are still on Base44. Base44 against Lovable works through what each platform hands back.
What one public Base44 export demonstrates
The public repository linked above follows the CLI layout in Base44’s documentation. It carries entity declarations and backend function files under base44/, while its frontend points back to Base44’s SDK and services. One repository can demonstrate that structure. It cannot establish how often each file appears across all Base44 exports.
The Note about entities staying in Base44 belongs to the 2-way GitHub sync layout. The CLI documentation says entity schemas are copied into the new project. What holds across both is the ownership point those pages reach for. A schema file is a copy of a definition. The data rows still come out separately.
Common questions about exporting from Base44
Can I export my app from Base44?
Yes, on a Builder plan or higher. Base44’s quick-start guide states you can export the app’s code as a ZIP file or to GitHub on Builder or above. base44 eject clones the app into a new Base44 project and downloads the code locally: the React frontend, the backend function files, and the declarations that describe your entities, agents and connectors. What the ZIP contains is not itemised anywhere in Base44’s documentation.
Can I export a Base44 app’s code?
Yes, and what you get is a React and Vite project. Base44’s CLI layout includes a base44/ directory of declarations. What you cannot export is the runtime that reads those declarations, or the database behind them.
How can I export code from Base44 for free?
No documented route gets the code out for free. The ZIP button and GitHub sync both require Builder, which is $50 a month or $40 a month billed annually, checked 15 August 2026. The only free-sounding option is copying files out of the Code tab by hand, and Base44’s pricing page lists in-app code edits starting at Starter rather than Free, so even that is unconfirmed on the free plan.
How do I export data from Base44?
Table by table from the app dashboard. Click Dashboard, then Data, select the table, click the More Actions icon and choose Export; Base44’s documentation says the file “downloads as a CSV file you can open in spreadsheet software”. No single button exports the whole database, and no data file appears in the code export.
Does the Base44 export include my database?
No. You get the shape of your database and none of the contents. Entity files under base44/entities/ are JSON Schema definitions of field names and types. The rows come out separately, as CSV, one table at a time.
Can I run an exported Base44 app without Base44?
You can run the frontend elsewhere with some work, and you cannot run the backend elsewhere without rewriting it. The exported app points at Base44 through VITE_BASE44_APP_ID and VITE_BASE44_APP_BASE_URL, and every backend function is a Deno handler that imports npm:@base44/sdk and queries Base44’s database with a service-role client. Moving means replacing the database, the sign-in, the five built-in integrations and each function’s runtime.
Can I move a Base44 app into a new Base44 project?
Yes, with base44 eject. Base44’s documentation says the command “creates a new backend on Base44 with its own app ID and downloads your code locally”, and that entity schemas are copied while data is not. Plan on exporting each table’s CSV and reimporting it, and on reconnecting every connector by hand.
One thing a repository will never tell you is whether the person who owns it can still open the Code tab. Plans lapse, and the export you took in June is the export you have. If you are anywhere near leaving, take the ZIP now, while the button is still yours.
Ready to move off the builder?
We move your working app off the builder, keep what works, and set up the hosting, data, and release path needed afterward.