Vercel vs Cloudflare Workers
Choose Vercel when a request needs more than 128 MB of memory — image processing, PDF generation, heavy SSR — or when you want framework-native DX across Node.js, Bun, Python, Rust and Go. Choose Cloudflare Workers when per-request CPU is low, you serve a lot of static assets, and you want the $5-per-month floor with no egress charges.
The two platforms bill for fundamentally different things. Vercel charges for Fluid Active CPU hours, Fluid Provisioned Memory GB-hours, and function invocations on top of a $20 Pro plan. Cloudflare charges only for requests and CPU time: duration is neither charged nor limited, requests to static assets are free and unlimited, and there are no data transfer charges. The flip side is the execution envelope — Vercel gives 2 GB of memory on Hobby and 4 GB on Pro and Enterprise with durations up to 1,800 seconds, while Cloudflare caps every Worker at 128 MB regardless of plan, with CPU time bounded at 5 minutes.
Ideal For: Framework applications whose functions need meaningful memory, long-running background work, or a wide choice of official runtimes.
Ideal For: Low-CPU request handlers, static-asset-heavy sites, and API proxies where the per-request bill and the absence of egress charges matter most.
Interactive Constraint Matcher
Calibrate your operational trade-offs below. Sliders automatically normalize to 100% to reflect strict zero-sum engineering tradeoffs.
What the runtime actually charges for, and how it handles concurrency and cold starts
What the monthly bill is actually composed of, and where the floor sits
The ceilings a workload hits before anything else breaks
Which languages and frameworks you can actually deploy, and how you get there
Based on your allocated weights, Vercel offers superior durability. Cloudflare Workers remains applicable for alternative secondary constraints.
| Evaluation Pillar / Focus | Vercel (Qualitative Assessment) | Cloudflare Workers (Qualitative Assessment) |
|---|---|---|
Execution Model & Runtime Semantics What the runtime actually charges for, and how it handles concurrency and cold starts Baseline Weight:30% Requests are low-CPU and numerous, or memory-heavy and fewer:Different billing primitives | VercelRecommended Fluid compute blends serverless flexibility with server-like behaviour: optimized concurrency runs multiple invocations inside a single function instance (available with the Node.js and Python runtimes), dynamic scaling adjusts resources before adding instances, background work continues after the response via waitUntil, and cold starts are mitigated through bytecode optimization and function pre-warming on production deployments. Cross-region and availability-zone failover and error isolation are built in. | Cloudflare WorkersConditional Cloudflare's accounting is narrower and simpler: CPU time is what gets billed, waiting on network requests — fetch() calls, KV reads, database queries — does not count toward it, and duration carries no charge and no limit at all. The platform publishes its own reference points: the average Worker uses about 2.2 ms of CPU per request, while heavier work such as authentication, server-side rendering or large payload parsing typically lands at 10-20 ms. |
Pricing Model & Billing Dimensions What the monthly bill is actually composed of, and where the floor sits Baseline Weight:25% Traffic is static-heavy, or compute-hungry:Asymmetric exposure | VercelConditional Vercel Functions bill across three dimensions: Fluid Active CPU at $0.128 per hour (4 hours included), Fluid Provisioned Memory at $0.0106 per GB-hour (360 GB-hours included), and Function Invocations at $0.60 per million (1 million included). Pro is $20 per month and includes $20 of usage credit, so a small project can run inside the credit — but memory-hungry functions that stay provisioned accrue cost even while idle. | Cloudflare WorkersRecommended Workers Paid is a $5 monthly minimum per account and then bills two things: 10 million requests included per month with $0.30 per additional million, and 30 million CPU milliseconds included with $0.02 per additional million CPU milliseconds. Requests to static assets are free and unlimited, Cloudflare does not bill subrequests made from a Worker, and there are no data transfer or bandwidth charges — so a site serving 15 million requests with 80% static assets lands at exactly the $5 floor. |
Execution Envelope & Hard Limits The ceilings a workload hits before anything else breaks Baseline Weight:25% Single request needs more than 128 MB, or runs longer than 5 minutes:Decisive difference | VercelRecommended Vercel Functions allow 2 GB of memory on Hobby and 4 GB on Pro and Enterprise, with duration at 300 seconds by default, 800 seconds maximum, and an extended maximum of 1,800 seconds on Pro and Enterprise. Concurrency auto-scales to 30,000 on Hobby and Pro and 100,000 or more on Enterprise. Bundles are 250 MB uncompressed, 500 MB for Python, and large functions are supported up to 5 GB. | Cloudflare WorkersConditional Every Worker is capped at 128 MB of memory on both the Free and Paid plans — the limits page lists the same figure for each tier and offers no higher option. CPU time is bounded at 5 minutes (30 seconds by default, raisable through Wrangler or the dashboard), Cron Triggers get 30 seconds, and subrequests are limited to 50 per request on Free and 10,000 on Paid. Requests are 100,000 per day on Free and unlimited on Paid. |
Runtime Choice & Developer Experience Which languages and frameworks you can actually deploy, and how you get there Baseline Weight:20% You need a non-JS runtime, or you want single-command edge deploys:Breadth vs minimalism | VercelRecommended Vercel ships official runtimes for Node.js, Bun, Python, Rust and Go, plus community runtimes, and positions its functions as powering "your framework of choice". The gap is that Fluid compute's optimized concurrency is available only with the Node.js and Python runtimes — the other runtimes do not get the instance-reuse behaviour that the pricing model assumes. | Cloudflare WorkersConditional Cloudflare supports JavaScript, TypeScript, Python and Rust, and runs full-stack apps on React, Vue, Svelte, Next, Astro and React Router, deployed with a single Wrangler command and no infrastructure to configure. There is no Bun or Go runtime and no community-runtime mechanism, so a stack outside that list has no path onto the platform. |
When You Should NOT Adopt Either System
Every architectural choice introduces structural compromises. If your team matches these trigger conditions, adoption will create engineering debt rather than leverage.