Next.js + Doable
Doable runs Next.js apps as standard Node containers. SSR, API routes, static export, ISR, all work the same way they do locally. There's no platform-specific code path to learn or unwind later.
If you're on Next.js today and want flat pricing, BYO server support, or AI-tool integration without rewriting your deploy pipeline, the workflow is the same as any other Node app.
Or use the MCP plugin if you deploy from Claude Code or Codex.
npm install -g doable-cliOne-time device login.
doable loginFrom your Next.js project directory. Doable detects Next.js, runs `npm install` + `npm run build`, and starts the production server.
doable deployYou'll get a `<slug>.doable.do` subdomain with automatic HTTPS. Add a custom domain on Starter or Pro.
The build worker reads `package.json`. If it sees `next` as a dependency, it picks the Next.js build path: `npm install`, `npm run build`, then `npm run start` as the container's entry. The output port is detected from your `start` script or defaults to 3000.
If you have a custom Dockerfile in the repo root, that wins, Doable uses your Dockerfile as-is. This is the escape hatch for anything unusual (custom server, monorepo, edge runtime quirks).
SSR, API routes, server actions, middleware, static page generation, dynamic routing, route handlers, app router, pages router. Anything in standard Next.js works because it runs in a normal Node container with the production build.
Environment variables go in via `doable env set KEY value` (or the dashboard) and are encrypted at rest with AES-256-GCM. They're injected into the container at start time the same way Vercel injects them.
No edge runtime, Doable runs Node, not the V8 isolates Vercel uses for Edge Functions. ISR with on-demand revalidation works (it's just an HTTP request), but ISR-on-edge specifically does not.
No global anycast routing, the container runs in one region. Most apps don't need multi-region; if yours does, that's the trade-off to know about.
No Vercel-specific build output format. Your build is a normal Docker image you can pull yourself if you ever need to.
No. Doable auto-detects Next.js from `package.json` and builds it correctly. Add a Dockerfile only if you need a customisation Doable's default build can't handle.
Yes, middleware runs in the same Node process as the rest of the app. The Edge runtime variant of middleware is also accepted but executes in Node (not V8 isolates).
Yes. Run `doable server add` to register your server (any Linux host with Docker), then `doable deploy --target <server-id>`. Same workflow, your hardware. Free at every plan tier.
Use `doable addon attach` with a Postgres / Redis / MongoDB connection string from any provider (Neon, Supabase, Upstash, MongoDB Atlas, your own URL). The string is stored as an encrypted env var and injected into your container at start time.
No credit card. Deploy your first project in under a minute.