deep-dive

What Is Cloudflare Workers? A Complete Guide for 2026

Cloudflare Workers explained: how V8 isolates kill cold starts, why teams flee AWS and Vercel for CPU-based billing, and the real trade-offs. Find out more.

👤 📅 November 11, 2026 ⏱️ 22 min read
AdTools Monster Mascot reviewing products: What Is Cloudflare Workers? A Complete Guide for 2026
How we research: This guide is compiled by the AdTools team from the linked sources below and current public discussion. Pricing and features change often, so please verify time-sensitive details with each vendor before making a decision.

Cloudflare Workers is a serverless platform that runs your JavaScript, TypeScript, Python, or WebAssembly code inside lightweight V8 isolates across Cloudflare's global network, not inside containers in one region. Teams are switching to it in 2026 for two practical reasons. The first is billing: Workers charges for CPU time rather than wall-clock time, so functions that spend most of their life waiting on network calls get dramatically cheaper. The second is performance: isolates start in milliseconds, so cold starts largely disappear.

The migration stories on X are real, and so are the caveats. Database connections, framework adapters, bundle limits, and a concurrency model that differs from AWS Lambda trip up teams that assume Workers is "Lambda, but cheaper." This guide covers how the platform works, why the migration wave is happening, and how to tell whether your workload belongs on it.

The 30-second answer

- What it is: Serverless functions running in V8 isolates (the same sandbox technology Chrome uses for browser tabs), deployed to Cloudflare's edge network.

- Why teams switch: CPU-time billing, near-zero cold starts, and predictable costs. Published migrations report cloud-cost cuts above 80%.[9]

- What bites: Centralized Postgres connections, Next.js needing an adapter, 3MB/10MB bundle limits, and isolates that handle many requests at once.

- Best fit: Global APIs, static and JAMstack sites, cost-sensitive indie projects. Plan carefully for relational-heavy or long CPU-bound workloads.

The Billing Moment: Why Teams Are Suddenly Leaving Lambda and Vercel

Most migration threads start with a bill, not an architecture diagram. The difference comes down to what you pay for. AWS Lambda bills wall-clock duration: every millisecond your function exists, including time spent waiting on an API response or a database query. Workers bills CPU time: only the milliseconds your code is actually computing.

For I/O-heavy code, the gap is enormous. Max Rozen's example went viral because the arithmetic is so stark:

Max Rozen @RozenMD Sep 2, 2024

Moved a function from AWS Lambda to Cloudflare Workers this morning.

It's a bunch of fetch calls + some DB queries, does about 27 seconds runtime on average.

On AWS, I'd get billed for the full 27000ms.

On Cloudflare, I get billed for CPU time: 300ms.

View on X

A function that spends 27 seconds waiting on fetch calls and DB queries burns only about 300ms of CPU. That is roughly a 90x difference in billable time.

The same logic scales up to companies. Baselime, the observability startup, documented its move from AWS to Cloudflare. It reported a simpler architecture, better performance, and over 80% lower cloud costs.[9] DevCycle's story is a useful counterweight: Workers scaled so well that it overwhelmed the rest of their infrastructure, and they ended up rebuilding more of the stack on Workers itself.[8]

For indie developers, the driver is often less about savings and more about fear of the surprise bill:

Pritam @iPritamX Nov 4, 2026

Vercel paused hauntboard two days ago.

1.2M ISR reads and 10.2GB origin transfer on the free tier. their solution: "upgrade to resume service".

Instead of paying a monthly fee for an indie side project, I spent 1 hour migrating the entire Next.js 16 app to Cloudflare Workers.

result:
• fast global edge delivery
• zero risk of surprise bandwidth bills
• $0/month

https://t.co/1kpWjuyufz is back live with 18 launches.

Don't let hosting platforms scare you into paying before you have revenue.

View on X

This sentiment recurs across the conversation. Developers don't want a platform that pauses their site or forces an upgrade before the project earns anything. Workers' free tier and flat $5 paid plan make the cost ceiling legible, and for side projects that predictability is often worth more than any benchmark.

Cloud Computing Without Containers: How V8 Isolates Actually Work

To understand why Workers is cheap and fast, you need to understand the isolate.

A traditional serverless function runs in a container or micro-VM: a packaged operating-system environment with its own runtime, booted on demand. Booting that environment is what causes a "cold start," the delay of hundreds of milliseconds or more when a function hasn't run recently.

A V8 isolate is much lighter. V8 is the JavaScript engine inside Chrome and Node.js, and an isolate is a self-contained instance of that engine with its own memory heap. Cloudflare's founding explanation of the architecture describes running many isolates inside a single process. Each isolate is walled off from the others, and none of them needs its own OS or runtime boot.[4] Because the runtime is already warm, a new isolate spins up in milliseconds and uses a fraction of a container's memory.[4][1]

Dominic @iDomdhi Nov 8, 2026

Unlike traditional serverless functions, Cloudflare Workers run on V8 isolates, not containers. This eliminates the cold start problem and allows for instant spin-up of new isolates in single-digit milliseconds. No more workarounds!

View on X

The obvious question is security: is putting many customers' code in one process safe? Cloudflare's security model documentation describes layered defenses. These include the V8 sandbox, a hardened runtime, process-level isolation for untrusted code, and Spectre-specific mitigations, such as restricting high-precision timers that side-channel attacks depend on.[2] A later hardening post goes further, describing the use of hardware memory protection keys and the grouping of isolates so that a single V8 bug is harder to escalate.[3]

The economics follow directly from this design. Packing thousands of tenants into one process makes idle capacity nearly free for Cloudflare. That efficiency is what makes CPU-time billing viable as a business. The cost advantage isn't a promotional discount; it comes from the architecture itself.

The isolate model also extends beyond JavaScript. Cloudflare's 2025 Python Workers update describes fast cold starts for Python, package support, and a uv-first workflow.[15]

The Multiplexing Gotcha: Workers Are Not Lambda Functions

This is the misunderstanding that surprises experienced serverless developers. Lambda gives each execution environment one request at a time. If ten requests arrive at once, Lambda scales out to ten environments. Your code can treat global state as effectively private to the current request.

Workers doesn't work that way. In early 2026, dax (of SST and OpenCode) posted what many people were learning the hard way:

dax @thdxr Aug 22, 2026

something i didn't fully understand till today - a cloudflare worker isolate will handle multiple reqs at a time

this is different from how aws lambda works where it won't work on the next req until the previous one is done

this means it's a lot easier to blow up memory

View on X

The debate that followed sharpened the mental model. Michael Arnaldi of Effect put it bluntly:

Michael Arnaldi @MichaelArnaldi Nov 1, 2026

That's not true, workers multiplex requests, they are much more similar to a long running node app vs a lambda function

View on X

Cloudflare's own docs support this framing. A Worker's isolate persists between requests and can serve multiple requests concurrently, so global scope is shared.[1][5]

In practice, this changes how you write code:

When you port Lambda code, audit every top-level variable. Ask yourself: what happens if fifty requests touch this at the same moment? Treat the Worker like a long-running Node server with tight memory, not like a disposable function.

'Serverless' and 'Edge', Decoded Without the Marketing

Much of the confusion around Workers is a vocabulary problem. dax's thread from 2023 remains the cleanest taxonomy in circulation:

dax @thdxr May 8, 2023

i'm going to explain this without any marketing terms
taking the time to write this out so please read it carefully before you reply trying to disagree
we have a primitive called a serverless function
this is a reasonable name, it is a function that can execute without thinking about what server it runs on
we can pull out two properties of a serverless function - where it's running and what it's running
for the where it could be in a regional datacenter (us-east-1) or it can be at edge (closer to users) or maybe another location we haven't thought of
for the what, it can be things like nodejs, deno, golang, java, etc
so we can look at products that serve these combinations
nodejs + regional (AWS Lambda configured with nodejs)
nodejs + edge (AWS Lambda@Edge)
v8 isolate + edge (Cloudflare Worker)
v8 isolate + regional (Cloudflare Worker pinned to region)
golang + regional (Lambda configured with al2)
deno + edge (deno deploy)
the root issue here is vercel taking the non-marketing term edge - which already refers to the where - and using it to describe the what (specifically in their product) creating immediate confusion
and the second part is now additionally using the phrase "serverless function" not as an umbrella term for everything, but for one specific combination of what+where

View on X

His framework uses two independent axes:

  1. Where the code runs: a regional datacenter (like us-east-1) or the edge (many locations close to users).
  2. What runs it: Node.js, a V8 isolate, Go, Deno, and so on.

On that grid, Lambda is Node + regional, Lambda@Edge is Node + edge, and a Cloudflare Worker is V8 isolate + edge by default. Workers can also be pinned closer to a region when needed. Cloudflare's own concepts docs frame Workers the same way: code deployed across the network and executed wherever a request lands.[5]

Fastly's Compute@Edge occupies a neighboring square: WebAssembly + edge. Cindy Sridharan's early sketch comparing the three platforms' execution models is still a helpful visual:

Cindy Sridharan @copyconstruct Apr 1, 2019

Very first stab at a comparison between AWS lambda, Cloudflare Workers and Fastly’s new wasm based runtime.

I started with the AWS lambda sketch and then adopted the same convention for the others too.

Counting on the internet to call me out if any of this is inaccurate 😏

View on X

The takeaway: "edge" describes location, not a runtime, and it is a spectrum rather than a binary. That matters most for your database, which is almost certainly not at the edge.

The Edge Database Problem — and Why It Nearly Broke Everyone's Migration

This is the hurdle that sinks the most migrations. Traditional apps keep a small pool of long-lived TCP connections to Postgres. Workers inverts that pattern: potentially thousands of short-lived isolates, spread worldwide, each wanting its own connection.

CodingCat.dev @CodingCatDev Nov 4, 2026

Spinning up thousands of stateless V8 edge isolates against a centralized Postgres instance over TCP will exhaust your connection pool in seconds. Here is how we moved to Cloudflare D1 and SQLite bindings for sub-5ms edge queries. Details below 👇

View on X

Two things go wrong at once. Each isolate opening a fresh connection exhausts the database's connection limit. And each query from an edge location makes a round trip to the one region where the database lives, which erases the latency advantage you moved to the edge for.

Practitioners are converging on three answers:

1. Move data to the edge with D1. Cloudflare's SQLite-based database is accessed through bindings, meaning direct runtime integrations rather than TCP connections. CodingCat.dev reports sub-5ms queries after switching. Baselime's migration likewise leaned on Cloudflare-native storage to simplify its architecture.[9] The tradeoff: you're adopting SQLite semantics and a Cloudflare-specific database.

2. Use a database built for serverless connections. Some teams keep a managed relational database but change providers:

fforres @fforres Mar 5, 2026

Average latency in @Cloudflare workers from our previous AWS DB, to @PlanetScale

From 255ms, to 10ms
(connection latency is also reduced, from 151 to 3.7ms)

Combined with @zero__ms, it's chef's kiss

View on X

A drop from 255ms to 10ms suggests that much of the original latency came from connection setup, not from the queries themselves.

3. Keep Postgres, but pool in front of it. Teams locked into an existing database can use Cloudflare's Hyperdrive or an external pooler. Workers then reuse warm connections instead of opening new ones.

Decision rule: if your data model is simple and read-heavy, D1 is the shortest path. If you need full Postgres features, put pooling in front of it before you flip traffic.

Next.js, WordPress, and the Adapter Reality Check

The second most common surprise: your framework may not "just run." Nikzad's 2026 thread is the most precise explanation in the conversation:

Nikzad @Nikzaaaaad Nov 9, 2026

I moved my Next.js app to @Cloudflare. Here's what you need to know:
Next.js doesn't run on Cloudflare as it is. Next.js’s own build produces a folder of files for a Node.js server to read from disk, and Cloudflare offers neither a disk nor a full Node.js runtime, so an adapter has to turn that output into a bundle that Cloudflare’s runtime can run.
Cloudflare Workers free and paid plans have two limits for the bundle size: 3MB and 10MB
There are two main adaptors: OpenNext and Vinext.
- OpenNext keeps all of Next.js, but even built with webpack instead of Turbopack, my app only fit the Cloudflare paid plan.
- Vinext, Cloudflare's rewrite of it, bundles it in a smaller size, but it lacks some of the new NextJS features as of today (such as partial pre-rendering).
I chose Vinext so the bundle size limit doesn't bite me in the future. Hopefully Cloudflare keeps up with Next.js updates in the future. Check your bundle size first before choosing your stack!
Another thing to note is that Next.js keeps a cache of the pages it has already built. On Vercel, that cache came with the host; on Cloudflare, it lives in an R2 storage bucket. The app also stops running on Node.js, so image resizing moves to Cloudflare Images.

View on X

The root cause is structural. A Next.js build expects a Node.js server reading files from disk, and Workers provides neither a disk nor a full Node runtime. An adapter has to translate the output:

Supporting services move too. The incremental cache lives in R2 storage, and image optimization moves to Cloudflare Images. Check your bundle size before you commit to a stack.

The other migration pattern is more radical: stop running a dynamic CMS at all.

Michal Barus @webjuice_ie Nov 9, 2026

16 YEARS OF WORDPRESS. THEN I DELETED IT.
i built websites on wordpress for 16 years
> this year we moved 40 client sites to astro
> they run on cloudflare workers for free
here is what 16 years taught me:
1. my clients dont edit their site
- they asked for a site, not an admin panel
- we carried a login page, a theme and a plugin stack for nothing
2. you dont own the code 100%
- theme licence. builder licence. plugin licences
- the site works until one of them changes the rules
3. woocommerce means wordpress again
- once a shop is involved the whole stack comes back
that is the one place i still see the case for it
4. security is a plugin list
- someone asked me how we handle security on 40 sites
- astro in git. no plugin stack to patch
- every change is a PR and i approve it
5. the move is the SEO job
- most people skip redirect mapping
- we ran the same 8 seo steps on every one of the 40 sites
6. i dont write code on client sites anymore
- agents do. weekly cf workers audits. i check after them
- nothing ships without my ok
> wordpress is not slow. 40 plugins on shared hosting are
> but after 16 years my question is simple
why does a client who never logs in carry a cms?

View on X

Michal Barus's point is that most clients never log in, so they carry a CMS, a theme, and a plugin stack for nothing. Agencies are compiling these sites to static Astro and serving them from Workers. Brixio's case study documents a full WordPress-to-Workers move in 19 days.[11] Cloudflare's own guidance on legacy migrations recommends incremental approaches: put Workers in front of existing applications and peel off routes over time, rather than doing a big-bang rewrite.[6]

What runs cleanly: static and Astro sites, Hono and itty-router APIs, Remix/React Router, SvelteKit.

What needs engineering: Next.js with heavy server features, apps with native Node modules, anything that assumes a filesystem.

Wrangler, Versions, and the Rise of Agent-Driven Deploys

Wrangler is Workers' CLI, and its least-understood feature is that versions and deployments are separate concepts. wrangler deploy uploads a version and deploys it in one step. Thilak's thread shows how to split those steps apart, a practice that matters more now that AI agents are writing code:

Thilak @webtkdev Nov 5, 2026

wrangler deploy ships your agent's code to 100% of traffic in one step. Split it into upload and deploy, and nothing goes live until you say so.

Cloudflare Workers keeps versions and deployments separate. wrangler deploy just does both at once.

1. Upload, don't deploy.
npx wrangler versions upload --message "agent: fix auth redirect" --tag pr-42
That creates a version that serves no traffic and prints a Version URL.

2. Test that exact version.
URL format: <version-prefix>-<worker-name>.<subdomain>.workers.dev
Want a stable link? Add --preview-alias staging
Version URLs are public when enabled. Put Cloudflare Access in front, or set "preview_urls": false.

3. Canary it.
npx wrangler versions deploy <new-id>@10% <old-id>@90% -y

4. Promote it.
npx wrangler versions deploy <new-id>@100% -y

5. Bail in seconds.
npx wrangler rollback <old-id> --message "bad agent deploy"
It creates a new deployment right away across all routes. With no ID it goes back to the version uploaded before the latest. Only the last 100 versions count.

6. Put it in your rules file:
"Never run wrangler deploy or wrangler versions deploy. Run wrangler versions upload --strict and give me the Version URL."
--strict blocks the upload if someone changed the Worker remotely.

What most people miss: versions don't track KV, R2, Durable Objects or D1 state. Rollback brings back old code, not your old data. If the agent ran a D1 migration, rollback won't undo it. And it's blocked entirely if a bound R2 bucket, KV namespace or queue has since been deleted.

Let agents upload. You decide what goes live.

Do you let your agent deploy to prod, or only upload?

View on X

The workflow:

  1. Upload a version that serves no traffic.
  2. Test it at its version URL.
  3. Canary it at 10%.
  4. Promote it to 100%.
  5. Roll back if needed.

His critical warning: rollback restores code, not data. A D1 migration your agent ran stays applied.

Cloudflare is also designing explicitly for agents:

Sid @SidChatterjee Jun 19, 2026

One small step for humans, a big step for agentkind

We've been working on making it much easier for agents to deploy to Cloudflare Workers

AI agents can now deploy a real app without you signing up first, doing OAuth, creating an API token, or clicking through a dashboard

Just wrangler deploy --temporary

View on X

The wrangler deploy --temporary flag lets an agent ship a working app without account signup, OAuth, or API tokens. That change in deployment friction is reshaping how practitioners think about lock-in. Armin Ronacher, creator of Flask, summarized the shift:

Armin Ronacher ⇌ @mitsuhiko Jul 26, 2026

AI really makes me re-evaluate things. I always liked Cloudflare's DOs but I was a) worried about lock-in and b) the DX was horrible. Now I worry about neither. AI can make me move off quickly and it's now the agent's problem to suffer through wrangler and their runtime.

View on X

This is the most important non-obvious dynamic in the 2026 conversation. Two of the classic objections to Workers were proprietary primitives like Durable Objects and a rough developer experience. If an agent can migrate you off in an afternoon, adopting proprietary primitives costs far less. The CISO Marketplace case study shows the speed in practice: 10 sites moved from Pages to Workers in a single day with Claude Code.[10]

Local development has also improved. Cloudflare's open-source runtime, workerd, runs locally, and community tooling now brings it into mainstream bundlers:

James Ross @CherryJimbo Nov 10, 2026

rspack-plugin-cloudflare v0.3.0
Run your Cloudflare Workers in workerd during `rspack serve`, with full HMR inside the Worker itself, then `rspack build` and `wrangler deploy`.
Same wrangler config and bindings as the Vite plugin, now for @rspack_dev
https://github.com/Cherry/rspack-plugin-cloudflare

View on X

Running locally on the same runtime as production removes a whole class of "works locally, breaks at the edge" bugs.

The Performance Fight: Benchmarks, the 3.5x Gap, and Who to Believe

In late 2025, Theo published benchmarks showing Workers trailing Vercel by up to 3.5x on CPU-heavy server rendering. Vercel published its own Fluid Compute results.[13] Cloudflare responded with a detailed postmortem.[12] The summary that circulated widely:

vaish @wishee0 Oct 14, 2025

saw lots of people mentioning that their workers suddenly got faster after @theo's video, looks like this blog explains it.
how cloudflare closed a 3.5x performance gap, tl;dr:

- fixed request scheduling during cpu bursts (biggest impact - wasn't even cpu speed, just bad queueing)

- updated v8 garbage collector from 2017 settings (+25% boost - 8 year old config still in prod is kinda crazy)

- removed unnecessary buffer copies in opennext (50 x 2kb buffers per request - classic death by a thousand cuts lmao)

- switched to byte streams with proper highwatermark (4096 - interesting to know that defaults matter way more what i used to think)

- patched v8 json.parse with reviver (+33%, upstreamed to chrome 143 - fixing v8 itself is pretty insane ngl)

- fixed missing node_env=production in react ssr benchmark (dev mode in prod benchmarks... oops 👀👀)

- enabled force-dynamic in next.js config for proper streaming (config mismatches pretty much suck to debug)

- fixed node.js slow trig functions (3x faster, benefits
everyone - they literally fixed their competitor's platform lmfao)

now performs on par with @vercel on pretty much all benchmarks except next.js (gap significantly closed, work ongoing!!!!!)

View on X

The fixes reveal where the gap actually came from. It was mostly configuration rot, not raw CPU speed:

Cloudflare also patched V8's JSON.parse with a reviver function and contributed the fix upstream to Chrome.[12]

Vendor benchmark fights are an old tradition in edge computing. In 2021, Fastly re-ran a Cloudflare benchmark and argued the opposite:

Laura Thomson @lxt Dec 6, 2021

We re-ran Cloudflare’s experiment with more rigor. In this blog post, we explain why this experiment is a poor metric for measuring edge compute, but even so, @fastly's Compute@Edge significantly outperforms CF Workers. https://www.fastly.com/blog/debunking-cloudflares-recent-performance-tests

View on X

Laura Thomson's broader point still holds: synthetic CPU tests are a poor proxy for real edge workloads. Third-party comparisons from 2026 show results that depend on region, workload shape, and caching.[14]

The practical lesson: don't pick a platform from anyone's benchmark. Deploy a representative route, meaning your framework, your database calls, and your payload sizes. Measure p50 and p99 latency from your users' regions. Benchmark the bill as well, because for I/O-bound apps, CPU-time billing usually matters more than a 20% latency difference.

Who Should Switch — and Who Should Wait

Across the migration stories, the pattern is consistent. Teams that switch for cost and cold starts usually get both, and the hard part is rarely the code itself.

Vamsi Builds @VamsiBuilds Nov 9, 2026

I moved a live site to a completely new backend and deleted the old one.
TooldirectoryAI. com 1300+ ai tools.
It was on convex + vercel. now it's cloudflare workers + d1.
Why: wanted zero cold starts, lower costs, and global edge performance.
What i thought would be hard: rewriting the backend.
What was actually hard: migrating live relational data without dropping a single active request.
Users noticed nothing. which was the whole goal.
Not one of them has ever asked what stack it runs on.

View on X

The difficult part was migrating live relational data without dropping requests, not rewriting the backend. Screenly's earlier migration reported the same pattern of lower costs and faster load times once the move was done.[7]

Strong fit: switch now

aditya @adxtyahq Oct 25, 2026

migrated https://llmdojo.dev from vercel to cloudflare workers, end to end in ~1hr

- pages load 30-50% faster
- $5 plan + ~$10-12/mo at launch traffic, no 10M request cap that kills the site
- dns, auto deploys from github, auth, everything moved

claude code + wrangler cli did the heavy lifting lessgoo

View on X

Needs planning: switch carefully

Wait or stay put

Migration checklist

  1. Audit every database connection path.
  2. Pick your framework adapter and measure bundle size.
  3. Review global state for concurrency safety.
  4. Use wrangler versions upload and canary deploys, not one-shot deploy.
  5. Plan data migrations separately, since rollback won't undo them.

Bottom line for 2026: Workers beats Lambda on I/O-heavy workloads and cold starts. It beats Vercel on cost predictability for most indie and mid-size apps. It competes with Fastly on raw edge performance, with results that depend on workload. It wins whenever your code spends more time waiting than computing, and AI agents have made trying it cheaper than ever.

Sources

[1] How Workers works — https://developers.cloudflare.com/workers/reference/how-workers-works/

[2] Security model — https://developers.cloudflare.com/workers/reference/security-model/

[3] Safe in the sandbox: security hardening for Cloudflare Workers — https://blog.cloudflare.com/safe-in-the-sandbox-security-hardening-for-cloudflare-workers/

[4] Cloud Computing without Containers — https://blog.cloudflare.com/cloud-computing-without-containers/

[5] Workers concepts — https://developers.cloudflare.com/learning-paths/workers/concepts/workers-concepts/

[6] The Migration of Legacy Applications to Workers — https://blog.cloudflare.com/the-migration-of-legacy-applications-to-workers/

[7] Screenly - How we saved money and reduced load time with Cloudflare Workers — https://www.screenly.io/blog/2022/10/25/app-store-on-workers/

[8] Cloudflare Workers scale too well and broke our infrastructure, so we are rebuilding it on Workers — https://blog.cloudflare.com/devcycle-customer-story/

[9] Moving Baselime from AWS to Cloudflare: simpler architecture, improved performance, over 80% lower cloud costs — https://blog.cloudflare.com/80-percent-lower-cloud-cost-how-baselime-moved-from-aws-to-cloudflare/

[10] Case Study: 10 Sites From Cloudflare Pages to Workers in a Day — https://cisomarketplace.com/blog/cloudflare-pages-to-workers-migration-claude-code-case-study

[11] Brixio Website Case Study | WordPress to Cloudflare Workers in 19 Days — https://brixio.io/case-studies/brixio-website-cloudflare-workers/

[12] Unpacking Cloudflare Workers CPU Performance Benchmarks — https://blog.cloudflare.com/unpacking-cloudflare-workers-cpu-performance-benchmarks/

[13] Server rendering benchmarks: Fluid Compute and Cloudflare Workers — https://vercel.com/blog/fluid-compute-benchmark-results

[14] Cloudflare Workers vs Vercel Edge: Latency & Cost 2026 — https://www.devopsness.com/blog/cloudflare-workers-vs-vercel-edge-a-latency-cost-comparison-2026-04-22

[15] Python Workers redux: fast cold starts, packages, and a uv-first workflow — https://blog.cloudflare.com/python-workers-advancements/