Skip to content

Pricing

Dynamic Workers pricing is based on three dimensions: Dynamic Workers created daily, requests, and CPU time.

Dynamic Workers are currently only available on the Workers Paid plan.

IncludedAdditional usage
Dynamic Workers created daily1,000 unique Dynamic Workers per month+$0.002 per Dynamic Worker per day
Requests ¹10 million per month+$0.30 per million requests
CPU time ¹30 million CPU milliseconds per month+$0.02 per million CPU milliseconds

¹ Uses Workers Standard rates and will appear as part of your existing Workers bill, not as separate Dynamic Workers charges.

Dynamic Workers created daily

You are billed for each unique Dynamic Worker created in a day. A Dynamic Worker is uniquely identified by its Worker ID and code — if either changes, it counts as a new Dynamic Worker. The count resets daily.

ScenarioCounted as
Same code, same ID, invoked multiple times1 Dynamic Worker
Same code, different IDs1 Dynamic Worker per ID
Same ID, different code versions1 Dynamic Worker per code version
No ID provided or .load(code) used1 Dynamic Worker per invocation

Requests

Dynamic Workers reuse Workers Standard request pricing.

A request is counted each time a Dynamic Worker is invoked:

  • Each fetch() call into a Dynamic Worker
  • Each RPC method call on a Dynamic Worker stub (billed the same way as Durable Objects)

If an RPC method returns a stub (an object that extends RpcTarget), those returned stubs share the same RPC session as the original call. Subsequent calls on the returned stub are not billed as separate requests.

CPU time

CPU time is billed at the same rate as Workers Standard.

Unlike standard Workers (where only execution time is billed), Dynamic Workers bill for two components of CPU time:

  • Startup time: The compute required to initialize the isolate and parse your code.
  • Execution time: The compute time your code spends actively processing logic, excluding time spent waiting on I/O.