Your app on a VPS in your own name. From about $20 a month.
WHAT IT COSTSEvery square is $10. One documented month on Replit, then the same month on your own server.
One documented month, on top of a $100 plan. Lovable bills in credits that expire instead, and arrives at the same problem from the other direction. Either way the number follows how much you build. The one green square is the whole bill on a server of your own.
The migration is a fixed price, agreed before anything starts.
Paste the address your Replit or Lovable app is published at. A few seconds, no account, no charge.
Public address only. Nothing is asked of your account, and nothing is stored.
Checked at each provider on 24 August 2026. Vultr and Akamai from their public APIs, DigitalOcean, OVHcloud and Lightsail from their pricing pages, Hetzner from its own CX22 announcement because hetzner.com renders prices in JavaScript. Most migrated apps sit between $4 and $20 a month.
The left column is a rate card, not an invoice. Those meters run at the same time, which is why nobody can tell you what next month costs. The $1,982.37 is one Replit customer's documented month, linked above. The Lovable credit costs are Lovable's own published examples.
Seven steps, and almost none of it lands on you.
You send us the link. We list everything it uses, including whatever has to be exported from Replit or Lovable, and come back with a fixed price.
You do: send a link. Costs you nothing.
We clone the repository and read the files that describe how Replit was running it: the .replit run command, the Nix channel in replit.nix, and package.json or pyproject.toml. Then we list the managed pieces the app leans on, because those are the ones that do not come with the code: the Postgres instance, Object Storage buckets, the Secrets panel, scheduled jobs, and whether it was deployed as an Autoscale or a Reserved VM. Anything binding to 0.0.0.0 on a Replit assigned port gets noted, because that changes on a real server.
A VPS that belongs to you, opened in your name, on your card. Around the price of a coffee a month.
You do: nothing. Your app keeps running on Replit or Lovable.
Ubuntu LTS, a non root user with sudo, SSH keys only and password authentication disabled outright. The firewall allows 80, 443 and SSH and nothing else. Unattended upgrades are on for security patches, fail2ban watches SSH, and swap is sized so a memory spike degrades instead of killing the process. Sizing follows your app's actual memory and CPU profile, not a pricing tier.
Your database, your users, your uploaded files. Copied, then counted on both sides to prove nothing was lost.
You do: nothing. Still nothing has changed for your users.
Postgres goes across with pg_dump in custom format and pg_restore, then we compare row counts table by table on both sides and check the sequences so the next insert does not collide. Files are copied with rsync using checksums rather than timestamps, and we keep a manifest so the copy can be verified again later. Nothing is pointed at the new database until both sides agree.
Same app, same buttons, same look. It is self hosted now, on your machine instead of theirs.
You do: click around a private link and tell us if anything looks off.
Docker Compose, so the app builds identically on your machine and ours, with health checks and a restart policy so a crash recovers on its own. If you want a deploy button rather than a terminal, we use Coolify, which is open source and runs on your server, so it is one more thing you own rather than one more thing you rent. Secrets live in a file readable only by root, or in a systemd EnvironmentFile.
Cloudflare, on its free plan. It blocks attacks, gives you the padlock in the address bar, and hides your server from the internet.
You do: nothing. This is protection most vibe coded apps never had.
Cloudflare sits in front on the free plan: DNS, TLS, caching, a web application firewall and unmetered DDoS protection. The firewall is then locked so the origin only accepts traffic from Cloudflare, which means your server's address stops being reachable directly. This matters more than it sounds: Veracode found 45 percent of AI generated code contains security flaws, and Wiz found one in five organisations exposed to systemic risks in vibe coded apps. Most of those apps went live with nothing in front of them at all.
Your web address starts pointing at your server. Visitors notice nothing at all.
You do: nothing. If anything looks wrong we switch it straight back.
TTL on the DNS record drops to 300 seconds a day ahead, so the internet stops caching the old answer. Then the record moves, and both deployments stay alive while real traffic arrives on the new one and we watch the logs. If something is wrong, the record goes back and propagation is minutes rather than hours. The Replit deployment is only torn down when you say so.
Every login, automatic backups, and a one page guide in plain English. Then you do not need us.
You do: keep the guide. That is the whole handover.
A nightly pg_dump plus a file sync to storage you control, with a restore we run in front of you, because a backup nobody has restored is a rumour. Uptime monitoring pings you, not us. The runbook is one page in plain English: how to deploy a change, how to roll back, how to restore the database, and who to call if you would rather not. Your logins, your accounts, your billing.
Moving a Replit app to your own server means copying the code, the database and the uploaded files onto a machine in your own account, putting Cloudflare in front of it, and pointing your domain at it. Neurobird does that for a fixed $500 for a simple app, or from $1,000 for a complex one.
Hosting was never the expensive part of Replit. Agent work is billed per attempt, so a try that failed costs the same as one that worked. A server of your own runs from about $20 a month and the number does not move.
A Replit to VPS migration is four jobs, not one. To move a Replit app off the platform: You get the code out to a repository you control. You take a full copy of the database and any uploaded files. You reproduce the runtime, which on Replit is described by a .replit file and a Nix configuration, so that the app starts the same way on an ordinary Linux machine. Then you point the domain at the new server, and only then do you turn anything off.
The order matters more than the tooling. Most migrations that go wrong go wrong because somebody cancelled the subscription before taking the database copy, or pointed the domain at a server that had never served real traffic. Done in the right order, the old deployment stays live the whole time and the rollback is a DNS change that takes minutes.
To export Replit code, connect the workspace to GitHub and push. That is the easy half. Once you push, and you have the repository. What surprises people is everything the code assumes exists around it.
The Replit database is Postgres, so it comes across with a normal dump and restore, and the only real discipline is comparing row counts on both sides before you trust it. Replit's key value store is a different thing and has to be exported to JSON and folded into your own storage. Object storage buckets have to be copied file by file and checksummed. Secrets have to be re-entered by hand, because they were never in the repository. A Git export on its own is not a working app somewhere else, and that gap is where a migration either succeeds or quietly loses data.
No, and the difference is the whole point. Moving from Replit to Lovable, Bolt.new or v0 swaps one managed builder for another. You get a different editor and a different billing model, but you still do not own the machine, you still cannot take a copy of the running system, and you are still one pricing change away from the same conversation.
Self hosting means the server is rented in your name, the database sits on a disk you control, and the domain points wherever you tell it. Nothing about the app has to change for that to be true. People usually keep building with AI afterwards, just on a flat rate plan where a retry costs nothing, rather than a platform that meters each attempt.
If Replit feels too expensive, the subscription is rarely the reason. Replit Core is $20 a month, or $20 billed annually, and it includes a credit allowance towards model usage. Past that allowance, agent work is billed per action, and this is where Replit pricing surprises people: the attempt that did not fix anything is charged at the same rate as the one that did.
That is why bills are unpredictable rather than merely high. Deployments, the database and object storage all meter at the same time, so nobody can tell you what next month costs. One customer documented $1,982.37 in a single month on top of a $100 plan. Hosting the same app on a VPS runs from about $20 a month, and the number is identical whether the model got it right first time or on the fifth.
Vendor lock in is usually described as a contract problem. For an app built on a managed AI builder it is more practical than that: some parts of what you built are portable and some simply are not.
Your code, your database, your uploaded files and your domain are all yours and all move. The platform's own services do not. Replit Auth is the clearest example, because sign in has to be rebuilt somewhere else, and that is a decision rather than a copy. Knowing which side of that line each piece falls on before you commit is the difference between a migration and a rescue. It is also why the inventory comes first and the price comes after it.
| What | Moves? | What happens |
|---|---|---|
| Your code | Moves | Exported to a Git repository you own. It is your code, and Replit's terms do not change that. |
| Your Postgres database | Moves | Dumped and restored whole, with row counts compared on both sides before anything is pointed at it. |
| Uploaded files and Object Storage | Moves | Copied to a disk on your server, or to your own S3 bucket if the app expects one. |
| Environment variables and secrets | Moves | Re-entered on your server in a file only root can read. They never sit in a vendor panel again. |
| Your custom domain | Moves | It never belonged to Replit. It stays at your registrar and simply starts pointing somewhere else. |
| Scheduled jobs and background work | Moves | Rebuilt as system timers or worker containers, which is usually more reliable than what they replace. |
| Replit Auth logins | Does not move | This is the one real casualty. Replit Auth is theirs, so sign in has to be replaced, and we will tell you the options before you commit. |
| Replit Key Value DB | Converted | Exported to JSON, then folded into your Postgres or kept as a simple key value store you run. |
| The Replit editor and Agent | Does not move | You keep building, just somewhere that does not bill you per attempt. Most people move to a flat rate coding plan. |
| Always On and Reserved VM | Not needed | A server you rent is always on by definition. There is nothing to buy back. |
$500 for a straightforward app. From $1,000 if it has extra moving parts. You get the number before anything starts.
Usually $4 to $20 for the server, paid to the provider, not to us. Replit's Core plan alone is $20 a month before any usage.
Yes, and that is the point. Replit charges per attempt, so a failed try costs what a good one does. Claude Pro is $20 a month, includes Claude Code, and does not charge you for retries.
No. Your Replit version stays live until the new one is working. The switch takes minutes and we can undo it just as fast.
No. You send a link at the start and click around once near the end. Everything else is our side.
Yes. The server is in your account, the domain stays with you, the database is on your disk. We hold nothing you would have to ask us for.
That is the normal case. We are moving it, not rewriting it. We will tell you what is fragile, but the job is the same app on your own machine.
Yes. Same seven steps.
Below roughly $40 a month, no, and moving would not pay for itself yet. The problem starts when agent usage pushes the bill into the hundreds, because that part is metered per attempt and cannot be predicted. A VPS running the same app costs about $20 a month and the number is identical every month, which is usually what people are actually buying.
You can. The code exports to GitHub in a few clicks. What takes the time is everything around it: the database copy and its row counts, the object storage, the secrets, the runtime, the security layer and a cutover you can undo. Doing it half way is worse than not starting, because an app running with no backups and no firewall is more fragile than it was on Replit, not less.
No. The code you write, or that the agent writes for you, is yours. What belongs to Replit is the platform around it: the editor, the agent, Replit Auth, Replit's key value database and the hosting. That is the practical difference between owning your app and owning your app's home, and it is the reason a migration is possible at all.
If you cancel without taking a copy, yes, and that is the single most expensive mistake in this whole process. Take a dump of your Postgres database before you cancel anything. In a migration this is step three and it happens long before anything is switched off, which is the entire reason the steps run in that order.
Yes, and nothing about it is difficult. Your domain was never Replit's. It sits at your registrar and it currently points at their servers. Moving is a matter of changing where it points, and visitors see no difference at all.
This is the one real casualty. If your app uses Replit Auth for sign in, that service is theirs and does not travel. Sign in has to be replaced, usually with your own email and password, a magic link, or Google sign in. Your user records and their data come across intact, so this is about how people prove who they are, not about losing them. If your app already handles its own sign in, nothing changes at all.
You personally do not need to be one, no. You send a link and you click around once near the end. But somebody has to do the work, and doing it half way is worse than not starting: an app moved without backups, without a firewall and without a rollback is more fragile than it was on Replit, not less.
Not the code, which is the part everyone worries about. It is the managed pieces that have no obvious equivalent: authentication, object storage, scheduled jobs and anything that relied on Replit's own database. Those need decisions rather than copying, which is exactly why the inventory comes first and the price comes after it.
It depends entirely on your bill. Below roughly $40 a month, honestly no, and the calculator on this page will tell you the same thing. The moment agent usage pushes you into the hundreds, the arithmetic changes fast, because a server does not care how many times the model had to try.
A computer you rent, in a data centre, that only runs your things. Nobody else's app shares it, you have full access to it, and it costs a fixed amount every month whatever happens on it. DigitalOcean rents them from $4.00 a month. That is the entire concept.
Connect the workspace to GitHub and push, which gets the code out. That is the easy half. The harder half is everything the code assumes exists: the database, the file storage, the secrets and the run command. A Git export on its own is not a working app somewhere else, which is what surprises most people who try it.
That is genuinely all we need to start. You get a list of what your app uses and a fixed price for the migration back, within one business day.
What each platform actually charges for, what it comes to over a year, and how to spend less without moving at all. Every figure is quoted from the platform's own published pages.