EthioDeploy/Docs
HomePricing
Overview

Overview

  • Getting started
  • How deploys work

Frameworks

  • Framework guides

Configuration

  • Web services & background workers
  • Environment variables
  • Addons
  • Database & Redis tools
  • Branch deployments
  • Custom domains
  • Analytics

Domains

  • Buying a domain

Agent mode

  • Agent mode
  • Agent plans & credit

CLI

  • Command-line tool

Account

  • Team access
  • Billing

Help

  • Troubleshooting
  • Still stuck?
Deploy guides
  • Next.js
  • Node.js
  • Python
  • SvelteKit
  • Django
  • FastAPI
  • Flask
  • Express
  • Laravel
  • Go
  • Lovable
  • Bolt
  • Replit
  • v0
  • Google AI Studio
  • Base44
  • Firebase Studio
  • Claude Code & Cursor
Compare
  • AI coding agent
  • Hosting in Ethiopia
  • vs Heroku
  • vs Vercel
  • vs Render
  • vs Railway
  • vs Fly.io
  • vs Netlify
  • Heroku alternatives
Deploy guidesReplit

Deploy a Replit app

Push your Replit app to GitHub and EthioDeploy builds it on every push. Most apps need a port change and new env vars; apps that use Replit Auth or App Storage need more work.

Last updated October 26, 2026

Detected by
package.json (or requirements.txt / pyproject.toml for Python)
Install
npm ci / pnpm / yarn (from your lockfile)
Build
npm run build
Start
npm start (apps with a server), or static files with an index.html fallback (frontend-only Vite apps)

These are the defaults. Override any of them in Settings → Build.

Read PORT instead of a fixed port

On Replit, the first port your server opens is mapped to the public URL, so any port works. We set PORT=3000 and send traffic there. If your server listens on a hardcoded port, the health check never gets an answer and the deploy fails. Use process.env.PORT and bind to 0.0.0.0.

Get your code out of Replit

Push it to GitHub from the Git pane: Tools → Git, initialize the repository if needed, connect your GitHub account, set the remote, then commit and push. Private GitHub repositories authenticate with a personal access token, not your password.

Or download it: in the file tree, open the three-dot menu and choose “Download as zip”, then push the folder to a new GitHub repository yourself. The zip includes uncommitted changes but not your Secrets, so copy those separately.

.replit, replit.nix and replit.md are only read by Replit. Leave them in the repo; we ignore them. If .replit has a [deployment]build or run command your app needs, copy it into the project's Build settings.

Prepare your app

Check three things in package.json and your server code:

  • A build script, if the app has a frontend to compile, and a start script that runs the production server, not the dev server.
  • The server listens on process.env.PORT and 0.0.0.0.
  • Nothing depends on REPLIT_DOMAINS, REPLIT_DEV_DOMAIN or REPL_ID. Replit sets these; we don't, so they're empty here. Replace them with your own variable, such as APP_URL.

The rest is the same as any Node app. See the Node.js guide, or the Python guide for Python repls.

Move your database

Replit's database is PostgreSQL, so it moves to an EthioDeploy Postgres addon without changing your queries. The addon sets DATABASE_URL, the same variable Replit uses.

  1. Copy your data out. Replit's production database accepts any PostgreSQL client, using the connection string from its Settings tab, so pg_dumpworks. The development database can't be reached from outside Replit.
  2. Create your tables on the addon by running your migrations from the app, for example as part of the start command.
  3. Load the data. The addon is private to your project, so you can't restore into it from your own machine. Paste a small SQL dump into the dashboard's SQL editor, or run pg_restore against DATABASE_URL from code running in your project.

The older Replit key-value store (REPLIT_DB_URL) only works on Replit. Move that data into Postgres or a Redis addon.

Replace Replit Auth, App Storage and Secrets

  • Secretsare plain environment variables. In Replit, use “Edit as .env” to copy them all, then add them in the project's settings. See Environment variables.
  • Replit Authsigns users in with their Replit accounts through Replit's own OAuth apps. Plan to replace it. Replit documents moving to Clerk, and any auth library works on EthioDeploy.
  • App Storage (@replit/object-storage) authenticates with the repl's own identity, so expect it to fail elsewhere. Move the files to an S3-compatible bucket such as Cloudflare R2. Replit only offers downloading files one at a time.

Deploy

  1. Sign in with GitHub and install the EthioDeploy app on the repo.
  2. Click “New Project” and pick the repo.
  3. Watch the build in the dashboard. When the health check passes, your app is live at <project-slug>.ethiodeploy.com. Every push to the default branch redeploys, and the old version keeps serving until the new one is healthy.

Troubleshooting

Health check times out after a successful build

Cause: The server listens on a hardcoded port or on localhost.

Fix: Listen on process.env.PORT and 0.0.0.0, then push.

The app starts its dev server in production

Cause: The start script runs the dev command, or there is none and the run command lived in .replit.

Fix: Point start at the production server, or set a Start Command in Settings.

Links or redirects point at an empty host

Cause: The code builds URLs from REPLIT_DOMAINS or REPLIT_DEV_DOMAIN.

Fix: Read your own variable such as APP_URL and set it in Settings.

Sign-in fails

Cause: The app still uses Replit Auth.

Fix: Switch to an auth provider you control, such as Clerk.

Database queries fail with relation does not exist

Cause: The new Postgres addon is empty.

Fix: Run your migrations, then load your data.

Still stuck? Check the deployment's build log in the dashboard, or see Troubleshooting.

Questions

Can I keep building in Replit after moving?

Yes, if you push from Replit's Git pane. Every push to the default branch redeploys on EthioDeploy. Remove any use of Replit Auth or App Storage first, because those stop working outside Replit.

Does my Replit database come with me?

The data does, but not automatically. Dump the production database with pg_dump using the connection string from its Settings tab, then load it into an EthioDeploy Postgres addon. The development database can't be reached from outside Replit.

How does EthioDeploy pricing compare to Replit Deployments?

Replit charges per deployment: Autoscale is $2 a month plus compute and request fees, and Reserved VMs start at $15 a month, on top of a Core or Pro plan. EthioDeploy has a free plan, and Pro is a flat $10 a month with no compute or request fees.

Ready to deploy? Sign in with GitHub and pick your repo. No Dockerfile, no YAML.

Other framework guides

Next.jsNode.jsPythonSvelteKitLovableBoltClaude Code & CursorDjangoFastAPIFlaskLaravelExpressGoFirebase Studiov0Google AI StudioBase44

See the full docs for custom domains, env vars, addons, and billing.

On this page

  • Get your code out of Replit
  • Prepare your app
  • Move your database
  • Replace Replit Auth, App Storage and Secrets
  • Deploy
  • Troubleshooting
  • Questions

Product

  • Pricing
  • Documentation
  • AI coding agent
  • Agent mode docs
  • Domains
  • Hosting in Ethiopia

Deploy guides

  • Next.js
  • Node.js
  • Python
  • SvelteKit
  • Django
  • FastAPI
  • Flask
  • Express
  • Laravel
  • Go
  • Lovable
  • Bolt
  • Replit
  • v0
  • Google AI Studio
  • Base44
  • Firebase Studio
  • Claude Code & Cursor

Compare

  • EthioDeploy vs Heroku
  • EthioDeploy vs Vercel
  • EthioDeploy vs Render
  • EthioDeploy vs Railway
  • EthioDeploy vs Fly.io
  • EthioDeploy vs Netlify
  • Heroku alternatives

Company

  • About
  • Support
  • Contact
  • Terms
  • Privacy

EthioDeploy: agentic first development and deployment, started in Ethiopia, built for developers everywhere.