Pricing
Durable Objects are only available on the Workers Paid plan.
Paid plan | |
---|---|
Requests1 | 1 million, + $0.15/million |
Duration2 | 400,000 GB-s, + $12.50/million GB-s3,4 |
1 Requests include all incoming HTTP requests, WebSocket messages, and alarm invocations. There is no charge for outgoing WebSocket messages, nor for incoming WebSocket protocol pings.
2 Application level auto-response messages handled by state.setWebSocketAutoResponse()
will not incur additional wall-clock time, and so they will not be charged.
3 Duration is billed in wall-clock time as long as the Object is active, but is shared across all requests active on an Object at once. Once your Object finishes responding to all requests, it will stop incurring duration charges. Calling accept()
on a WebSocket in an Object will incur duration charges for the entire time the WebSocket is connected. If you prefer, use state.acceptWebSocket()
instead, which will stop incurring duration charges once all event handlers finish running.
4 Duration billing charges for the 128 MB of memory your Durable Object is allocated, regardless of actual usage. If your account creates many instances of a single Durable Object class, Durable Objects may run in the same isolate on the same physical machine and share the 128 MB of memory. These Durable Objects are still billed as if they are allocated a full 128 MB of memory.
Durable Objects billing examples
These examples exclude the costs for the Workers calling the Durable Objects.
Example 1
If a single Durable Object was called by a Worker 1.5 million times, and was active for 1,000,000 seconds in the month, the estimated cost in a month would be:
Total = ~$0.08 USD + Minimum $5/mo usage = $5.08
- (1.5 million requests - included 1 million requests) x $0.15 / 1,000,000 = $0.075
- 1,000,000 seconds * 128 MB / 1 GB = 128,000 GB-s
- (128,000 GB-s - included 400,000 GB-s) x $12.50 / 1,000,000 = $0.00
Example 2
If 100 Durable Objects each had 100 WebSocket connections established to each of them which sent approximately one message a minute for a month, the estimated cost in a month would be, if the messages overlapped so that the Durable Objects were actually active for half the month:
Total = ~$64.65 USD + $202.36 USD + Minimum $5/mo usage = $272.01
- 100 requests to establish the WebSockets.
- 100 messages per minute * 100 Durable Objects * 60 minutes * 24 hours * 30 days = 432,000,000 requests
- (432 million requests - included 1 million requests) x $0.15 / 1,000,000 = $64.65
- 100 Durable Objects * 60 seconds * 60 minutes * 24 hours * 30 days / 2 = 129,600,000 seconds
- 129,600,000 seconds * 128 MB / 1 GB = 16,588,800 GB-s
- (16,588,800 GB-s - included 400,000 GB-s) x $12.50 / 1,000,000 = $202.36
Example 3
If 100 Durable Objects each had a single WebSocket connection established to each of them, which sent one message a second for a month, and the messages overlapped so that the Durable Objects were actually active for the entire month, the estimated cost in a month would be:
Total = ~$38.73 USD + $409.72 USD + Minimum $5/mo usage = $453.45
- 100 requests to establish the WebSockets.
- 1 message per second * 100 connections * 60 seconds * 60 minutes * 24 hours * 30 days = 259,200,000 requests
- (259.2 million requests - included 1 million requests) x $0.15 / 1,000,000 = $38.73
- 100 Durable Objects * 60 seconds * 60 minutes * 24 hours * 30 days = 259,200,000 seconds
- 259,200,000 seconds * 128 MB / 1 GB = 33,177,600 GB-s
- (33,177,600 GB-s - included 400,000 GB-s) x $12.50 / 1,000,000 = $409.72
Transactional Storage API billing
The Durable Objects Transactional Storage API is only accessible from within Durable Objects.
Durable Objects do not have to use the Transactional Storage API, but if your code does call methods on state.storage
, it will incur the following additional charges:
Paid plan | |
---|---|
Read request units1,2 | 1 million, + $0.20/million |
Write request units3 | 1 million, + $1.00/million |
Delete requests4 | 1 million, + $1.00/million |
Stored data5 | 1 GB, + $0.20/ GB-month |
1 A request unit is defined as 4 KB of data read or written. A request that writes or reads more than 4 KB will consume multiple units, for example, a 9 KB write will consume 3 write request units.
2 List operations are billed by read request units, based on the amount of data examined. For example, a list request that returns a combined 80 KB of keys and values will be billed 20 read request units. A list request that does not return anything is billed for 1 read request unit.
3 Each alarm write is billed as a single write request unit.
4 Delete requests are unmetered. For example, deleting a 100 KB value will be charged one delete request.
5 Durable Objects will be billed for stored data until the data is removed. Once the data is removed, the object will be cleaned up automatically by the system.
Requests that hit the Durable Objects in-memory cache or that use the multi-key versions of get()
/put()
/delete()
methods are billed the same as if they were a normal, individual request for each key.