Live
Team plans can now self‑start GitHub Advanced Security trialsTerraform 1.16 brings destroy actions and module-level imports into the resource lifecycleBuilding an AI‑Enabled Media Ecosystem: What Engineers Need to KnowEdge developers can now use post‑quantum ML‑KEM and ML‑DSA primitives in Cloudflare WorkersX25519 TLS support removed from GitHub Enterprise Cloud – what engineers need to knowDurable Objects Remain Active During Unattached I/O TasksCloudflare WAF blocks new GitLab path traversal and tightens request‑smuggling rulesAI‑Assisted DevOps Awards Expand: Practical Implications for Engineers and ArchitectsTeam plans can now self‑start GitHub Advanced Security trialsTerraform 1.16 brings destroy actions and module-level imports into the resource lifecycleBuilding an AI‑Enabled Media Ecosystem: What Engineers Need to KnowEdge developers can now use post‑quantum ML‑KEM and ML‑DSA primitives in Cloudflare WorkersX25519 TLS support removed from GitHub Enterprise Cloud – what engineers need to knowDurable Objects Remain Active During Unattached I/O TasksCloudflare WAF blocks new GitLab path traversal and tightens request‑smuggling rulesAI‑Assisted DevOps Awards Expand: Practical Implications for Engineers and Architects
Cloudflare

Durable Objects Remain Active During Unattached I/O Tasks

AI SummaryPowered by AI

Cloudflare now prevents eviction of Durable Objects while they have pending I/O, service‑binding, RPC, or timer operations, even without a connected client. This lets engineers run background agents and multi‑step workflows reliably, but requires attention to memory usage, cost, and potential denial‑of‑service exposure.

Cloudflare Workers now keep a Durable Object alive while it waits on pending I/O operations even if the original client has disconnected. This behavior is the default for Workers with a compatibility date of 2026-10-01 or later, and can be enabled earlier with the durable_object_io_tasks_prevent_eviction flag or disabled with durable_object_io_tasks_do_not_prevent_eviction.

Runtime Change Overview

When a Durable Object initiates a service‑binding fetch, an RPC call to another Durable Object, or calls this.ctx.container.monitor(), the runtime now treats those pending promises as a reason to keep the object in memory. The same protection applies to promises supplied to this.ctx.waitUntil() and to timers created with setTimeout() or setInterval(). Each pending operation can prevent eviction for up to fifteen minutes, and subsequent operations can extend that window.

Why It Matters for Engineers

Previously, an idle Durable Object could be shut down while any of the above operations were still pending, potentially aborting long‑running jobs such as background agents or coordination workflows. The new guarantee lets developers design agents that continue processing after the client drops, without needing to keep a client connection alive solely for eviction avoidance.

Architectural and Operational Implications

  • Long‑Running Tasks: Agents can now safely perform multi‑step workflows that involve external services, inter‑object RPC, or container monitoring without risking premature termination.
  • Resource Planning: Since each pending operation holds the object in memory for up to fifteen minutes, workloads that spawn many concurrent pending I/O calls may increase memory usage and associated duration charges.
  • Compatibility Management: Projects targeting older compatibility dates must add the appropriate flag to obtain the new behavior; conversely, teams that rely on the previous eviction semantics can opt out with the opposite flag.
  • Monitoring and Alerting: Operators should track the number and duration of pending I/O tasks to detect unexpected long‑lived objects that could indicate stuck processes or mis‑configured timers.

Security Considerations

The eviction protection does not alter the security model of Durable Objects; it merely extends their lifetime while awaiting I/O. However, longer lifetimes increase the window during which an object can be targeted by denial‑of‑service attempts that flood it with pending operations. Practitioners should therefore enforce reasonable limits on the number of concurrent pending calls and validate inputs that trigger external fetches or RPCs.

Related CloudNinjas coverage: hands-on guides.

What This Means For Practitioners

Adopt the new flag or update the compatibility date to benefit from reliable background processing. Review existing agents for reliance on client‑connected lifetimes and refactor to use waitUntil or timers where appropriate. Update monitoring dashboards to surface objects that remain in memory solely because of pending I/O, and consider rate‑limiting patterns that could unintentionally keep objects alive indefinitely. By aligning architecture with the extended eviction guard, teams can build more resilient, decoupled workflows while keeping cost and security exposure in view.

Originally published atCloudflare Developer Platform