# What changed in @upstash/workflow

> 36 changes in @upstash/workflow 0.2 to 1 from its official release notes, upgrade guides and advisories: 9 breaking, 16 new APIs and options. Each one cited. Sources checked 2026-11-07. HTML: https://unstale.sh/npm/@upstash/workflow/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @upstash/workflow 1

### Breaking changes

- Single-resource endpoints reject an empty id. (1.3.3) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.3)
- Labels are validated as alphanumeric. (1.3.1) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.1)
- A 412 response from QStash now throws a non-retriable error. (1.2.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.2.0)
- The agents API was removed. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)
- The AI SDK API was removed. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)
- Middleware replaces the logger. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)
- onStepFinish was removed. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)
- Serve options were removed, and serve option types were simplified. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)
- The stringifyBody parameter was removed. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)

### New APIs and options

- Adds step-level flow control and retries, giving developers control over flow and retry behavior at the step level. (1.5.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.5.0)
- Adds CALLBACK_CANCELED to failure callback state unions. (1.3.3) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.3)
- Bulk workflow run cancel supports multi-value filters. (1.3.3) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.3)
- FailureFunctionLog gains the nextDeliveryTime field. (1.3.2) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.2)
- Failing step names are reported via the Upstash-Error-Step-Name header. (1.3.2) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.2)
- Multi label runs are added. (1.3.1) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.1)
- Adds context.retried. (1.3.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.0)
- The notify option adds workflowRunId. (1.2.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.2.0)
- The trigger adds a redacted field. (1.2.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.2.0)
- Invoke calls can now include labels, in addition to trigger calls. (1.1.1) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.1.1)
- React Router is now supported. (1.1.1) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.1.1)
- The workflow run creation time is available on context and is passed in invoke requests. (1.1.1) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.1.1)
- Adds multi-region support. (1.1.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.1.0)
- An unknown SDK feature was added. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)

### Behavior and default changes

- Calling serve() eagerly starts the QStash dev server across all adapters. (1.4.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.4.0)
- This header is sent so runs with the same ID aren't deduplicated. (1.4.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.4.0)
- Schema checks are skipped for third party call results. (1.3.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.0)
- User headers are forwarded via the server. (1.2.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.2.0)

### Tooling

- Adds support for the qstash-js auto dev server. (1.3.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.0)

### Fixes and other changes

- Flow control keys are validated as alphanumeric. (1.3.1) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.3.1)
- Missing bulk action methods were added to the SDK. (1.2.1) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.2.1)
- Failures involving the failure function now include more information. (1.2.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.2.0)
- Errors were updated. (1.0.0) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v1.0.0)

## @upstash/workflow 0.2

### New APIs and options

- Adds the ability to wait for a webhook. (0.2.23) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v0.2.23)
- Adds the WorkflowRetryAfterError error. (0.2.22) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v0.2.22)

### Fixes and other changes

- Includes QStash client headers in the invoke body. (0.2.23) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v0.2.23)
- Fixes a JSON parsing issue in the failure function response. (0.2.22) — [release notes](https://github.com/upstash/workflow-js/releases/tag/v0.2.22)
