How To Move A Site Off The Replit Hosting

The published link went quiet, or the plan is lapsing. Here is how the Replit hosting really ends, which projects you can move, and where to put them next.
The OxyPages Team · · 8 min read
You built something on Replit, it worked, and now you want it somewhere else. Maybe the published link went quiet. Maybe you closed the tab and the preview address stopped answering. Maybe a plan is lapsing this month and you would rather not find out the hard way.
Whatever brought you here, the Replit hosting question is not actually the first question. This one is:
Is the thing you built a set of files, or a running program?
If it is files, you can download it and put it on any static host in about a minute, usually for nothing. If it is a running program, no static host on earth can serve it, and every "just upload the folder" guide is about to cost you an afternoon.
None of this is a knock on Replit. It is a genuinely good place to build, and most people reading this are still building there. This is only about where the output goes afterwards.
TL;DR: Download the project from the three-dot menu at the top of the file tree, "Download as zip". Then check what you actually have. If it is HTML, CSS, JavaScript and images, or a front-end project you can build into a dist folder, upload that folder to any static host and you are done. If it has a server file, a database or secrets it reads at runtime, it is an application, and a static host cannot run it. That one goes to Render, Railway, Fly.io or a small VPS instead.
Is It A Static Site Or A Running App?
It is an app if anything has to execute on a server when a visitor arrives. It is static if the visitor's browser gets the finished files and does the rest. What a static site can and cannot do is the longer version of that line.
Open the file tree and look. You are hunting for four specific things, and any one of them settles it.
- A server file:
server.js,index.jswith an Express import,app.py,main.pywith Flask or FastAPI - A database of any kind, including Replit's built-in one or a Postgres connection string
- A Secrets tab with API keys that the code reads while it is running
- A login screen with real accounts behind it, not a hard-coded password in the JavaScript
| What is in the project | What it is | Where it can live |
|---|---|---|
Only .html, .css, .js and images | Static | Any static host |
| A React, Vue or Vite project with a build command | Static after you build it | Any static host |
| An Express, Flask or FastAPI server file | An app | A server platform |
| Secrets read at runtime, or a database | An app | A server platform, plus somewhere for the data |
| A form that saves what people submit | An app | A server platform, or a form service |
There is a shortcut worth knowing. Replit's own documentation says Static Deployments are not compatible with apps the Agent built, because the Agent builds full-stack apps that need a backend. So if you described a product to the Agent and it handed you logins and a dashboard, you already have your answer, and it is not the easy one. Replit deployment types
If you are unsure, there is a blunt test. Open the browser console on your live page, click around, and watch the network tab. If the page fetches an address starting with /api/, something on a server is answering it. That something does not come along in a zip file.
When The Replit Hosting Actually Stops
It mostly does not stop on its own. Four specific things end it, and only one of them catches people out.
- The preview URL was never hosting. The
replit.devaddress you get when you press Run is a temporary URL tied to your workspace session. Close the workspace and it stops answering. Publishing is a separate step, and plenty of people never took it. - Free always-on hosting ended on 1 January 2024. Replit removed Always On,
repl.coaddresses moved toreplit.dev, and publishing became the only way to keep an app up. If a tutorial you are following does not match what you see, that is usually why. - A budget cap suspends a published app. Autoscale publishing lets you set a spending limit. Hit it and the app is suspended until you raise the cap and start it again. That is the surprise one, because it looks like an outage.
- Dropping to the free plan limits how many live projects you keep. The free Starter plan publishes one live project. Two published apps and a cancelled subscription do not both survive.
Now the fair part, because the money is not where people assume. Static publishing on Replit costs nothing to host, with data transfer billed at $0.05 per GB. The bills come from the always-on tiers: a Reserved VM starts at $15 a month for a shared half-core, and Autoscale carries a $2 monthly base fee plus usage.
So the Replit hosting you are paying for is almost always the server, not the pages. Which is exactly why the static half of this problem is so easy to solve elsewhere, and the server half is not.
How To Move A Static Project Off Replit

Six steps. If your project is genuinely static, the whole thing takes about ten minutes, most of which is the download.
- Build it first, if it needs building. Open the Shell and run your build command, usually
npm run build. You want the output folder it creates, normallydistorbuild. That folder is your website. The source next to it is not. - Download the project. Three-dot menu at the top of the file tree, then "Download as zip". If the project is too large and the download fails, run
zip -r project.zip .in the Shell and downloadproject.zipfrom the file tree instead. - Unzip it and find
index.html. Whatever folder that file sits in, at the top level, is the folder you are going to upload. - Delete what does not ship.
node_modulesis the big one and it is often 90% of the zip. Also drop.git,.replit,.config, and the source files if you built the project in step one. - Upload the whole folder, not the single file. This is the step that causes almost every broken-image complaint. Your HTML asks for
assets/logo.pngandstyle.css, and those have to arrive with it, in the same shape. - Open the new URL on your phone. Not your laptop, which still has the local copy cached and will happily lie to you.
That is it. Your files are live at a real HTTPS address and Replit is no longer involved. The same folder-upload routine in more detail covers the general case if any step feels vague.
Two things break at this point, and both are quick to spot.
Absolute paths. If a tag points at /assets/logo.png with a leading slash, it will still work at the root of a new domain but not inside a subfolder. Relative paths are safer for a moved site.
Calls to /api/. If the page starts throwing errors that were not there before, open the console. A failed request to your own /api/ address means you did not have a static site after all. Go back to the section above.
If It Has A Backend, A Static Host Cannot Run It
I want to be plain about this, because it is the part vendors gloss over.
A static host stores files and hands them to browsers. It does not run Node, Python, PHP or anything else on a server. OxyPages does not run them either. If your project has an Express server, a database, user accounts or secrets it reads at runtime, we are the wrong tool and so is every other static host, and no plan upgrade changes that.
Here is where that kind of project actually goes.
| Platform | Fits | What moving there involves |
|---|---|---|
| Render | Node, Python, Docker, with managed Postgres alongside | Connect a repo, set a start command, re-enter your secrets |
| Railway | The same shapes, quickest to stand up from scratch | Deploy from a repo or the CLI, add a database service |
| Fly.io | Apps you want running close to users, Docker-first | Write a small config file, then one CLI command |
| A VPS | Full control at a fixed monthly price | You manage the operating system, web server and certificates |
Two warnings before you start.
Your data does not come along in the zip. The download has your code. If the app stores anything people typed into it, export that separately, and do it before you cancel anything.
Your secrets do not either. Replit's Secrets are encrypted environment variables, deliberately kept out of your code rather than sitting in a file. Write down what the app expects and set them again on the new platform, or it will boot and immediately fall over.
One honest middle path: some projects are an app only because of one small thing, like a contact form or a single API key. Splitting those out and hosting the rest statically is often less work than moving the whole application, and a hosted form service handles the one dynamic piece.
What To Do Next
In order, and you can start now.
- Open the project and look for a server file, a database, or a Secrets tab with anything in it.
- If none of those exist, run the build if there is one, then download the zip.
- Strip
node_modulesand the source files, keep the folder withindex.htmlat the top. - Drag that folder onto a static host and check the result on your phone.
- If a server file does exist, stop, export your data, and start a Render or Railway account instead.
Drop the folder into OxyPages if you want the static half done in a minute with a free subdomain and HTTPS already on. If the project turned out to be an application, use Render and come back for the marketing pages later, which is a genuinely common split.
Everything on this page applies to output from any of the AI builders, not just this one. Hosting a site an AI generated for you covers the wider pattern, and getting a Claude HTML page online covers the simplest version of it.
FAQ
Can You Use Replit To Build A Website?
Yes, and it is one of the better places to do it, especially if you cannot code. It will happily produce a plain HTML page, a React site, or a full application with logins and a database. The catch is that those three outcomes have very different hosting needs, and the tool does not make that obvious while you are building.
How Do I Download My Whole Replit Project?
Use the three-dot menu at the top of the file tree and choose "Download as zip". If that fails because the project is too big, open the Shell, run zip -r project.zip ., and download the resulting file from the file tree. You can also push the project to GitHub and clone it from there.
My Images Broke After I Uploaded It. Why?
Almost always because you uploaded a single file instead of the folder around it. The page is still asking for assets/logo.png and nothing is there. Re-upload the whole folder with its structure intact. If it persists, check for paths pointing at a local drive rather than a relative path.
Does A Published App Stay Online If I Cancel My Plan?
Not reliably. The free Starter plan keeps one published project live, so a single static site can survive a downgrade, but a second one and any always-on server will not. Export your code and your data before the billing date, not after. Moving a static folder off the Replit hosting takes ten minutes; recovering something that has already been taken down takes considerably longer.