Deployment
Pick the deploy target and architecture at generatesaas init, avoid the blocked combinations, and ship to a host that supports them.
Every project picks a deploy target (node or vercel, flag --deploy) and an architecture (fullstack or separate, flag --architecture) at generatesaas init, recorded in .generatesaas/manifest.json. The shared Hono backend (@repo/api) is identical on every target - only the runtime host and the mount point differ.
Target and architecture
The architecture picks where @repo/api runs; the target picks the runtime host.
| Architecture | Where @repo/api runs | Choose when |
|---|---|---|
fullstack (default) | In-process, inside the frontend | Default - one host, no CORS, no API_URL |
separate | Standalone Hono server in apps/backend | Independent scaling, multiple frontends on one API, operational isolation |
| Target | Runtime | fullstack | separate |
|---|---|---|---|
node (default) | Long-running container | Allowed | Allowed |
vercel | Serverless functions | Allowed | Blocked |
Blocked combinations
The CLI guards these before scaffolding: the interactive flow hides the incompatible option, and passing it as a flag throws.
| Combo | Effect | Reason |
|---|---|---|
separate + vercel | fullstack auto-selects | Standalone backends need a long-running runtime |
redis cache + vercel | upstash auto-selects | Serverless cannot hold a persistent ioredis connection |
runner + vercel | Runner unavailable | The runner holds one connection open per paired device |
Three further features assume a persistent runtime and are unavailable on Vercel: local file storage (use s3), SMTP email (use resend or ses), and Content API git commits. See Vercel.
Cloudflare Workers is never a target. The backend depends on Node-only modules (geoip-lite, ioredis, pg). Only node and vercel exist.
Target and architecture are baked in at init. Change the architecture in place with Switch to separate or Switch to fullstack - re-running the CLI regenerates packages/config and .env wholesale.
Hosts
Every node host runs the same image and supports both architectures - the boilerplate has no platform-specific code.
| Host | Target | Guide |
|---|---|---|
| Vercel | vercel | Vercel |
| Railway | node | Railway |
| Fly.io | node | Fly.io |
| Render | node | Render |
| Any VPS or container host | node | Self-hosting with Docker |
| Dokploy (self-hosted PaaS) | node | Dokploy |
| Coolify (self-hosted PaaS) | node | Coolify |
Going to production
The pre-launch checklist: env vars, SEO flags, webhooks, migrations.
Separate backend
The standalone Hono server on API_PORT - origins, ports, graceful shutdown.
Reverse proxy
Route frontend, backend, and docs by host and path.
Client IP
What the backend detects on its own, and the one case that needs TRUSTED_PROXY.