doable.do

Migrating from Vercel

How to migrate a Vercel app to Doable

Vercel's metered bandwidth, build minutes, and per-seat pricing add up fast for small teams. Doable runs your Next.js app as a standard Node container with flat per-month pricing, $15 for 3 projects, $39 for 10. Most Vercel projects move over without any code changes.

The only Vercel features that don't carry over are Edge Functions (V8-isolate runtime) and ISR-on-edge specifically. Standard Next.js features, SSR, API routes, server actions, middleware, on-demand revalidation, all work the same.

Step by step

  1. 1

    Export your env vars from Vercel

    Pull the production env vars into a local file. We'll import this in one command on the Doable side.

    vercel env pull .env.vercel --environment=production
  2. 2

    Install the Doable CLI and log in

    One-time setup.

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

    Create the project on Doable

    From your repo directory. Doable detects Next.js automatically, no `doable.json` needed.

    doable projects create
  4. 4

    Import your env vars

    Bulk-import from the file you exported. Each var is encrypted at rest with AES-256-GCM.

    doable env import .env.vercel
  5. 5

    Deploy

    First deploy takes 30–90 seconds. Doable runs `npm install`, `npm run build`, then `npm run start` in a Node container.

    doable deploy
  6. 6

    Cut DNS over

    Point your custom domain's CNAME at `cname.doable.do` (apex: A record, IP returned by `domain connect`). Then `doable domain connect <hostname>`. Let's Encrypt provisions HTTPS within a minute. The Vercel deployment can keep serving until DNS propagates.

What carries over without changes

Standard Next.js features: app router, pages router, SSR, static pages, API routes, route handlers, server actions, middleware (runs in Node not edge isolates), `getServerSideProps`, `getStaticProps`, on-demand `revalidatePath`/`revalidateTag`. Anything you can run locally with `next start` runs on Doable identically.

Build-time and runtime env vars work the same way. Both `NEXT_PUBLIC_*` and server-only vars are injected via the same env-var system. Doable encrypts at rest and injects at container start, the same shape as Vercel.

What's different

Edge Functions don't carry over, they require V8 isolates that Doable doesn't run. Most apps have very few real Edge Functions (often just middleware), and middleware runs fine in Node on Doable.

ISR-on-edge specifically isn't supported (revalidation request hits a single region, not the edge). On-demand revalidation via `revalidatePath` works.

Image optimization runs through Next.js's built-in optimizer (still optimised, just not Vercel's edge-distributed CDN). For most apps the difference isn't measurable.

Pricing: flat $15 (3 projects) or $39 (10 projects). No per-seat, no metered bandwidth, no per-function-invocation, no per-build-minute. The plan price is the bill.

Database

If you're using Vercel Postgres (powered by Neon), you can keep using it directly, paste the connection string into `doable addon attach postgres <url>` and it's injected as an encrypted env var. Same for KV (Upstash) and Blob (storage providers).

If you want to consolidate billing onto a separate provider, sign up for Neon or Supabase directly, point your existing Postgres URL at it, and `addon attach`.

FAQ

Will my Next.js app work on Doable without changes?

Almost always yes. The only changes that might be needed are if you're using Edge Functions (move to standard API routes, usually a 5-line change) or relying on Vercel-specific environment variables like `VERCEL_URL` (Doable provides equivalent vars; map them in your config).

How does Doable's pricing compare to Vercel?

For most small teams Doable is significantly cheaper. Vercel Pro is $20/seat/month plus metered bandwidth, build minutes, and edge function executions. Doable Pro is $39/month flat for 10 projects with no usage metering. Vercel can be cheaper at very high static-asset traffic if you've optimised for their CDN.

What about Vercel's preview URLs for pull requests?

Doable supports anonymous preview deploys via `doable preview` (8h, no signup required). PR-triggered deploys via the GitHub App are supported too, with simpler tooling than Vercel's comment bot.

Can I roll back if the migration goes wrong?

Yes, keep the Vercel deployment live until you're confident. The DNS cutover is reversible (just switch the CNAME back). Doable also keeps every deploy's artifact so you can `doable rollback` if a specific deploy breaks something.

Try Doable free

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