Vercel vs Railway
Serverless CDN platform vs persistent container hosting. We compare pricing, use cases, cold starts, and which projects each is actually built for.
Core Trade-off
Vercel: best Next.js support and PR preview URLs, serverless limits mean no persistent processes or WebSockets. Railway: always-warm containers, no timeouts, more predictable pricing.
Recommendation by Scenario
Zero-config Next.js, PR preview URLs, image optimization, and edge middleware all just work. The cold start tradeoff is acceptable for most web apps.
Persistent containers eliminate cold starts that make internal tools feel broken. Scheduled reports run without hitting timeouts.
Vercel's 10-60s timeout limit kills long-running jobs. Railway containers run indefinitely — workers, queues, and cron jobs all work natively.
Vercel serverless functions can't maintain WebSocket connections. Railway persistent containers support them natively.
Serverless scales to zero when idle and handles traffic spikes without configuration. Railway containers need manual scaling at high load.
| Criterion | Vercel | Railway |
|---|---|---|
| Next.js Support | 10Built by the Next.js team — zero-config, all features work | 7Works well but some edge features need manual config |
| Free Tier | 8Generous hobby tier for frontend and serverless | 6$5 credit/month — covers light usage but not a real app |
| Cold Starts | 5100–400ms cold start on serverless functions after inactivity | 10Zero — persistent server, always warm |
| Background Jobs | 310s timeout on hobby, 60s on Pro — not suitable for long jobs | 10Unlimited runtime — cron jobs, queues, workers all supported |
| Database Hosting | 3No built-in database — use Neon or PlanetScale | 10Managed Postgres, Redis, MySQL in the same platform |
| Preview Deployments | 10Every PR gets a preview URL automatically | 5Environments exist but less seamless than Vercel's PR previews |
| Pricing Predictability | 6Bandwidth and function invocation costs can spike unexpectedly | 9Fixed container pricing — predictable monthly bill |
| WebSocket Support | 3Not supported on serverless — use a separate service | 10Full WebSocket support on persistent servers |
AI Coding Fit
Both are deployment targets, not libraries. AI codegen quality is identical. The decision is about execution model, not developer tooling.
What's Being Traded Off
The fundamental difference is execution model, not developer experience.
Vercel runs code as serverless functions: they start on request, run, and stop. No state between requests. Function timeout limits (10s hobby, 60s Pro). Cold starts after inactivity. Scale to zero automatically.
Railway runs code in persistent containers: your server starts once and stays running. No cold starts. No timeouts. WebSockets work. Background jobs run indefinitely. You pay for the container whether it's handling requests or not.
The trap: choosing Vercel for a Next.js project, then building features (webhooks, cron jobs, WebSockets) that hit the serverless execution limits and require workarounds.
Where Each Wins Clearly
Vercel wins when:
- Deploying a Next.js app — Vercel built Next.js, zero-config support
- You need PR preview URLs for every branch automatically
- Traffic is unpredictable — serverless scales to zero when idle
- Your API endpoints respond in under 10 seconds
Railway wins when:
- Running background jobs, cron tasks, or queue workers
- Building anything that needs WebSocket connections
- Wanting database and app in the same platform with one bill
- Building long-running processes (data pipelines, media processing, scrapers)
- You need predictable monthly costs — no surprise bandwidth bills
The Hidden Cost of Serverless Limits
Vercel's limits are real constraints, not edge cases:
Timeouts: If you're sending emails, generating PDFs, calling slow external APIs, or doing any non-trivial processing, you'll hit the 10-60 second timeout. The workaround (background jobs via queue) adds architectural complexity that wasn't needed.
Cold starts: After 5-30 minutes of inactivity, the next request takes 100-400ms longer. For consumer-facing apps with steady traffic, invisible. For internal tools used 9-5, every morning starts with a cold database connection.
WebSockets: Not possible on Vercel serverless. Real-time features require a separate service (Pusher, Ably, Liveblocks) — another vendor, another monthly bill.
AI Coding Fit
Both are deployment targets, not libraries. AI code generation quality is identical — you're writing the same TypeScript, the same API routes, the same logic. The deployment platform doesn't affect how well AI tools assist you.
The only exception: AI tools will correctly use next/image, Vercel's @vercel/og, and other Vercel-specific APIs without issue. Railway-specific configuration is simpler (just Dockerfile or nixpacks.toml) and AI handles it fine.
Vendor Lock-In
Vercel: Moderate. next/image optimization, ISR, and Edge Middleware work best on Vercel. Deploying the same Next.js app to Railway or Fly.io requires adapters for some features.
Railway: Minimal. Your app runs in a container — the same Docker image works on Fly.io, Render, or any VPS. Railway-specific config is just railway.toml.
Migration Pain
Vercel → Railway: Low for simple apps. Higher if you're using Vercel-specific features (OG image generation, Edge Middleware, ISR). Containerize, add a railway.toml, done.
Railway → Vercel: Low to moderate. Vercel expects Next.js conventions. Any non-Next.js app needs configuration. Long-running processes need to be extracted to separate services.
Final Recommendation
Use Vercel for Next.js frontend and simple API routes. Use Railway when you need persistent processes, background jobs, or WebSockets — or when you want to co-locate your database with your app on one bill.
A common pattern: Vercel for the Next.js frontend, Railway for background workers and cron jobs. This works well but adds deployment complexity — only split if you actually need both execution models.
Prompt Starter
I'm deploying a Next.js app to [Vercel / Railway].
Help me configure [deployment / environment variables / build settings] with:
- [specific requirements]
[If Railway]: The app needs persistent server behavior / WebSocket support / background jobs.
[If Vercel]: The app is a Next.js App Router project with serverless API routes.