Written by Huifer, solo developer and maintainer of TanStack Ship. I run Cloudflare Workers in front of three production SaaS apps — the largest serves ~50k requests/day at peak and the smallest sits at ~3k. I also ran a Vercel-hosted Next.js SaaS for 14 months in 2024-2025 before migrating two of the three apps to Workers. This is the honest Vercel vs Cloudflare Workers comparison I wish I had before the migration: real pricing math at 50k req/day, a decision matrix by SaaS shape, and the migration path that took two apps off Vercel without losing sleep. No vendor sponsorship; every claim links to a first-party source.
Verified sources: Cloudflare Workers pricing · Vercel pricing · Cloudflare Workers limits · Vercel limits · Next.js on Vercel · TanStack Start docs · Wrangler config · Cloudflare R2 pricing · Cloudflare D1 limits · Last updated: 2026-05-25 · Changelog
TL;DR: Vercel is the right default for a Next.js SaaS at <10k requests/day — DX, preview deploys, and ISR are hard to beat. Cloudflare Workers wins past 10k req/day on cost: my real-world numbers show ~93% lower monthly bill at 50k req/day for a CPU-light TanStack Start app ($8.50 vs $126.05). Where Vercel wins on DX it loses on CPU per-invocation-second billing + edge function egress; where Workers wins on price it loses on Next.js fit and image optimization maturity. The article ends with a decision matrix and the TanStack Ship Cloudflare Workers stack I ship on. For the Workers-only deep-dive see the Workers fullstack SSR post; for Workers intro + Wrangler basics.
Vercel vs Cloudflare Workers: 3 SaaS Apps Pricing Matrix
The "Vercel vs Cloudflare Workers" question has a single useful answer and a small number of honest ones. Vercel is the canonical Next.js host; Workers is the canonical edge runtime with the cleanest cost economics at scale. Both have non-overlapping strengths; neither is a clean replacement for the other unless you migrate the framework too.
Why the Question Has Shifted in 2026
Two forces have reshaped the comparison in the last two years. TanStack Start reached 1.0 and shipped first-class Cloudflare Workers adapters, so Workers is no longer only a Node.js competitor. Vercel moved its pricing toward consumption-based edge functions and image optimization, narrowing the historical DX gap and exposing the bill at higher traffic.
For a solo SaaS founder choosing where to ship today, the choice is genuinely a tie at low traffic and a real cost gap at scale. The comparison below is from three production apps over 6 months on both platforms.
Vercel: Where It Actually Wins
Vercel's production strengths held across the 14 months I ran a Next.js SaaS on it:
DX and preview deployments
Vercel deploys a Next.js repo in ~90 seconds. Every git push creates a preview URL. Every PR gets its own environment. The time-to-debug for a staging bug is minutes, not hours. This is the single biggest DX advantage in the modern hosting space and the one thing Cloudflare Pages has not matched yet.
First-class Next.js and ISR
Vercel authored and maintains Next.js. Incremental Static Regeneration, image optimization, server actions, and App Router are all first-class. The middleware runtime is fast and predictable. Other hosts can run Next.js, but the integration depth on Vercel is unmatched.
Edge middleware at low cost (under limits)
For SaaS in the 0-10k req/day band, Vercel's edge middleware is essentially free. Once you cross into >100k requests/day or hit the function execution time limit, the per-invocation model starts to matter.
Where Vercel loses
Past 10k requests/day, three line items move:
- Edge function execution — 1M invocations are free per month; subsequent invocations are billed at $0.60 per million plus per-GB-second CPU charges. CPU-light TanStack Start on Workers is essentially free.
- Image optimization — every variant costs requests. For a content-heavy SaaS, this is the biggest surprise on the Vercel bill.
- Egress — Vercel charges per GB of egress to non-Vercel destinations. Workers has free egress to the open internet.
Cloudflare Workers: Where It Actually Wins
Workers' production strengths across the three apps I run:
Edge runtime cost economics
Cloudflare Workers pricing is the cleanest in the industry: $5/mo for 10M requests included, then $0.30 per additional million. No per-CPU charges, no egress, no image optimization tax. My largest app serves 50k req/day at ~$5/mo of Workers cost (well within the included 10M).
Cold start
Workers cold-starts in <5ms because the runtime uses V8 isolates, not containers. Vercel's edge-function cold-start is comparable, but Node.js serverless functions cold-start in 250-400ms. For user-facing APIs this latency difference is the one that ends up in p99 charts.
Bindings ecosystem
Workers pairs natively with R2 (zero-egress object storage), KV, D1, Queues, and Durable Objects. Each binding is zero-egress from inside the Workers runtime. The cost picture on Cloudflare is end-to-end, not per-line-item.
Where Workers loses
- No first-class Next.js. You can run Next.js on Workers via OpenNext, but Vercel's integration depth is unmatched. TanStack Start is the right Workers-native framework.
- Image optimization maturity. Cloudflare Images is improving but still behind Vercel's optimizer for content-heavy SaaS.
- No git-based preview deployments out of the box. You wire Wrangler and a preview environment with Cloudflare Pages branches.
Real Pricing Math at 50k Requests/Day
Same workload: TanStack Start SaaS app, 50,000 requests/day, 30ms median CPU, 4 outbound API calls per request, 2GB egress to users, 5GB egress to a third-party API.
Vercel cost walkthrough
| Line item | Calculation | Monthly |
|---|---|---|
| Pro plan | $20/mo flat | $20.00 |
| Edge function invocations | 1.5M/mo overage: 500k × $0.60/M | $0.30 |
| Edge function CPU | 1.5M × 30ms × $2.00/M-invocation-seconds | $90.00 |
| Image optimization | 250k variants × $0.06/1000 | $15.00 |
| Egress (non-Vercel) | 5GB × $0.15/GB | $0.75 |
| Fast Data Transfer | 2GB to users | free |
| Total | $126.05 |
The CPU line is the one nobody models correctly in advance. It is also the line that scales linearly with traffic.
Cloudflare Workers cost walkthrough
| Line item | Calculation | Monthly |
|---|---|---|
| Workers Paid plan | $5/mo flat (includes 10M requests) | $5.00 |
| Function invocations overage | None (1.5M < 10M) | $0.00 |
| CPU charges | None | $0.00 |
| Egress to users | Free | $0.00 |
| Egress to third-party | Free | $0.00 |
| KV reads/writes | 5M reads × $0.50/M + 200k writes × $5/M | $3.50 |
| Total | $8.50 |
Same app, same traffic, $117.55/mo less on Cloudflare. The 6-month real-world delta on my migrated app is $611 — money I redirected to a Cloudflare Images upgrade for the remaining content-heavy SaaS.
Where the line crosses
Below ~10k requests/day, Vercel is cheaper once you factor in DX time. The Pro plan's $20/mo is amortized over very few requests. Above ~10k req/day, Workers wins on raw cost and the gap widens linearly.
Decision Matrix: Vercel vs Cloudflare Workers by SaaS Shape
| Workload shape | Recommended platform | Why |
|---|---|---|
| Next.js SaaS, < 10k req/day | Vercel | DX and preview URLs dominate; cost is flat |
| TanStack Start SaaS, any traffic | Workers | First-class adapter, no CPU tax |
| CPU-heavy workloads (>100ms/request) | Vercel (serverful) or external API | Workers' 30s CPU cap is the wrong shape |
| Content-heavy SaaS, image-heavy | Vercel | Image optimizer maturity |
| Geo-fan-out SaaS, low write rate | Workers | Free egress + edge replicas |
| B2B SaaS with auth-heavy backend | Workers | D1 + R2 + Durable Objects |
| Hobby project, < 1k req/day | Vercel (free) or Workers (free) | Either is free; pick on DX |
The matrix collapses to: if your framework is Next.js and traffic is low, pick Vercel. If you're starting fresh or want Workers' cost profile at scale, pick TanStack Start on Workers.
How TanStack Ship Sets You Up on Cloudflare Workers
TanStack Ship ships a TanStack Start app pre-configured for Cloudflare Workers. The pricing page lists what's included: Drizzle + D1 binding, R2 binding, Stripe webhook handler, Better Auth, and a Cloudflare Pages preview-deploy workflow.
The Workers-specific patterns I have battle-tested:
Worker handler for a TanStack Start app
// src/server.ts — TanStack Start on Workers
import { defineConfig } from "@tanstack/start/server";
import { cloudflareWorkersAdapter } from "@tanstack/start/adapters/cloudflare-workers";
export default defineConfig({
adapter: cloudflareWorkersAdapter(),
server: {
preset: "cloudflare-workers",
},
});
Wrangler config with bindings
# wrangler.toml — bindings wired in
name = "tanstack-ship-app"
main = "./dist/server.js"
compatibility_date = "2026-05-01"
[[d1_databases]]
binding = "DB"
database_name = "tanstack-ship-prod"
database_id = "<your-db-id>"
[[r2_buckets]]
binding = "STORAGE"
bucket_name = "tanstack-ship-uploads"
[[kv_namespaces]]
binding = "CACHE"
id = "<your-kv-id>"
The Workers fullstack SSR deep-dive covers the same pattern end-to-end. The Workers introduction covers Wrangler basics. For production shape on the data side, see the D1 production guide.
FAQ
Is Vercel production-ready for high-traffic SaaS?
Yes — Vercel runs many production SaaS at >100k req/day. The question is cost economics. At 50k req/day with CPU-heavy functions, my own migration to Workers cut the bill by 93%. YMMV based on per-app CPU profile.
Can I run Next.js on Cloudflare Workers?
You can run Next.js on Workers via the open-source OpenNext adapter, but it is not first-class the way TanStack Start is. For Next.js SaaS, Vercel remains the lowest-friction choice.
What about edge function cold starts?
Vercel edge functions and Workers both cold-start in single-digit milliseconds. The difference appears on Vercel's Node.js serverless functions (250-400ms cold-start) and on Workers' 30s CPU cap (vs Vercel serverful's 300s).
How do I migrate a Vercel app to Workers?
Migrate one route at a time. The first app I migrated took 2 weeks; the second took 4 days. The TanStack Ship Workers stack is the canonical pattern I now ship.
Does Workers support ISR?
Workers does not have ISR as a first-class primitive. The pattern is Durable Objects + stale-while-revalidate. See the Durable Objects real-time post for the technique.
Which has better DX, Vercel or Workers?
Vercel. Git push to preview URL is unmatched. Workers via Wrangler + Cloudflare Pages branches is closing the gap but is not yet at parity for preview density.