Updated 13 min readBy The VibeDeploy team

Lovable Custom Domain on the Free Plan: Your Options

Lovable's Free plan has no custom domain. Upgrade to Pro, or sync to GitHub and host the build on your own domain for EUR 4 a month. Steps and DNS fixes.

Short answer

Not inside Lovable: its plan comparison lists custom domains on Pro, Business and Enterprise, and the Free plan publishes to a lovable.app address only. You can upgrade to Pro (from $25 a month), or stay on Free, sync the project to GitHub (included on every Lovable plan) and host the build on your own domain elsewhere. On VibeDeploy that costs EUR 4 a month after a 14-day trial without a card.

Put your Lovable project on your own domain

Connect the GitHub repository Lovable syncs to and every push goes live, or upload the dist/ folder of a build. Your own domain and SSL are part of the 14-day trial, no card.

Lovable publishes every project to a lovable.app address, and on the Free plan that is where it stays. Lovable's own plan comparison lists custom domains on Pro, Business and Enterprise, not on Free. So the straight answer to "can I use my own domain on Lovable's Free plan?" is no, not inside Lovable. You still have workable options, and one of them costs nothing on the Lovable side. This guide compares them, walks through the route we recommend (Git sync to GitHub, then hosting the build on your domain), explains why a raw export gets rejected, and lists the DNS mistakes that keep a domain from going live.

What each Lovable plan allows

Lovable's plan comparison, checked on 13 October 2026, separates publishing from custom domains:

Feature Free Pro Business
Publish to a lovable.app address Yes Yes Yes
Custom domains No Yes Yes
Git sync (GitHub, GitLab, Bitbucket) Yes Yes Yes
Download the codebase as a ZIP No Yes Yes
Edit code inside Lovable No (read only) Yes Yes
Remove the "Edit with Lovable" badge No Yes Yes
Price, monthly billing $0 from $25 from $50

Enterprise includes all of these too, with contract pricing. Two details matter for this guide. Git sync is included on every plan, Free too, and that is what makes the low-cost route possible. And the domain rule is about connecting a domain: Lovable says a domain that was connected before a downgrade keeps serving the app, but on Free you cannot connect a new one, not even a domain you already bought through Lovable.

Three ways to get your own domain

  1. Upgrade to Lovable Pro. Pro starts at $25 a month, or $250 a year (Lovable lists its prices in US dollars). You connect the domain inside Lovable, Lovable keeps hosting the app, and you also get monthly credits, code editing and the option to remove the badge. Students and teachers can get 50 percent off Pro for up to 12 months. If you build in Lovable every week, Pro can be worth it for the credits alone.
  2. Stay on Free and host the build yourself. Sync the project to GitHub, let a host build it on every push, and point your domain at that host. On VibeDeploy that is the Solo plan: EUR 4 a month (EUR 38 a year) for one site with your own domain, after a 14-day trial without a card. Lovable remains your editor.
  3. Redirect the domain to lovable.app. Many registrars can forward a domain to another address. Visitors reach your app, but the address bar and search results show the lovable.app address, so this is a shortcut for a business card rather than a custom domain.

The rest of this guide covers the second option.

Put your Lovable project on your own domain

Connect the GitHub repository Lovable syncs to and every push goes live, or upload the dist/ folder of a build. Your own domain and SSL are part of the 14-day trial, no card.

Before you start: React + Vite or TanStack Start?

Lovable builds projects on two stacks, and they need different hosting:

  • Older React + Vite projects build to plain files in a dist/ folder. Any static host can serve them, as long as unknown paths fall back to index.html so the browser can handle the routing.
  • TanStack Start projects render their pages on a server. TanStack Start became Lovable's default for new projects on 13 May 2026 (22 June 2026 in Enterprise workspaces), and Lovable's own hosting guide is explicit: a host that only receives the static files does not run the server-rendered pages, server functions or API routes.

To check yours, open package.json in Lovable's Code tab (read only on Free) or in your repository. A TanStack Start project lists @tanstack/react-start among its dependencies. You can also ask Lovable in the project chat: "Which stack does this project use, older React + Vite or TanStack Start?" The next two sections are for React + Vite projects; TanStack Start gets its own section after them.

This route costs nothing on the Lovable side and keeps working while you keep editing.

In Lovable

  1. Open Project settings > Git > GitHub. If the workspace has no GitHub connection yet, add one: a GitHub window asks you to install and authorize the Lovable GitHub app on your account. Workspace owners and admins can do this.
  2. Click Connect next to your account. Lovable creates a new repository, private by default, and starts a two-way sync. It syncs one branch, normally main.

In VibeDeploy

  1. Create a new site and choose From GitHub.
  2. Paste a GitHub token so VibeDeploy can read the private repository and register a webhook. The dashboard links to GitHub's token page and explains which permission to tick.
  3. Pick the repository and the branch Lovable syncs (usually main), and choose a name for the site's address. VibeDeploy installs the dependencies, runs npm run build and publishes the dist/ folder.

From then on, every change Lovable pushes to that branch starts a new build and deploy. A standard Lovable project needs no extra settings for this: Lovable commits a .env file with the VITE_ values the app needs (its docs warn against adding .env to .gitignore), and Vite reads that file during the build.

Route 2: upload a build, and why a raw export is rejected

If you would rather deploy by hand, build the project on your own computer. On the Free plan Lovable's Download codebase button is not available, so get the code from GitHub instead: open the repository, click Code, then Download ZIP, or clone it with git.

What you have now is source code, not a website. Its index.html points at TypeScript files under src/ that only a development server can run, which is why VibeDeploy rejects an upload like this with the error UNBUILT_PROJECT. Build it first:

npm install
npm run build

Upload the dist/ folder that the build creates: drag the folder onto the upload area or zip its contents. Leave node_modules out; it is never part of the site. You repeat the build and the upload after every change you make in Lovable, which is why Route 1 is the better default.

If your project runs on TanStack Start

A TanStack Start app needs a running server, so a dist/ upload or a static build on every push does not give you a working site. Lovable's guide to hosting outside Lovable builds such an app with Nitro's Node.js preset (NITRO_PRESET=node-server npm run build) and starts it with node .output/server/index.mjs on Node.js 22, where it listens on port 3000.

VibeDeploy can run that server as a container next to your site. Connect VibeDeploy to your AI assistant over MCP (see the MCP server setup) and ask it to run the project with the deploy_app tool. The container runs in a gVisor sandbox within the per-site limits of up to 6 services with 2 CPU and 2 GiB of memory in total, on every plan, the trial included. Keys that the app's server functions read go into the site's Settings > Secrets in the VibeDeploy dashboard, never into the chat. Two differences with the static route: your AI deploys and updates the container over MCP, not a build on every push, and container data is not yet included in snapshots, which only matters if you add a database there.

If your project is still on React + Vite, there is no need to upgrade for any of this: Lovable says older projects keep working. Should you upgrade later while Route 1 is in place, start the upgrade on a new branch in Lovable: Git sync pushes the rewritten project like any other change, VibeDeploy only builds the branch you picked, and a static build of the result is not a working site. Merge that branch once the container runs.

Point your domain at VibeDeploy

In the dashboard, open Web Addresses. Under "Use your own domain", type your domain, pick the site it should show and click "Connect it!" to add it. The dashboard then lists the records to create at your DNS provider:

Host Type Value
www or another subdomain CNAME proxy.vibedeploy.be
the bare domain (example.com) ALIAS or ANAME proxy.vibedeploy.be
the bare domain, if your provider has no ALIAS A the IP address shown in the dashboard
_vibedeploy.example.com TXT the vibedeploy-verify= value shown in the dashboard

The TXT record proves the domain is yours. When you add the bare domain, the dashboard also lists the record for its www twin, so visitors who type www still end up on your main address. Once the records exist, click Verify: VibeDeploy checks them and requests a Let's Encrypt certificate, which it also renews. If the domain currently serves another site, lower the TTL of its records well before the switch so the change spreads quickly.

Why a domain does not go live

Most failed setups come down to one of these:

  • Old records still answer. Delete whatever pointed the host at the previous site: Lovable's A record (185.158.133.1) and its _lovable TXT record, or an old CNAME. If the domain was also connected in Lovable, disconnect it there under Project > Settings > Domains. Lovable's own docs name leftover A, AAAA or CNAME records as the reason a domain keeps showing an old website.
  • A stray AAAA record. The records VibeDeploy gives you contain no IPv6 address, so an AAAA record on that host sends IPv6 visitors somewhere else. It also blocks the certificate: Let's Encrypt always tries IPv6 first and only falls back to IPv4 on a timeout, not when the IPv6 address answers with the wrong content. Delete the AAAA record.
  • The Cloudflare proxy is on. A proxied record (the orange cloud) answers DNS queries with Cloudflare's own addresses instead of the value you entered, so the domain no longer resolves to VibeDeploy. Switch those records to DNS only (the grey cloud). Lovable points to the same switch for Cloudflare errors 1001 and 1003, and Cloudflare describes error 1000 as a proxied record that points at a Cloudflare address, or at another proxy that sends the request back through Cloudflare.
  • CAA records block the certificate. If your domain has CAA records, one of them must allow Let's Encrypt: 0 issue "letsencrypt.org". A domain without CAA records lets any public certificate authority issue.
  • Sign-in fails on the new address. Supabase and OAuth providers only send users back to addresses they know. Add the domain to the auth redirect URLs: for Lovable Cloud under More > Cloud > Users > Auth settings > Advanced (or ask Lovable to do it), in your own Supabase project's auth settings, and in your Google OAuth client if you bring your own.
  • Propagation. Lovable's documentation allows up to 72 hours for DNS changes, though most are live within a few hours.

What it costs

Lovable Pro Lovable Free plus VibeDeploy Solo
Price from $25 a month or $250 a year EUR 4 a month or EUR 38 a year
Custom domain Yes, connected in Lovable Yes, one, connected in VibeDeploy
Where the site is served Lovable, delivered globally VibeDeploy, in Belgium
Lovable credits from 100 a month, plus 5 a day 5 a day, up to 30 a month
Try before paying Free plan, lovable.app address only 14-day trial with your domain, no card

VibeDeploy's prices include VAT where it applies; Lovable lists its prices in US dollars. The two are not like for like: Pro buys more building in Lovable, while VibeDeploy hosts what Lovable builds. If you mostly need the domain, Free plus Solo is the cheaper pair. If you build every day, Pro's credits may decide it. And once the frontend runs elsewhere, Lovable no longer looks after its deployments; Lovable's own hosting guide lists what moves to you.

Keep editing in Lovable after the move

How you build does not change. Lovable's Publish button keeps publishing to Lovable's hosting only, so the lovable.app address goes on serving the version you last published there, while your domain serves whatever reached the repository. Two public copies of one site confuse visitors and search engines, so once your domain works, unpublish the Lovable copy (Publish, then the menu in the dialog, then Unpublish) or stop publishing there. If the app uses Lovable Cloud for its database and sign-in, that backend stays at Lovable and keeps drawing on your workspace's Cloud credits; the Free plan includes a monthly Cloud grant.

Before you share the new address, work through the Lovable production checklist: which keys end up in the bundle, what crawlers see, how 404s behave, where forms go and how to undo a bad release. The same topic is covered in Dutch in Lovable-website online zetten met je eigen domein and in French in Mettre en ligne un site Lovable (ou Bolt) avec votre nom de domaine, and German readers with GDPR questions can start at Lovable und DSGVO. For the hosting side on one page, see the Lovable deploy guide; for a side-by-side, read VibeDeploy vs Lovable hosting.

Sources

From the VibeDeploy team

Ship your AI-built site in minutes

VibeDeploy hosts your AI-built websites in the EU with custom domains, automatic SSL, and a 14-day free trial that gets you online today.

Deploy guides for this topic

Questions people ask

Can I use a custom domain on Lovable's Free plan?

Not through Lovable. Its plan comparison shows custom domains on Pro, Business and Enterprise. A domain you connected while on a paid plan keeps working after a downgrade, but connecting a new one needs a paid plan again. On Free, the way to your own domain is to host the synced code somewhere else.

Can I export my Lovable code without paying?

Yes, through Git sync, which Lovable includes on every plan: the project lands in a GitHub, GitLab or Bitbucket repository that stays in sync both ways. The Download codebase button is a paid feature, but GitHub lets you download the synced repository as a ZIP from its Code menu.

Why does VibeDeploy say UNBUILT_PROJECT when I upload my Lovable project?

The upload contains source code instead of a built site, and browsers cannot run the TypeScript files it points to. Run npm install and npm run build, then upload the dist/ folder, or connect the GitHub repository and let VibeDeploy build it on every push. A TanStack Start project needs a running server instead.

Does a TanStack Start Lovable app work on static hosting?

No. Lovable's hosting guide says these apps need a host that runs their server part, because server-rendered pages, server functions and API routes do not run from static files. On VibeDeploy, your AI can run the app's Node.js server as a container next to the site with the deploy_app tool.

Will my Lovable project keep its lovable.app address?

Yes. Lovable's docs say the lovable.app address stays with Lovable and keeps serving the version you last published there, and its Publish button keeps publishing to Lovable's hosting only. To avoid two public versions of the same site, unpublish the Lovable copy once your own domain works, or stop publishing there.

Related reading