Why I Chose Cloudflare Workers Over Vercel for My Projects
Comparing deployment platforms for Next.js applications. Costs, cold starts, edge compute, and DX.
Why I Chose Cloudflare Workers Over Vercel for My Projects
I ran my projects on Vercel for two years. It was fine. The DX was great, deployments were seamless, and I never thought much about infrastructure. Then I looked at my bill for a side project that gets maybe 10,000 visits a month, and I started thinking.
The Cost Problem
Vercel's free tier is generous for hobby projects. But the moment you need anything beyond the basics -- analytics, image optimization, more serverless function invocations, additional team members -- costs add up fast. Their Pro plan starts at $20/month per member, and bandwidth overages can surprise you.
Cloudflare Workers has a free tier that covers 100,000 requests per day. Their paid plan is $5/month and includes 10 million requests. For personal projects and small apps, the math is not even close.
Cold Starts Matter
This is what actually pushed me to switch. Vercel's serverless functions have cold starts. For most pages it is fine because ISR and static generation handle the common paths. But API routes and dynamic pages would occasionally take 1-3 seconds on the first hit. Users notice that.
Cloudflare Workers runs on their edge network with V8 isolates instead of containers. Cold starts are measured in single-digit milliseconds. The difference is tangible.
OpenNext: The Bridge
The main obstacle used to be that Next.js was tightly coupled to Vercel's infrastructure. OpenNext changed that. It is an adapter that packages your Next.js app for deployment on other platforms, including Cloudflare Workers.
Setting it up was not frictionless, but it was manageable.
# Install the adapter
npm install @opennextjs/cloudflare
# Add a wrangler config
# wrangler.jsonc handles Workers configuration// wrangler.jsonc
{
"name": "my-site",
"main": ".open-next/worker.js",
"compatibility_date": "2025-04-01",
"compatibility_flags": ["nodejs_compat"],
"assets": {
"directory": ".open-next/assets",
"binding": "ASSETS"
}
}The build process compiles your Next.js app into a Worker-compatible bundle. Most features work out of the box: App Router, Server Components, API routes, middleware. There are edge cases with some Node.js APIs that are not available in the Workers runtime, but I have not hit any blockers for my use cases.
Wrangler CLI
Vercel's CLI is good. Wrangler is also good, just different. Deployments are fast, logs are accessible, and you get a local development mode that accurately simulates the Workers environment.
# Deploy to production
npx wrangler deploy
# Tail logs in real time
npx wrangler tail
# Local development
npx wrangler devOne thing I appreciate about Wrangler is the transparency. You can see exactly what is being deployed, inspect the bundle size, and configure everything through a single file.
When Vercel Still Makes Sense
I am not anti-Vercel. It is the right choice in several scenarios. If you are on a team that values zero-config deployments, if you rely heavily on Vercel-specific features like their image optimization CDN or their analytics, or if your project uses features that OpenNext does not fully support yet -- stick with Vercel. The DX premium is worth it when it saves your team hours of configuration.
My Recommendation
For personal projects, indie apps, and anything cost-sensitive: Cloudflare Workers with OpenNext. You get edge performance, low costs, and a platform that does not penalize you for success.
For teams, enterprise apps, and projects where deployment simplicity outweighs cost: Vercel is still a strong choice.
I moved three projects over the past few months. Total monthly cost went from around $45 to $5. Performance improved. The migration took a weekend per project. That was a trade I was happy to make.