Overview
Use Vercel when the app is Next.js and the team wants previews, ISR, and zero infra work. Use Cloudflare when cost matters past the free tier, when Workers, R2, KV, or Durable Objects are part of the architecture, or when you do not want a host that is tied to one framework. Vercel optimizes for developer experience on Next.js; Cloudflare optimizes for primitives and price at scale. See vercel and cloudflare for the per-platform rule sets.
When Vercel wins
Vercel is the right pick for any Next.js app where preview deploys, ISR, and image optimization are part of the workflow.
- Next.js is Vercel’s product. Server Components, ISR, Server Actions, Route Handlers, and Image Optimization all work the day they ship; on Cloudflare the same features need OpenNext adapters and lag by weeks or months.
- Preview deploys per pull request, with a unique URL, automatic Lighthouse scoring, and team comments. The Cloudflare Pages equivalent exists but the UX is shallower.
- Image Optimization, Edge Config, Speed Insights, and Web Analytics are first-party features billed on the same invoice; on Cloudflare you assemble them.
- The Vercel dashboard is the best deploy log and rollback UI on the market. Cloudflare’s is improving but is behind.
- For a small team that ships React or Next.js, the answer is rarely “more flexibility” and usually “ship faster.” Vercel buys you time.
When Cloudflare wins
Cloudflare is the right pick when cost matters, when you want edge primitives, or when the app is not Next.js-shaped.
- Pricing curve: bandwidth is free on Cloudflare Pages and Workers Free. Vercel charges past 100 GB and the per-GB cost compounds. A modest static site that goes viral on Vercel can hit four-figure bills overnight.
- Edge primitives: Workers, R2 (S3-compatible object store with no egress fees), KV (eventually consistent key-value), Durable Objects (single-instance stateful actors), D1 (SQLite at the edge), Queues, Workflows. Vercel has Edge Functions and KV but the surface is smaller and pricier.
- Workers run V8 isolates with sub-5ms cold starts; Vercel Edge Functions are the same V8 isolates underneath but the ergonomics for non-Next.js apps are weaker.
- Vendor lock-in shape: Cloudflare’s APIs are mostly portable (R2 is S3-compatible, KV is a thin layer over storage). Vercel’s ISR and Image Optimization are harder to leave.
- DNS, WAF, DDoS protection, Zero Trust, and Pages all live in one account. The bundled story is hard to match.
- Self-hosted Workerd lets you run the same runtime on your own hardware; Vercel has no equivalent.
Trade-offs at a glance
| Dimension | Vercel | Cloudflare |
|---|---|---|
| Next.js fit | First-party; every feature works | OpenNext adapter; lag and rough edges |
| Pricing (bandwidth) | Free tier then per-GB | Free on Pages and Workers Free |
| Pricing (functions) | Per invocation plus duration | Per request; cheaper at scale |
| Cold start | Edge: fast; Node: slower | Workers: under 5 ms |
| Storage primitive | Blob, KV, Postgres | R2, KV, D1, Durable Objects, Workflows |
| Image optimization | First-party | Cloudflare Images (separate product) |
| Preview deploys | Best in class | Functional; less polished |
| Analytics | Speed Insights, Web Analytics | Cloudflare Analytics; privacy-friendly |
| Framework lock-in | High around Next.js | Low |
| Self-host story | None | Workerd runs locally and on bare metal |
| Egress fees | Bandwidth past tier | Zero on R2 |
| DDoS / WAF | Vercel Firewall | Industry-standard; included |
Migration cost
Vercel-to-Cloudflare is the common direction once a Next.js app hits a bandwidth bill. The reverse is rare.
- Vercel to Cloudflare (Next.js app): adopt OpenNext or
@opennextjs/cloudflare, port image optimization to Cloudflare Images or a build-time alternative, and rewrite ISR as cached fetch plus Workers Cache API. Plan two engineer-weeks for a medium app; longer if you used Vercel-specific features. - Vercel to Cloudflare (Astro, Hono, SvelteKit): close to a one-day port. The deploy target changes; little else.
- Cloudflare to Vercel: trivial for static sites; for Workers-based apps, rewrite Workers handlers as Edge Functions or Node functions and remap KV, R2, and Durable Objects to Vercel’s equivalents (often Upstash and Vercel Blob). Plan one to three engineer-weeks.
Recommendation
- New Next.js app, small team, paying for shipping speed: Vercel. The DX dividend is real.
- New non-Next.js app (Astro, Hono, SvelteKit, Remix, plain Workers): Cloudflare.
- Side project or marketing site that might go viral: Cloudflare Pages. The bandwidth math wins.
- High-traffic Next.js commerce site already on Vercel: stay until egress is the line-item that hurts; then port the assets to R2 with a CDN-fronted bucket.
- App that needs WebSockets at scale, durable objects, or per-user single-writer state: Cloudflare. See cloudflare-workers and cloudflare-r2.
- Existing Vercel team with no cost pain: stay. Switching costs exceed the savings under 1 TB of egress per month.