Skip to content
Base44 SEO Journal

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:

  1. Reading data on public pages.
  2. 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.
  3. Writing data as a signed-in user.
  4. Integrations such as emails and file uploads.
  5. 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 featureOn your own host
Pre-rendered pages for crawlersAdd a pre-rendering service or move to a server-rendered framework
sitemap.xml, robots.txt, llms.txtGenerate them at build time or serve them as static files
301 redirectsYour host’s redirect rules
www to root redirectYour host’s domain settings
Meta tag and structured data injectionSet tags in code
Custom email domain for app emailsYour email provider

Getting pre-rendering back

You have three options, from least to most work.

  1. 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.
  2. 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.
  3. 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

  1. Add the custom domain to your new host.
  2. Recreate every redirect you had in Base44.
  3. Change DNS from Base44’s records to your host’s.
  4. 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

  1. Deploy a preview build and run the Step 3 tests.
  2. Decide how you’ll handle pre-rendering.
  3. Move the domain only once both are done.

Found something wrong or out of date? Base44 ships changes every week and we'd rather fix a guide than let it rot.

Disclosure: the team behind this guide also builds Encited, mentioned above.

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