How to self-host a Base44 app, and what you give up
Build an exported Base44 app and deploy it to Vercel, Netlify or Cloudflare. What keeps working on Base44's backend, what breaks, and the SEO step people forget.
10 min read
You can host a Base44 app’s frontend anywhere that serves static files: it’s a Vite app, and npm run build produces a folder you can deploy to Vercel, Netlify or Cloudflare. By default it keeps using your app’s Base44 backend for data, login and integrations. Two things don’t come with it: Base44’s crawler pre-rendering and its hosting-level features like redirects. Plan for both before you move your domain.
This is level 3 of the Base44 migration guide.
When self-hosting makes sense
- You want your frontend on infrastructure you already run, next to other sites.
- You need hosting-level control Base44 doesn’t offer, like custom headers, edge logic or a particular region.
- You’re mid-way through a move to Supabase and want to host the new version.
If you only want a backup or a real code editor, GitHub sync gets you there without taking on hosting.
Step 1: export and build
Export the code as a ZIP or clone your GitHub repo (export guide), then:
npm install
npm run build # outputs to dist/ by default
npx vite preview # check the production build locally
The build embeds your app’s ID so the SDK knows which Base44 backend to talk to. Base44’s CLI has its own base44 build command that injects the app ID for you, which the docs recommend for ejected projects, since those get a new ID.
Step 2: add a rewrite for client-side routes
Base44 apps route in the browser, so a request for /pricing has to return index.html. Without a rewrite, refreshing any page except the homepage returns a 404.
Vercel (vercel.json):
{ "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }] }
Netlify (public/_redirects):
/* /index.html 200
Cloudflare Workers static assets (wrangler.jsonc):
{
"name": "my-base44-app",
"compatibility_date": "2026-09-01",
"assets": { "directory": "./dist", "not_found_handling": "single-page-application" }
}
Step 3: test what depends on Base44
The self-hosted frontend now runs on a new origin while the backend stays at Base44. Test each of these on a preview deployment before moving your domain:
- Reading data on public pages.
- Signing in with each method your app offers. Login flows involve redirects back to your app, and Base44’s auth setup expects your app’s own domains, so this is the part most likely to need adjustment. Base44 documents OAuth redirect URIs for custom providers; check the ones in your app’s authentication settings.
- Writing data as a signed-in user.
- Integrations such as emails and file uploads.
- Backend functions called from the frontend.
If sign-in doesn’t work from the new origin, the cleaner path is replacing Base44 auth along with the rest of the backend.
Step 4: replace what Base44 hosting did for you
| Base44 hosting feature | On your own host |
|---|---|
| Pre-rendered pages for crawlers | Add a pre-rendering service or move to a server-rendered framework |
| sitemap.xml, robots.txt, llms.txt | Generate them at build time or serve them as static files |
| 301 redirects | Your host’s redirect rules |
www to root redirect | Your host’s domain settings |
| Meta tag and structured data injection | Set tags in code |
| Custom email domain for app emails | Your email provider |
Getting pre-rendering back
You have three options, from least to most work.
- A pre-rendering service in front of the new host. It renders each page in a headless browser and serves the finished HTML to crawlers, while visitors get the normal app. We’d use Encited: setup is a DNS change or a small middleware snippet for Vercel, Netlify or Cloudflare, it serves Markdown to AI agents, and its crawl logs show which bot got which page. Prerender.io is the long-standing alternative, and a self-hosted Puppeteer service works if you want to run it yourself.
- Build-time pre-rendering. Render your public routes to static HTML during the build with a Vite pre-render plugin. It works for pages whose content doesn’t change between builds.
- Move to a framework with server rendering, such as Next.js or TanStack Start. The most control, and a rewrite of routing and data loading.
Step 5: move the domain
- Add the custom domain to your new host.
- Recreate every redirect you had in Base44.
- Change DNS from Base44’s records to your host’s.
- Check the new site with a crawler user agent to confirm pages have content:
curl -s -A 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' \
https://yourdomain.com/pricing | sed -e 's/<[^>]*>//g' | tr -s ' \n' | head -c 400
If that prints little more than your site name, crawlers are getting the empty shell.
What to do next
- Deploy a preview build and run the Step 3 tests.
- Decide how you’ll handle pre-rendering.
- Move the domain only once both are done.
Frequently asked questions
- Can I host a Base44 app outside Base44?
- The frontend, yes. Exported Base44 code is a standard Vite app you can build and deploy to Vercel, Netlify, Cloudflare or any static host. It keeps calling your app's Base44 backend through the SDK for data, login and integrations, unless you replace that backend too.
- What happens to SEO if I self-host a Base44 app?
- You lose Base44's crawler pre-rendering. A client-rendered React app on a static host sends crawlers an HTML shell with no content until JavaScript runs. Add a pre-rendering service or move to a framework with server rendering before you switch your domain.
- Do I need a rewrite rule when self-hosting?
- Yes. Base44 apps use client-side routing, so every path has to serve index.html. Add a rewrite on your host, or deep links like /pricing return a 404 on refresh.
- Is self-hosting cheaper than Base44?
- Hosting a static frontend is cheap or free on Vercel, Netlify or Cloudflare. But if the app still uses Base44's backend you still need a Base44 plan, and if you replace the backend you pay for Supabase or similar and take on the maintenance.
Read next
Keep going
-
Leaving or extending Base44: the export and migration guide
What you can take out of Base44 and what stays: exporting code, GitHub sync, data export, and migrating the backend to Supabase or your own hosting, step by step.
-
How to export your Base44 code (ZIP, GitHub or CLI)
Three ways to export Base44 code: download a ZIP, sync to GitHub, or eject with the CLI. What each includes, which plan you need, and what the export can't take with it.
-
How to migrate a Base44 app to Supabase
Move a Base44 app to Supabase: turn entities into tables, import the data, move users, replace Base44 SDK calls, and port backend functions and integrations.
-
Running a Base44 app locally with the Base44 CLI
Run a Base44 app on your own machine: clone from GitHub or eject with the CLI, link it, and use base44 dev. What runs locally, what's forwarded, and the remote-mode trap.