Move your Replit app to AWS without taking it offline
Replit is the fastest way to get from an idea to a running app, and a genuinely bad place to leave one once people depend on it.
- Typical timeline
- 2–4 weeks for a typical app
- Pricing
- Fixed quote after a free scoping call
- Rollback
- Written, rehearsed, and executed by you before handover
What staying on Replit actually costs
Not a list of features you are missing. These are the four things that reliably turn into an incident, an invoice, or a lost deal.
- 01
The container is the single point of failure
On Replit your web server, your background jobs, your database file, and your user uploads all live in one container.
- 02
Ephemeral disk quietly eats data
Files written to the container filesystem - SQLite databases, user uploads, generated PDFs, session stores - do not survive a redeploy.
- 03
The bill scales the wrong way
Builder hosting is priced per app, per always-on instance, and increasingly per agent credit.
- 04
Compliance is a hard stop, not a negotiation
Replit does not sign a BAA, so anything touching protected health information cannot run there regardless of how careful you are.
The sentences we hear most, and what we do about each one
These are paraphrases of things founders have actually said on scoping calls. The left column is the experience; the right column is the work.
"It works, and I am terrified to touch it"
There is one environment. It is production. Every change is tested by making it in front of users, and every deploy is an act of faith, because there is no staging copy and no way back.
How we helpYou get three environments and a pipeline. Changes land in a preview environment with its own data, get promoted to staging, then to production, and every release can be reverted with one command.
"Nobody can tell me why it was slow yesterday"
The logs are a scrollback buffer in a browser tab. They are gone on restart, they are not searchable, and nothing correlates a user complaint with a request.
How we helpStructured logs shipped to CloudWatch with retention you choose, request tracing so a single user's slow page maps to a single slow query, error tracking that groups by cause rather than by occurrence, and uptime checks that alert a person. "Why was it slow yesterday" becomes a query rather than a theory.
"I do not know what I am paying for, and it keeps going up"
Credit-based pricing is genuinely hard to forecast. Agent usage, always-on instances, and autoscale all draw from the same pool, and the invoice arrives as a single number with no breakdown by cause.
How we helpBefore the migration we model your workload at current traffic, ten times current, and a hundred times current, and put the three numbers next to your Replit invoice.
"My developer says we need to rewrite it"
This is the advice founders most often arrive with, and it is usually wrong.
How we helpWe containerise what you have and change the surroundings, not the source.
"I am worried I will lose the data in the move"
It is the right thing to worry about, and it is the reason migrations get postponed for a year.
How we helpThe database is copied while the old one is still serving traffic, then kept in sync by logical replication until the moment of cutover, so the window where writes could be lost is seconds rather than hours.
Component by component, before and after
Every line is a decision we will walk you through, and every one of them is written down in the handover documentation.
| Today | becomes | After the migration | Why it matters |
|---|---|---|---|
| Replit web server (dev server, single process) | Containers on ECS Fargate behind an Application Load Balancer | Production server with real concurrency, health checks, and rolling deploys. Two tasks minimum so a restart is invisible. | |
| SQLite file / Replit Database | Amazon RDS or Aurora Serverless v2 for PostgreSQL | Automated backups, point-in-time recovery, and a restore drill we actually perform during handover. | |
| Files written to the container disk | S3 with lifecycle rules and signed URLs | Uploads stop disappearing on redeploy. Private by default, served through CloudFront where it helps. | |
| Secrets in the repl or hard-coded in source | AWS Secrets Manager, scoped per environment | Rotation is possible, staging cannot read production credentials, and nothing sensitive is in git. | |
| Always-on repl for background work | A separate worker service, or EventBridge plus a queue | Background jobs stop competing with web requests for the same CPU, and a stuck job no longer takes the site down. | |
| Replit deployment URL and its proxy | Route 53, ACM certificate, CloudFront | Your domain, your certificate, your cache rules. TLS renewal stops being something you think about. | |
| Manual redeploy from the editor | GitHub Actions building and deploying on merge | Preview environments per pull request, one-command rollback, and a deploy history you can read. | |
| Console scrollback | CloudWatch logs, metrics, and alarms | Searchable, retained, and wired to alerts that reach a human. |
What it costs to run, before and after
The comparison founders ask for first. These are vendor list prices, not a quote - the point is the shape of the curve.
| Workload | Typical builder hosting | Equivalent on AWS | What changes |
|---|---|---|---|
| One small app, low traffic | $20 – $40 / mo | $25 – $45 / mo | Roughly a wash. Migrate for control and durability, not to save money at this size. |
| Three services, steady traffic | $75 – $150 / mo | $40 – $90 / mo | Shared load balancer and one database instance across services instead of paying per app. |
| Real product, autoscaling | $300 – $900+ / mo | $120 – $350 / mo | Compute priced against use, reserved capacity for the steady baseline, spot for batch work. |
| Agent-assisted development | Credits, variable | Unchanged | Keep building in the builder if you like it. The production copy no longer depends on it. |
Vendor list prices for a small production workload at the time of writing, not figures from a specific engagement.
Four phases, each with something you can hold
Scope is fixed after phase one. Every phase ends in artefacts you keep, whether or not you continue to the next.
- 013–5 days
Inventory and target design
We map every service the app touches - including the ones nobody remembers adding - and design the AWS target around your real traffic and budget rather than around a reference architecture.
You receive
- Dependency inventory, including third-party services and webhooks
- Target architecture diagram with named AWS services
- Cost model at current, 10x, and 100x traffic
- Fixed-scope statement of work
- 025–10 days
Build the new environment in parallel
The AWS environment is stood up as infrastructure as code while your Replit app keeps serving users.
You receive
- Terraform for every resource - no click-ops
- Containerised application running on ECS
- Database, storage, secrets, and networking provisioned
- CI/CD pipeline with preview environments
- 032–4 days
Rehearse the cutover
We run the entire migration against production data in a dry run, measure how long each step takes, and write the rollback procedure.
You receive
- Timed runbook with a measured cutover window
- Row-count and checksum comparison across every table
- Webhook and third-party callback inventory, re-pointed and verified
- Written rollback procedure with a decision point
- 041 day, plus 30 days support
Cut over and hand off
Logical replication keeps the two databases in sync until the moment DNS moves, so the write-loss window is seconds.
You receive
- Zero-downtime or scheduled-window cutover, agreed in advance
- Monitoring, alerting, and on-call escalation live
- Runbook and architecture documentation your team owns
- 30 days of post-launch support
What can go wrong, and what stops it
We would rather write these down than discover them together. Each one is a real failure mode from a real migration, with the control that prevents it.
Writes landing on the old database during the switch
Logical replication runs until DNS moves, and the old instance is set read-only at cutover.
Webhooks still pointing at the old URL
Every inbound callback - payment provider, auth provider, email, cron services - is inventoried in phase 3 and re-pointed with the old endpoint kept alive as a forwarder for two weeks.
Sequences and identity columns out of step after the copy
Logical replication does not copy sequence state. Resetting every sequence is an explicit step in the runbook, verified before traffic moves, because the failure mode is duplicate-key errors on the first write.
A cold cache making the new environment look slower
We warm caches and connection pools before the switch and compare p95 latency against a baseline captured on the old stack, so "it feels slower" becomes a number rather than an impression.
The team not knowing how to operate the new stack
Handover is a phase, not an email. You get a runbook, a walkthrough recording, and a rollback you have executed yourself.
Before you book the call
The plan is designed for zero downtime and we rehearse it before executing.
Yes, and several clients do. Replit stays useful as a fast place to prototype a feature; production runs on infrastructure you own.
DigitalOcean if you want a small number of moving parts, predictable pricing, and no dedicated ops person.
For the dry run, yes - a copy, restored into an isolated account we control and destroy afterwards.
That is the normal case. We read it. Part of the deliverable is a written description of what your app actually does, which is often the first time it has existed.
Related migrations
Replit → DigitalOcean
Not every app needs AWS. If you want your own infrastructure without acquiring an ops habit, DigitalOcean gives you managed Postgres, container hosting, object storage, and a bill you can read - three moving parts instead of thirty.
Read the planLovable → your own cloud
Lovable produces a real React application against a real Postgres database, which makes this the most tractable migration on this page.
Read the planClaude Code → production
Claude Code writes genuinely good code and a great deal of it. What it does not do on its own is own the operational surface - environments, pipelines, monitoring, and the handful of decisions that only make sense with production traffic in view.
Read the plan
Thinking about moving off Replit?
The scoping call is free, and it ends with a straight answer about whether it is worth doing yet.