Skip to content

Releases: vercel/workflow

workflow@5.0.0-beta.12

04 Jun 20:08
Immutable release. Only release title and notes can be modified.
ff66ee9

Choose a tag to compare

Pre-release

@workflow/core@5.0.0-beta.12

  • #2211 52d63d1 @pranaygp - Prevent replayed workflows from advancing their deterministic clock when a future event is inspected before its matching operation is invoked.
  • #2212 2a3b11b @pranaygp - Retry transient workflow replay divergence before classifying repeated divergence as a corrupted event log.
  • #2215 12c35b5 @pranaygp - Skip workflow replay when a refreshed event log already contains a terminal run event.

@workflow/cli@5.0.0-beta.12

@workflow/world@5.0.0-beta.7

  • #2212 2a3b11b @pranaygp - Retry transient workflow replay divergence before classifying repeated divergence as a corrupted event log.

@workflow/world-local@5.0.0-beta.13

@workflow/world-postgres@5.0.0-beta.11

@workflow/world-vercel@5.0.0-beta.11

@workflow/web-shared@5.0.0-beta.12

@workflow/nitro@5.0.0-beta.12

@workflow/errors@5.0.0-beta.7

  • #2212 2a3b11b @pranaygp - Retry transient workflow replay divergence before classifying repeated divergence as a corrupted event log.

workflow@4.3.1

02 Jun 03:32
Immutable release. Only release title and notes can be modified.
3c89e0c

Choose a tag to compare

@workflow/world-vercel@4.3.2

  • #2204 5655fcb @VaguelySerious - Retry transient response-body read/decode failures (truncated or terminated streams, gateway non-CBOR bodies) on idempotent requests inside the HTTP client, so a sporadic events.list parse failure no longer surfaces as a fatal error.

workflow@4.3.0

02 Jun 01:45
Immutable release. Only release title and notes can be modified.
a5cf3d7

Choose a tag to compare

@workflow/core@4.3.0

  • #2059 9092640 @TooTallNate - A WritableStream from a workflow's getWritable() can now be passed as an argument to a child workflow via start(); the child's writes land on the parent run's stream directly for the full lifetime of the child run.
  • #2191 5a0ce9a @pranaygp - Fix forwarded writable stream encryption when child workflows execute on a newer deployment than their parent.
  • #2206 1e32d05 @pranaygp - Prevent replayed workflows from advancing their deterministic clock when a future event is inspected before its matching operation is invoked.
  • #2208 5fd7d9c @pranaygp - Retry transient workflow replay divergence before classifying repeated divergence as a corrupted event log.

@workflow/world@4.1.4

  • #2191 5a0ce9a @pranaygp - Fix forwarded writable stream encryption when child workflows execute on a newer deployment than their parent.
  • #2208 5fd7d9c @pranaygp - Retry transient workflow replay divergence before classifying repeated divergence as a corrupted event log.

@workflow/errors@4.1.3

  • #2208 5fd7d9c @pranaygp - Retry transient workflow replay divergence before classifying repeated divergence as a corrupted event log.

workflow@5.0.0-beta.11

02 Jun 03:51
Immutable release. Only release title and notes can be modified.
275316f

Choose a tag to compare

Pre-release

@workflow/core@5.0.0-beta.11

  • #2180 1ee63b8 @pranaygp - Harden runtime event pagination against rejected, repeated, or overlapping cursor responses.
  • #2191 8f68d35 @pranaygp - Fix forwarded writable stream encryption when child workflows execute on a newer deployment than their parent.

@workflow/world@5.0.0-beta.6

  • #2191 8f68d35 @pranaygp - Fix forwarded writable stream encryption when child workflows execute on a newer deployment than their parent.

@workflow/world-vercel@5.0.0-beta.10

  • #2204 7994629 @VaguelySerious - Retry transient response-body read/decode failures (truncated or terminated streams, gateway non-CBOR bodies) on idempotent requests inside the HTTP client, so a sporadic events.list parse failure no longer surfaces as a fatal error.

@workflow/web@5.0.0-beta.11

  • #2200 f0f002a @mitul-s - Fix new trace viewer getting stuck on the first page: re-wire pagination so it auto-loads pages up to an event cap and scroll-loads the rest for very large runs.
  • #2164 0606949 @mitul-s - Add a loading skeleton to the new trace viewer that matches the real layout's dimensions, and start with the detail panel closed instead of pre-selecting the first span. The skeleton is also exported as TraceViewerSkeleton for consumers that need to render it standalone.

@workflow/web-shared@5.0.0-beta.11

  • #2205 445ec8c @mitul-s - Add virtualization to the trace viewer
  • #2163 ab7e5ab @mitul-s - Add keyboard-shortcut tooltips to the up/down span navigation buttons in the trace viewer detail panel.
  • #2200 f0f002a @mitul-s - Fix new trace viewer getting stuck on the first page: re-wire pagination so it auto-loads pages up to an event cap and scroll-loads the rest for very large runs.
  • #2164 0606949 @mitul-s - Add a loading skeleton to the new trace viewer that matches the real layout's dimensions, and start with the detail panel closed instead of pre-selecting the first span. The skeleton is also exported as TraceViewerSkeleton for consumers that need to render it standalone.

workflow@4.2.6

31 May 09:54
Immutable release. Only release title and notes can be modified.
8e08d82

Choose a tag to compare

@workflow/core@4.2.6

  • #2179 e256858 @pranaygp - Harden runtime event pagination against rejected, repeated, or overlapping cursor responses.
  • #2171 38c67a7 @TooTallNate - Fix CorruptedEventLogError on replay when a workflow races a hook read against a sleep() (e.g. Promise.race([hook, sleep])). Branch-deciding deliveries (buffered hook payloads and wait completions) are now handed to the workflow in strict event-log order — anchored on event position rather than on microtask-resolution timing — so the committed branch wins the race deterministically, independent of decryption/hydration time or Promise.race argument order.
  • #2156 ebfeede @VaguelySerious - Harden workflow error stack remapping for large inline sourcemaps.
  • #2142 3113738 @pranaygp - Prevent failed stream writes from surfacing as unhandled rejections and include request correlation details in stream errors.

@workflow/world@4.1.3

  • #1979 8ab6c4f @adamiBs - Make run.input and step.input .optional() on the World snapshot schemas so consumers no longer fail validation when the service externalizes payloads as RemoteRef blobs.

@workflow/world-local@4.1.3

  • #2139 2aecfdb @pranaygp - Reduce local stream metadata and pagination I/O by reading only EOF marker bytes and scanning chunk files once.

@workflow/world-vercel@4.3.0

  • #1978 17cf939 @TooTallNate - Add @workflow/world-vercel/run-id sub-export with encode/decode helpers that produce ULID-shaped workflow run IDs carrying a tag bit, a 5-bit version, and a 6-bit Vercel region ID.
  • #2142 3113738 @pranaygp - Prevent failed stream writes from surfacing as unhandled rejections and include request correlation details in stream errors.

@workflow/web@4.1.7

  • #2107 e313c66 @karthikscale3 - Allow lookup of exact step ID (step_), wait ID (wait_), hook ID (hook_), or event ID (evnt_) in the event list UI.

@workflow/web-shared@4.1.7

  • #2107 e313c66 @karthikscale3 - Allow lookup of exact step ID (step_), wait ID (wait_), hook ID (hook_), or event ID (evnt_) in the event list UI.

workflow@5.0.0-beta.9

29 May 18:01
Immutable release. Only release title and notes can be modified.
7e7d7e6

Choose a tag to compare

workflow@5.0.0-beta.9 Pre-release
Pre-release

@workflow/core@5.0.0-beta.9

  • #2150 4b5f017 @pranaygp - Treat serialized and cross-realm AbortError step failures as fatal cancellations, and stabilize abort E2E readiness checkpoints.
  • #2157 409b103 @VaguelySerious - Allow experimental_setAttributes() to be called from step functions.
  • #2142 ae37315 @pranaygp - Prevent failed stream writes from surfacing as unhandled rejections and include request correlation details in stream errors.

@workflow/world-vercel@5.0.0-beta.8

  • #2142 ae37315 @pranaygp - Prevent failed stream writes from surfacing as unhandled rejections and include request correlation details in stream errors.

@workflow/web-shared@5.0.0-beta.9

  • #2144 b33c5ef @mitul-s - Improve new trace viewer search matching and highlighting, and add a reusable Geist-style icon button.
  • #2041 799cc09 @mitul-s - Update zoom factor on the trace viewer timeline
  • #2143 e8e5292 @mitul-s - Fix Button hover, focus, and corner radius to match Geist. The dark-mode hover no longer relies on an unregistered Tailwind variant (it previously turned the inverted button's background dark/transparent depending on the consumer), the focus-visible ring is now rendered, and the xs size uses Geist's 4px tiny radius. Styles are written to work under both Tailwind v3 and v4.

workflow@5.0.0-beta.10

29 May 22:03
Immutable release. Only release title and notes can be modified.
3d615fb

Choose a tag to compare

Pre-release

@workflow/core@5.0.0-beta.10

  • #2145 8d0928b @TooTallNate - Classify SDK-level AES-GCM encryption failures as RUNTIME_ERROR instead of USER_ERROR via a new RuntimeDecryptionError.

@workflow/world-local@5.0.0-beta.11

  • #2168 3128dfc @allenzhou101 - Skip past abandoned 5.0.0-beta.8/9/10 npm slots from the November 2025 5.x attempt so the next Changesets publish lands on a fresh 5.0.0-beta.11.

@workflow/web@5.0.0-beta.10

  • #2107 ad5c068 @karthikscale3 - Allow lookup of exact step ID (step_), wait ID (wait_), hook ID (hook_), or event ID (evnt_) in the event list UI.

@workflow/web-shared@5.0.0-beta.10

  • #2107 ad5c068 @karthikscale3 - Allow lookup of exact step ID (step_), wait ID (wait_), hook ID (hook_), or event ID (evnt_) in the event list UI.

@workflow/errors@5.0.0-beta.6

  • #2145 8d0928b @TooTallNate - Classify SDK-level AES-GCM encryption failures as RUNTIME_ERROR instead of USER_ERROR via a new RuntimeDecryptionError.

workflow@5.0.0-beta.8

28 May 18:21
Immutable release. Only release title and notes can be modified.
2f19552

Choose a tag to compare

workflow@5.0.0-beta.8 Pre-release
Pre-release

@workflow/core@5.0.0-beta.8

  • #2134 1e6b1fd @VaguelySerious - Add experimental_setAttributes() workflow-level helper for attaching string key/value metadata to a workflow run, surfaced as run.attributes
  • #2086 2050656 @VaguelySerious - Fix getWritable() returning a new TransformStream per call, which caused racing pipes to reorder chunks when callers acquired a writer per write. Repeat calls within the same step now share a single pipe per (runId, namespace).
  • #2134 1e6b1fd @VaguelySerious - Harden workflow error stack remapping for large inline sourcemaps.
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/cli@5.0.0-beta.8

  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/world@5.0.0-beta.5

  • #2134 1e6b1fd @VaguelySerious - Add experimental_setAttributes() workflow-level helper for attaching string key/value metadata to a workflow run, surfaced as run.attributes
  • #1979 62ec537 @adamiBs - Make run.input and step.input .optional() on the World snapshot schemas so consumers no longer fail validation when the service externalizes payloads as RemoteRef blobs.
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/world-local@5.0.0-beta.7

  • #2134 1e6b1fd @VaguelySerious - Add experimental_setAttributes() workflow-level helper for attaching string key/value metadata to a workflow run, surfaced as run.attributes
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.
  • #2097 657e8bb @TooTallNate - Reject dots and empty correlationId values in entity ID validation.

@workflow/world-postgres@5.0.0-beta.7

  • #2134 1e6b1fd @VaguelySerious - Add experimental_setAttributes() workflow-level helper for attaching string key/value metadata to a workflow run, surfaced as run.attributes
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/world-vercel@5.0.0-beta.7

  • #1978 b0d0561 @TooTallNate - Add @workflow/world-vercel/run-id sub-export with encode/decode helpers that produce ULID-shaped workflow run IDs carrying a tag bit, a 5-bit version, and a 6-bit Vercel region ID.
  • #2134 1e6b1fd @VaguelySerious - Add experimental_setAttributes() workflow-level helper for attaching string key/value metadata to a workflow run, surfaced as run.attributes
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/world-testing@5.0.0-beta.8

  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/web-shared@5.0.0-beta.8

  • #2108 8633ebb @mitul-s - Use the blur-[4px] arbitrary-value utility on the encrypted data preview instead of Tailwind v4's blur-xs utility, so the component renders correctly for consumers on Tailwind v3.
  • #2087 a490f58 @VaguelySerious - Fix the "Queued for" duration shown in the events list for retried steps. It now measures from step_created to the first step_started instead of the last, so the displayed value reflects actual queue time rather than queue time plus all retry waits.
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.
  • #1973 34481af @mitul-s - adjusted spacing on trace viewer and detail pane

@workflow/ai@5.0.0-beta.6

  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/typescript-plugin@5.0.0-beta.4

  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/builders@5.0.0-beta.8

  • #1683 0d0bb01 @pranaygp - Write colocated .gitignore files for public workflow manifests generated by WORKFLOW_PUBLIC_MANIFEST=1
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/next@5.0.0-beta.8

  • #1805 070bd0c @TooTallNate - Change lazyDiscovery default to true for withWorkflow. Workflow discovery is now deferred until files are requested instead of scanning eagerly at startup on Next.js versions that support deferred entries (>= 16.2.0-canary.48). Older versions automatically fall back to eager discovery. Pass workflows: { lazyDiscovery: false } to opt back into eager discovery on supported Next.js versions.
  • #1683 0d0bb01 @pranaygp - Write colocated .gitignore files for public workflow manifests generated by WORKFLOW_PUBLIC_MANIFEST=1
  • #1799 503a929 @TooTallNate - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

@workflow/nitro@5.0.0-bet...

Read more

workflow@4.2.5

22 May 20:37
Immutable release. Only release title and notes can be modified.
b93e7c3

Choose a tag to compare

@workflow/core@4.2.5

  • #2029 a434184 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #2046 8407c1e @pranaygp - Report corrupted event logs with a distinct CorruptedEventLogError type and CORRUPTED_EVENT_LOG run error code.
  • #2056 7487430 @VaguelySerious - Fix spurious "Event cursor missing after initial load" warning
  • #2030 c347509 @pranaygp - Validate step, wait, and hook lifecycle events against replay ownership metadata.
  • #2060 ca5f355 @pranaygp - Record fatal world response contract failures as non-retryable workflow errors.
  • #1986 16f2c23 @pranaygp - Fix local workflow port detection, make generated health endpoints respond to HEAD requests, materialize manual webhook response bodies before returning them, wait for step return stream serialization before completing the step, bound Vercel stream and health-check operations so stuck writes or queue sends retry or time out instead of hanging, and stabilize remote Vercel e2e checks around CLI inspection, sleep timing, and hook registration/disposal.
  • #1935 6aabd6f @TooTallNate - Preserve the this binding of bound step proxies across workflow serialization, so passing useStep(...).bind(thisArg) as a step argument no longer loses the receiver.

@workflow/world@4.1.2

  • #2029 a434184 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #2046 8407c1e @pranaygp - Report corrupted event logs with a distinct CorruptedEventLogError type and CORRUPTED_EVENT_LOG run error code.
  • #1902 15e44b3 @ziyak97 - Fix compatibility with Zod 4.4.x in WorkflowRunSchema by marking output, error, and completedAt as .optional() on non-final / cancelled / completed / failed run states.
  • #2030 c347509 @pranaygp - Validate step, wait, and hook lifecycle events against replay ownership metadata.

@workflow/world-local@4.1.2

  • #2029 a434184 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #1985 76352f0 @pranaygp - Improve the local queue error message when a Next.js proxy intercepts workflow routes.
  • #1898 e428cdb @VaguelySerious - Fix local-world recovery isolation in Vitest and support custom test directories
  • #1829 5f50bbc @TooTallNate - Fix path traversal via request-supplied IDs in the world-local storage backend.

@workflow/world-postgres@4.1.2

  • #2029 a434184 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #2069 096adbf @pranaygp - Fix race in events.create() where concurrent step_created / hook_created / wait_created writes with the same correlationId would persist duplicate event rows. Adds a unique partial index and surfaces the violation as EntityConflictError.
  • #2019 be506cc @VaguelySerious - workflow-postgres-setup now also bootstraps the graphile_worker schema, fixing potential race on setup when starting the app and a test runner at the same time

@workflow/world-vercel@4.2.0

  • #1897 677867b @VaguelySerious - Switch the workflow-server Deployment Protection bypass to OIDC Trusted Sources. The VERCEL_WORKFLOW_SERVER_PROTECTION_BYPASS env var is no longer used; the x-vercel-trusted-oidc-idp-token header is now sourced from getVercelOidcToken().
  • #2029 a434184 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #1999 a350e8d @pranaygp - Release failed VQS workflow handler messages on the configured retry cadence.
  • #2060 ca5f355 @pranaygp - Record fatal world response contract failures as non-retryable workflow errors.
  • #1986 16f2c23 @pranaygp - Fix local workflow port detection, make generated health endpoints respond to HEAD requests, materialize manual webhook response bodies before returning them, wait for step return stream serialization before completing the step, bound Vercel stream and health-check operations so stuck writes or queue sends retry or time out instead of hanging, and stabilize remote Vercel e2e checks around CLI inspection, sleep timing, and hook registration/disposal.
  • #1987 ecfccc3 @karthikscale3 - Update to new queue client version

@workflow/web@4.1.6

@workflow/web-shared@4.1.6

  • #1955 73e0c4d @mitul-s - Show hook name on trace viewer + no toast on decrypt
  • #2087 88070cf @VaguelySerious - Fix the "Queued for" duration shown in the events list for retried steps. It now measures from step_created to the first step_started instead of the last, so the displayed value reflects actual queue time rather than queue time plus all retry waits.
  • #1952 01cfe19 @mitul-s - Fix old trace viewer layout to be in a row rather than column

@workflow/swc-plugin@4.1.1

  • #1944 a9cc1d5 @TooTallNate - Fix three bugs affecting nested step functions that get hoisted out of an enclosing function (workflows in an...
Read more

workflow@5.0.0-beta.7

22 May 07:36
Immutable release. Only release title and notes can be modified.
8f9656d

Choose a tag to compare

workflow@5.0.0-beta.7 Pre-release
Pre-release

@workflow/core@5.0.0-beta.7

  • #2059 49da6c5 @TooTallNate - A WritableStream from a workflow's getWritable() can now be passed as an argument to a child workflow via start(); the child's writes land on the parent run's stream directly for the full lifetime of the child run.
  • #2038 dc0be50 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #2046 ad71b58 @pranaygp - Report corrupted event logs with a distinct CorruptedEventLogError type and CORRUPTED_EVENT_LOG run error code.
  • #2056 9454151 @VaguelySerious - Fix spurious "Event cursor missing after initial load" warning
  • #2030 b124365 @pranaygp - Validate step, wait, and hook lifecycle events against replay ownership metadata.
  • #2013 2a446af @TooTallNate - Exclude inline step execution from the workflow replay timeout. Long-running steps no longer hit REPLAY_TIMEOUT (fixes #2009). Adds a WORKFLOW_REPLAY_TIMEOUT_MS env var override and a new optional World.processExitTriggersQueueRedelivery capability used to gate the runtime's process.exit(1) failure path.
  • #2060 1d3959e @pranaygp - Record fatal world response contract failures as non-retryable workflow errors.

@workflow/world@5.0.0-beta.4

  • #2038 dc0be50 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #2046 ad71b58 @pranaygp - Report corrupted event logs with a distinct CorruptedEventLogError type and CORRUPTED_EVENT_LOG run error code.
  • #2030 b124365 @pranaygp - Validate step, wait, and hook lifecycle events against replay ownership metadata.
  • #2013 2a446af @TooTallNate - Exclude inline step execution from the workflow replay timeout. Long-running steps no longer hit REPLAY_TIMEOUT (fixes #2009). Adds a WORKFLOW_REPLAY_TIMEOUT_MS env var override and a new optional World.processExitTriggersQueueRedelivery capability used to gate the runtime's process.exit(1) failure path.

@workflow/world-local@5.0.0-beta.6

  • #2038 dc0be50 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.

@workflow/world-postgres@5.0.0-beta.6

  • #2038 dc0be50 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #2019 738ec5e @VaguelySerious - workflow-postgres-setup now also bootstraps the graphile_worker schema, fixing potential race on setup when starting the app and a test runner at the same time

@workflow/world-vercel@5.0.0-beta.6

  • #2038 dc0be50 @pranaygp - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.
  • #2013 2a446af @TooTallNate - Exclude inline step execution from the workflow replay timeout. Long-running steps no longer hit REPLAY_TIMEOUT (fixes #2009). Adds a WORKFLOW_REPLAY_TIMEOUT_MS env var override and a new optional World.processExitTriggersQueueRedelivery capability used to gate the runtime's process.exit(1) failure path.
  • #2060 1d3959e @pranaygp - Record fatal world response contract failures as non-retryable workflow errors.

@workflow/world-testing@5.0.0-beta.7

  • #2043 96e2d3c @TooTallNate - Fix race condition in test server's flow invocation counter that caused intermittent failures in the inline-execution test suite (e.g. "sequential steps complete in a single flow invocation"). The counter is now incremented before awaiting the flow handler, so the count is observable as soon as the run transitions to completed.

@workflow/web-shared@5.0.0-beta.7

@workflow/nitro@5.0.0-beta.7

  • #1575 c1242e8 @RihanArfan - Match the webhook functionRules key (:token) to the handler route on Nitro v3 Vercel deploys so the runtime override is applied to the real webhook/[token].func instead of generating a duplicate webhook/[...].func. Also propagate workflow.runtime to the public manifest route for consistency.

@workflow/errors@5.0.0-beta.4

  • #2046 ad71b58 @pranaygp - Report corrupted event logs with a distinct CorruptedEventLogError type and CORRUPTED_EVENT_LOG run error code.
  • #2060 1d3959e @pranaygp - Record fatal world response contract failures as non-retryable workflow errors.