doable.do

Migrating from Replit

How to migrate a Replit project to Doable

Replit Deployments add per-resource and per-hour compute charges that scale with how busy your app is. Doable runs your code as a standard Docker container with flat per-month pricing, $0/$15/$39, and the same image runs anywhere Docker runs.

Most Replit apps move over without code changes. The only friction is getting the source out of the Repl and into a regular folder.

Step by step

  1. 1

    Get your Repl source

    In Replit, go to the three-dots menu and choose Download as zip, or, if your Repl is connected to GitHub, just clone the repo. You want a regular folder of code.

  2. 2

    Install the Doable CLI and log in

    One-time setup.

    npm install -g doable-cli && doable login
  3. 3

    Copy your secrets out of Replit

    Replit's Secrets pane has your env vars. Copy them into a local .env file (one KEY=VALUE per line) so we can bulk-import.

  4. 4

    Create the Doable project

    From the unzipped (or cloned) directory. Doable detects Node, Python, static, or Dockerfile.

    doable projects create
  5. 5

    Import env vars

    Encrypted at rest, injected at container start.

    doable env import .env
  6. 6

    Deploy

    First deploy takes 30–90 seconds.

    doable deploy

What carries over

Most Replit apps work without changes. Node, Python, Go, Ruby, static, all auto-detected from standard files (`package.json`, `requirements.txt`, `go.mod`, etc.). If your Repl uses unusual system packages (e.g. specific binaries from a Nix config), you may need to add a Dockerfile to capture them, usually a 5-line wrap.

Replit's `.replit` config file isn't read by Doable, but its run command typically maps to a `package.json` `start` script or a Procfile-style entry that Doable picks up.

What's different

No in-browser IDE. You write code locally in VS Code, Cursor, Vim, or Claude Code (with the MCP plugin) and `doable deploy` from the terminal.

No always-on by default in browser-side tutorials, Doable always runs your container continuously. (Replit Free Repls sleep when idle; Doable's Free tier doesn't.)

Pricing: flat $0/$15/$39 vs. Replit's subscription + per-hour compute. For predictable workloads Doable is usually cheaper; the comparison gets closer for very low-traffic apps that benefit from Replit's sleep behaviour.

Database: bring an external one via `doable addon attach`. Replit DB doesn't have a direct migration path, most users move to Neon, Supabase, or Upstash and refactor accordingly.

FAQ

Will my Replit app work on Doable?

Yes for any standard runtime. The auto-detection covers Node, Python, Go, Ruby, static, and Dockerfile-based projects. The most common gotcha is Replit-specific packages installed via Nix, if you hit one, add a Dockerfile that includes the equivalent apt packages.

What about Replit DB?

There's no direct migration path. Most users export their data (Replit's `replit.db` library has a `db.list()` method to dump keys) and move to a Neon Postgres or Upstash Redis, then `doable addon attach`. The schema rewrite is small for typical key-value usage.

Can I still iterate quickly without an in-browser IDE?

Pair Doable with Claude Code, Cursor, or the editor you already use. The iteration loop becomes: edit → save → `doable deploy` (30–90 seconds). For very rapid prototyping, run locally first and deploy when you have something ready to share.

Will my app cost more or less than Replit Deployments?

For most projects, less. Doable's Starter ($15/month) covers 3 projects with no per-hour compute charges. Replit Deployments add per-resource charges that compound with traffic. The exception is very low-traffic always-idle apps, where Replit's sleep-when-idle behaviour can be cheaper.

Try Doable free

No credit card. Deploy your first project in under a minute.