diff --git a/src/content/changelog/durable-objects/2026-02-24-deleteall-deletes-alarms.mdx b/src/content/changelog/durable-objects/2026-02-24-deleteall-deletes-alarms.mdx new file mode 100644 index 00000000000..3e807c65636 --- /dev/null +++ b/src/content/changelog/durable-objects/2026-02-24-deleteall-deletes-alarms.mdx @@ -0,0 +1,23 @@ +--- +title: deleteAll() now deletes Durable Object alarm +description: Clean up a Durable Object's storage with a single API call. +products: + - durable-objects + - workers +date: 2026-02-24 +--- + +`deleteAll()` now deletes a Durable Object alarm in addition to stored data for Workers with a compatibility date of `2026-02-24` or later. This change simplifies clearing a Durable Object's storage with a single API call. + +Previously, `deleteAll()` only deleted user-stored data for an object. Alarm usage stores metadata in an object's storage, which required a separate `deleteAlarm()` call to fully clean up all storage for an object. The `deleteAll()` change applies to both KV-backed and SQLite-backed Durable Objects. + +```js +// Before: two API calls required to clear all storage +await this.ctx.storage.deleteAlarm(); +await this.ctx.storage.deleteAll(); + +// Now: a single call clears both data and the alarm +await this.ctx.storage.deleteAll(); +``` + +For more information, refer to the [Storage API documentation](/durable-objects/api/sqlite-storage-api/#deleteall). diff --git a/src/content/compatibility-flags/delete-all-deletes-alarm.md b/src/content/compatibility-flags/delete-all-deletes-alarm.md new file mode 100644 index 00000000000..ba7c94d50de --- /dev/null +++ b/src/content/compatibility-flags/delete-all-deletes-alarm.md @@ -0,0 +1,14 @@ +--- +_build: + publishResources: false + render: never + list: never + +name: "Durable Object `deleteAll()` deletes alarms" +sort_date: "2026-02-24" +enable_date: "2026-02-24" +enable_flag: "delete_all_deletes_alarm" +disable_flag: "delete_all_preserves_alarm" +--- + +With the `delete_all_deletes_alarm` flag set, calling `deleteAll()` on a Durable Object's storage will delete any active alarm in addition to all stored data. Previously, `deleteAll()` only deleted user-stored data, and alarms required a separate `deleteAlarm()` call to remove. This change applies to both KV-backed and SQLite-backed Durable Objects. diff --git a/src/content/docs/durable-objects/best-practices/rules-of-durable-objects.mdx b/src/content/docs/durable-objects/best-practices/rules-of-durable-objects.mdx index d4e3a77575c..50430798145 100644 --- a/src/content/docs/durable-objects/best-practices/rules-of-durable-objects.mdx +++ b/src/content/docs/durable-objects/best-practices/rules-of-durable-objects.mdx @@ -1410,7 +1410,7 @@ export class Subscription extends DurableObject { ### Clean up storage with `deleteAll()` -To fully clear a Durable Object's storage, call `deleteAll()`. Simply deleting individual keys or dropping tables is not sufficient, as some internal metadata may remain. If you have alarms set, delete those first. +To fully clear a Durable Object's storage, call `deleteAll()`. Simply deleting individual keys or dropping tables is not sufficient, as some internal metadata may remain. Workers with a compatibility date before [2026-02-24](/workers/configuration/compatibility-flags/#delete-all-deletes-alarms) and an alarm set should delete the alarm first with `deleteAlarm()`. ```ts @@ -1422,10 +1422,8 @@ export interface Env { export class ChatRoom extends DurableObject { async clearStorage() { - // If you have an alarm set, delete it first - await this.ctx.storage.deleteAlarm(); - // Delete all storage + // Delete all storage, including any set alarm await this.ctx.storage.deleteAll(); // The Durable Object instance still exists, but with empty storage diff --git a/src/content/partials/durable-objects/api-storage-other-methods.mdx b/src/content/partials/durable-objects/api-storage-other-methods.mdx index 035241a0c60..44553d94354 100644 --- a/src/content/partials/durable-objects/api-storage-other-methods.mdx +++ b/src/content/partials/durable-objects/api-storage-other-methods.mdx @@ -9,7 +9,7 @@ import { Type, MetaInfo } from "~/components"; - deleteAll(options ): - Deletes all stored data, effectively deallocating all storage used by the Durable Object. For Durable Objects with a key-value storage backend, `deleteAll()` removes all keys and associated values for an individual Durable Object. For Durable Objects with a [SQLite storage backend](/durable-objects/best-practices/access-durable-objects-storage/#create-sqlite-backed-durable-object-class), `deleteAll()` removes the entire contents of a Durable Object's private SQLite database, including both SQL data and key-value data. - For Durable Objects with a key-value storage backend, an in-progress `deleteAll()` operation can fail, which may leave a subset of data undeleted. Durable Objects with a SQLite storage backend do not have a partial `deleteAll()` issue because `deleteAll()` operations are atomic (all or nothing). - - `deleteAll()` does not proactively delete [alarms](/durable-objects/api/alarms/). Use [`deleteAlarm()`](/durable-objects/api/alarms/#deletealarm) to delete an alarm. + - For Workers with a compatibility date of `2026-02-24` or later, `deleteAll()` also deletes any active [alarm](/durable-objects/api/alarms/). For earlier compatibility dates, `deleteAll()` does not delete alarms. Use [`deleteAlarm()`](/durable-objects/api/alarms/#deletealarm) separately, or enable the `delete_all_deletes_alarm` [compatibility flag](/workers/configuration/compatibility-flags/). ### `transactionSync`