Fixed price. Seven steps.
You do almost nothing.
Your app, on a machine in your name, for about $4 to $20 a month.
WHAT WOULD I SAVE?Moving a Replit app onto your own server means copying the code, the database and the uploaded files to a machine in your own account, putting Cloudflare in front for security, then pointing your domain at it. Neurobird does it for a fixed $500 for a simple app, or from $1,000 for a complex one. After that most apps cost $4 to $20 a month to run. Hosting was never the expensive part of Replit: agent work is charged per attempt, so a failed try costs the same as one that worked.
Only one of these can be predicted.
Drag it to last month's bill. If it is not worth moving yet, this says so.
Last month, Replit charged me
You do not have to stop building. Just stop paying per attempt.
I set the plan up against your code and show you how to drive it, so you do not burn it the way the credits went. That is part of the handover.
Agreed before anything starts.
Seven steps. Click through and see how little of it lands on you.
You send me the link. I list everything it uses and come back with a fixed price.
You do: send a link. Costs you nothing.
I 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 I 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 computer 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.
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 I 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 I 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 just runs on your machine now instead of theirs.
You do: click around a private link and tell me if anything looks off.
Docker Compose, so the app builds identically on your machine and mine, with health checks and a restart policy so a crash recovers on its own. If you want a deploy button rather than a terminal, I 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 I 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 I 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 me.
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 I run in front of you, because a backup nobody has restored is a rumour. Uptime monitoring pings you, not me. 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.
Opened in your name, at prices you can look up yourself.
| 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 I 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 me. Replit's Core plan alone is $25 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 I can undo it just as fast.
No. You send a link at the start and click around once near the end. Everything else is my side.
Yes. The server is in your account, the domain stays with you, the database is on your disk. I hold nothing you would have to ask me for.
That is the normal case. I am moving it, not rewriting it. I will tell you what is fragile, but the job is the same app on your own machine.
Yes. Same seven steps.
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 I need to start. You get a list of what your app uses and a fixed price back, within one business day, from me.