---
title: Rollback support now available in Workflows
description: Workflows now lets you attach rollback handlers to step.do(), inspect rollback outcomes, and query rollback events in analytics.
image: https://developers.cloudflare.com/changelog-preview.png
---

> Documentation Index  
> Fetch the complete documentation index at: https://developers.cloudflare.com/changelog/llms.txt  
> Use this file to discover all available pages before exploring further. 

[Skip to content](#%5Ftop) 

# Changelog

New updates and improvements at Cloudflare.

[ Subscribe to RSS ](https://developers.cloudflare.com/changelog/rss/index.xml) [ View RSS feeds ](https://developers.cloudflare.com/fundamentals/new-features/available-rss-feeds/) 

![hero image](https://developers.cloudflare.com/_astro/hero.CVYJHPAd_26AMqX.svg) 

[ ← Back to all posts ](https://developers.cloudflare.com/changelog/) 

## Rollback support now available in Workflows

Jun 05, 2026 

[ Workflows ](https://developers.cloudflare.com/workflows/) 

[Workflows](https://developers.cloudflare.com/workflows/) now supports saga-style rollbacks, allowing you to add compensating logic to each `step.do()` in case of downstream failures. If the instance fails, the rollback handlers will execute in reverse `step-start` order.

This is useful for multi-step operations that touch external systems, such as inventory reservations, payment authorization, ticket creation, or infrastructure provisioning. Instead of writing all cleanup logic in a top-level `catch`, you can keep each compensating action next to the step it undoes.

Rollback handlers support their own retry and timeout configuration, and Workflows now exposes rollback outcomes in instance status responses. Workflows analytics also emits rollback lifecycle events, making it easier to distinguish a forward execution failure from a rollback failure when debugging production workflows.

* [  JavaScript ](#tab-panel-2569)
* [  TypeScript ](#tab-panel-2570)

JavaScript

```
await step.do(  "provision resource",  async () => {    const resource = await provisionResource();    return { resourceId: resource.id };  },  {    rollback: async ({ output }) => {      const { resourceId } = output;      await deleteResource(resourceId);    },    rollbackConfig: {      retries: { limit: 3, delay: "15 seconds", backoff: "linear" },      timeout: "2 minutes",    },  },);
```

TypeScript

```
await step.do(  "provision resource",  async () => {    const resource = await provisionResource();    return { resourceId: resource.id };  },  {    rollback: async ({ output }) => {      const { resourceId } = output as { resourceId: string };      await deleteResource(resourceId);    },    rollbackConfig: {      retries: { limit: 3, delay: "15 seconds", backoff: "linear" },      timeout: "2 minutes",    },  },);
```

Refer to [rollback options](https://developers.cloudflare.com/workflows/build/workers-api/#rollback-options) to learn more.

```json
{"@context":"https://schema.org","@type":"BlogPosting","@id":"https://developers.cloudflare.com/changelog/post/2026-06-05-saga-rollbacks/#page","headline":"Rollback support now available in Workflows · Changelog","description":"Workflows now lets you attach rollback handlers to step.do(), inspect rollback outcomes, and query rollback events in analytics.","url":"https://developers.cloudflare.com/changelog/post/2026-06-05-saga-rollbacks/","inLanguage":"en","image":"https://developers.cloudflare.com/changelog-preview.png","dateModified":"2026-06-05","datePublished":"2026-06-05","publisher":{"@type":"Organization","name":"Cloudflare","url":"https://www.cloudflare.com/"},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"}}
```
