insights
Cloudflare vs Vercel for SaaS in 2026
Every founder we talk to asks the same question in the second week of a project: "Should we go Vercel or Cloudflare?"
Our short answer: we default to Cloudflare. The longer answer is that Cloudflare ships almost everything a SaaS needs in one platform, so you stop stitching third-party services together. Pair it with TanStack Start and you get a stack that deploys cleanly to either provider, which keeps the decision reversible.
This post explains why we picked that default, where Vercel still wins, and how to think about it for your own product.
##The TL;DR
If you are shipping a small Next.js MVP this month and want zero infrastructure decisions, Vercel is hard to beat. You will not regret it for the first year.
For everything else we build, Cloudflare wins. Storage, queues, durable state, vector search, hosted AI, edge cache, and the database all live behind one dashboard, one bill, and one API surface. You ship more product per week because you are not integrating five SaaS vendors to make one app work.
We build on TanStack Start by default because it deploys to both platforms with the same code. That means the Cloudflare-vs-Vercel choice is not a one-way door. If we hit a wall, we move.
##Why we default to Cloudflare
The pitch is not "cheaper bandwidth," although that is real. The pitch is that the platform is complete.
A typical SaaS needs auth, a database, object storage, a queue, scheduled jobs, a cache, a vector index for AI features, real-time state, and a CDN. On Vercel you assemble that from Neon, Upstash, Inngest, AWS S3, Pinecone, Pusher or Ably, and Vercel's own offerings. Every vendor is a separate signup, a separate bill, a separate set of API keys, a separate failure mode, a separate dashboard your client has to learn.
On Cloudflare, almost all of it is first-party:
- D1 for SQLite, Hyperdrive in front of an external Postgres or MySQL when you need one.
- R2 for object storage, with no egress fees.
- KV for cache, Queues for background jobs, Workflows for multi-step jobs.
- Vectorize for embeddings, Workers AI for hosted inference on Cloudflare's own GPUs.
- Durable Objects for real-time, multiplayer, rate limiting, and any state that needs to be consistent.
- Cron Triggers for scheduled jobs.
- The CDN, WAF, DDoS, and DNS that Cloudflare has always been good at, sitting in front for free.
One dashboard. One bill. One mental model. The client we hand the project to has a single place to look. That alone is worth a lot.
The bandwidth bill being cheaper is a bonus.
##Why TanStack Start in our stack
We used to ship Next.js on Cloudflare via OpenNext. It works, and we still use it for projects that are deep in the Next.js ecosystem. But for anything new, we reach for TanStack Start first.
The reasons are practical.
It deploys to both Vercel and Cloudflare with the same code. No adapter heroics, no "this feature works on one but not the other." If we are not sure where the project will end up, or the client already has accounts on one or the other, we do not have to commit on day one.
It is built around TanStack Router and TanStack Query. Both are the best in their categories. Type-safe routing, data loaders, server functions, and client cache all share a coherent model. Less glue code, less divergence between the server and the client.
It is closer to the runtime. No invisible build steps trying to optimise things you did not ask for. The mental model maps to what the platform actually runs.
It plays nicely with Workers. It uses Web Standards APIs, so the long tail of Workers compatibility gotchas that bite some Next.js features simply do not show up.
For founders, the bottom line is: TanStack Start keeps the platform decision reversible. We ship on Cloudflare, and if a year from now you have a reason to move to Vercel, the app moves with you.
##Where Vercel still wins
Being honest about this matters.
The polish on day one is unmatched. Preview URLs per PR, web vitals in the dashboard, deploy logs, the function inspector, the analytics overlay. You get a serious observability stack on git push. Cloudflare has been closing this gap fast but is not all the way there.
Next.js feels native. Every new Next.js feature ships on Vercel first. If you are pushing the absolute bleeding edge of App Router features, deploy to Vercel.
Hiring is easier. Every Next.js developer in the world has shipped to Vercel before. Onboarding a contractor takes an afternoon.
Smart defaults. Image optimisation, font loading, the cache, ISR. The framework and the platform are tuned together. You get speed without configuration.
For a small Next.js MVP with low traffic, where engineering time is the most expensive resource, Vercel is the safe pick.
##Where Vercel hurts
The complaints are predictable, and they get louder as the app grows.
Bandwidth and function invocations. Vercel bills for every gigabyte that leaves the platform and every function call. For a marketing site, this is invisible. For an app that serves images, video, large API responses, or generative AI streams, the bill line can grow faster than revenue. The most common reason teams leave Vercel is opening the invoice at the end of a viral month.
Limited primitives. If you need queues, durable state, vector search, object storage, a real cache, or AI inference, you reach for third parties. Each one is another signup, another bill, another dashboard, another integration to maintain.
Lock-in to the convenience. ISR, the image optimiser, Edge Config, Vercel KV. These work best on Vercel. Migrating off later is real work. It is not a trap, but the gravity is real.
Cold starts on Node functions. Edge functions are fast. Node functions can pause and need to spin back up. Long-tail endpoints that get hit once an hour, your users feel it.
None of this kills you at MVP scale. All of it matters at the scale you are trying to reach.
##Where Cloudflare hurts
It is not all roses.
The DX is good, not Vercel-good. Wrangler is excellent and getting better every quarter, but the dashboards, the logs, and the tracing UX are still catching up.
The runtime is V8 isolates, not Node. Most code Just Works. Web Standards APIs everywhere. A long tail of npm packages that assume Node internals will not run, or will need a flag. You learn the shape of the platform.
Some integrations require more wiring. Vercel's integrations marketplace is broader. On Cloudflare you wire things up yourself more often, or use the first-party primitive instead.
These are real costs, paid in engineering time at the start of a project. We pay them on purpose because the platform completeness pays us back over the next twelve months.
##The default stack we ship
For most SaaS builds at ZeCreator in 2026:
- Framework: TanStack Start. Same codebase, deploys to either platform.
- Hosting: Cloudflare Workers by default. Vercel if the client has a reason to be there.
- Database: PlanetScale behind Hyperdrive. Battle-tested MySQL, branching workflow for safe schema changes, pooled at the edge so Workers can hit it without burning connections. D1 only when the data is small and stays inside one Worker.
- Object storage: R2. Always. The no-egress economics are not negotiable.
- Background work: Queues plus Workflows.
- Real-time, multiplayer, rate limiting, leaderboards: Durable Objects. See Durable Objects 101 for the long version.
- AI: Workers AI for hosted inference, Vectorize for embeddings. Frontier model calls go to Anthropic or OpenAI when needed.
- Auth: Clerk or Auth.js. Both work on Workers in 2026.
- Payments: Stripe. Webhooks land on a Worker, queued for processing.
That stack runs cheap, runs everywhere, and hands off cleanly to whoever picks up the project next.
##How to pick if you are starting today
Three questions answer it.
Are you shipping a small Next.js MVP in the next four weeks, low traffic, no heavy backend? Vercel. Stop thinking about it.
Are you building something where bytes, real-time, AI, or queues are central? Cloudflare from day one. Pay the small DX tax now, save the bill later.
Are you not sure? Build on TanStack Start, deploy to Cloudflare, keep the option to move. This is what we ship most weeks.
The only wrong answer is spending three weeks debating it before you have a deployed app. Either platform gets you to a real URL faster than that debate will end.
##A note on lock-in
Both platforms create gravity. Vercel's is around Next.js features and the build pipeline. Cloudflare's is around Workers, Durable Objects, R2, and D1.
The way to keep migration cost low is to keep business logic out of platform-specific glue. Put database access behind a thin interface. Put auth behind a thin interface. Keep domain code framework-agnostic. Then the day you decide to move, you are rewriting the edges, not the middle.
TanStack Start helps with this by not asking you to opt into a platform's special features just to ship.
##How we use this with clients
Every MVP Build at ZeCreator deploys to your accounts on day one. Cloudflare by default. Vercel if you already have an account and a reason. You own the deploys, the keys, and the bills, from the first commit.
If you want a second opinion on what would fit your product, book a 15 minute call. We will tell you what we would pick, why, and what it will likely cost to run a year from now, in writing, within 48 hours.
If you want the deeper read on the Cloudflare primitive we use most, the Durable Objects 101 post is a good place to start.