Whether a Durable Object is eligible to hibernate, which decides whether it is billed for
duration while idle (eligibility, not hibernation itself, is the billing boundary).
Cloudflare's conditions: no setTimeout/setInterval, no awaited fetch() in flight, no
standard WebSocket API, no request in progress and no outbound TCP socket or WebSocket. A pending
alarm is not on the list, so a waiting object accrues no duration (warming costs requests, rows).
Arming does not warm; the firing does, and only under the threshold: re-armed every 8 s one
incarnation survived 71 alarms, while at 12, 20, 30 and 45 s the constructor ran again on every
probe (each firing resets the 10 s idle clock). See HIBERNATION_IDLE_MS in ./cron.ts.
Whether a Durable Object is eligible to hibernate, which decides whether it is billed for duration while idle (eligibility, not hibernation itself, is the billing boundary).
Cloudflare's conditions: no
setTimeout/setInterval, no awaitedfetch()in flight, no standard WebSocket API, no request in progress and no outbound TCP socket or WebSocket. A pending alarm is not on the list, so a waiting object accrues no duration (warming costs requests, rows).Arming does not warm; the firing does, and only under the threshold: re-armed every 8 s one incarnation survived 71 alarms, while at 12, 20, 30 and 45 s the constructor ran again on every probe (each firing resets the 10 s idle clock). See
HIBERNATION_IDLE_MSin./cron.ts.