Migrating from Render
Render is a mature PaaS, managed Postgres, Redis, background workers, and cron all on one bill. Doable is leaner: container deploys with flat $0/$15/$39 pricing, external-DB attach instead of bundled databases, and BYO server support that's free at every tier.
Most Render services migrate without code changes. The decision points are how you handle databases and how many services you need running.
Render's CLI doesn't have a single bulk-export command, copy them out of the dashboard's env section into a local `.env` file.
One-time setup.
npm install -g doable-cli && doable loginDoable detects the runtime (Node, Python, static, Docker) the same way Render does.
doable projects createEncrypted at rest, injected at container start.
doable env import .env.renderFor Render Postgres: `pg_dump` from Render, restore into Neon (or Supabase, Upstash), then `doable addon attach postgres <new-url>`. Doable attaches external DBs rather than provisioning its own.
First deploy hits a cold cache. Subsequent deploys reuse layers.
doable deployRender's "background worker" service type maps to a Doable project with no public port. Same pattern; just deploy your worker code as its own Doable project.
Runtime detection mirrors Render's, Node, Python, Go, Ruby, Docker all auto-detected from standard files. Build commands inferred from `package.json` scripts (or your specified build command via `doable env set BUILD_CMD`).
Web services and background workers both work. Web services get a public URL with HTTPS; background workers run with no exposed port.
Databases: Render bundles Postgres + Redis on the same bill. Doable doesn't provision databases on its own infrastructure, you attach external providers (Neon, Supabase, Upstash) via `addon attach`. Trade-off: you split the bill, but you keep databases independent of your deploy platform.
Cron jobs: Render has a dedicated cron primitive. Doable doesn't, most users either run a long-lived container with `node-cron` / `APScheduler`, or use a managed external scheduler like Upstash QStash.
Persistent disks: Render supports persistent volumes for non-database stateful workloads. Doable doesn't expose persistent volumes for cloud projects (BYO servers can mount any local volume).
Pricing: flat $0/$15/$39 vs. Render's per-instance + per-bandwidth tiers. For predictable workloads Doable is usually cheaper.
Yes for any standard runtime. The auto-detection is similar enough that most projects deploy without changes. If you have a custom build command set in Render's dashboard, replicate it in your `package.json` scripts or via a Dockerfile.
Two options: (a) run a long-lived container with `node-cron` (Node) or `APScheduler` (Python) that schedules work in-process, or (b) use a managed external scheduler like Upstash QStash or Trigger.dev that pings a public endpoint on your deployed app at the desired times.
Migrate to Neon, Supabase, or Upstash. `pg_dump` from Render's connection string, restore to the new provider, then `doable addon attach postgres <new-url>`. Most databases under a few GB migrate in 5–15 minutes.
Yes, background workers deploy as Doable projects with no public port. The Free tier covers one project, so a single worker counts as your free project. For web app + worker on the same plan, Starter ($15/month, 3 projects) is the next step up.
No credit card. Deploy your first project in under a minute.