Skip to content

Releases: vercel/workflow

workflow@5.0.0-beta.0

08 Apr 00:40
Immutable release. Only release title and notes can be modified.
a261b21

Choose a tag to compare

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

@workflow/core@5.0.0-beta.0

@workflow/cli@5.0.0-beta.0

@workflow/world@5.0.0-beta.0

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

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

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

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

@workflow/web@5.0.0-beta.0

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

@workflow/ai@5.0.0-beta.0

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

@workflow/swc-plugin@5.0.0-beta.0

@workflow/builders@5.0.0-beta.0

@workflow/next@5.0.0-beta.0

@workflow/nitro@5.0.0-beta.0

@workflow/nuxt@5.0.0-beta.0

@workflow/sveltekit@5.0.0-beta.0

@workflow/astro@5.0.0-beta.0

@workflow/vite@5.0.0-beta.0

@workflow/rollup@5.0.0-beta.0

@workflow/errors@5.0.0-beta.0

@workflow/utils@5.0.0-beta.0

@workflow/nest@5.0.0-beta.0

@workflow/serde@5.0.0-beta.0

@workflow/vitest@5.0.0-beta.0

workflow@4.2.0-beta.78

07 Apr 18:19
Immutable release. Only release title and notes can be modified.
61831cf

Choose a tag to compare

@workflow/core@4.2.0-beta.78

  • #1627 5f138f2 @VaguelySerious - Bump specVersion to 3 and gate CBOR queue transport on spec version. Old deployments (specVersion < 3) receive JSON queue messages; new deployments receive CBOR. Handler uses dual transport to deserialize both formats. Fixes replay/reenqueue from dashboard to older deployments.
  • #1629 a6bcea9 @VaguelySerious - CLI start command probes deployment specVersion via health check before choosing queue transport. Health check always uses JSON transport for compatibility with old deployments.
  • #1533 7e70d18 @VaguelySerious - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.
  • #1512 ba916e1 @TooTallNate - Add DOMException to the workflow VM context and add first-class serialization support, preserving message, name, and derived code across serialization boundaries
  • #1618 c9b3038 @VaguelySerious - fix(core): properly propagate stream cancellation on disconnect
  • #1537 c8dce52 @VaguelySerious - Allow workflow invocation to create run if initial storage call in start did not succeed. Send run input through queue to enable this. Allow creating run_created and run_started events together in World, and skip first event list call by returning events directly.
  • #1606 ab872cc @VaguelySerious - Make registeredSteps a global singleton to protect against module duplication and caching issues

@workflow/cli@4.2.0-beta.78

  • #1552 f5d2aef @TooTallNate - Add workflow transform command for inspecting SWC transform output with optional serde compliance analysis
  • #1552 f5d2aef @TooTallNate - Implement serde compliance checks in workflow validate
  • #1629 a6bcea9 @VaguelySerious - CLI start command probes deployment specVersion via health check before choosing queue transport. Health check always uses JSON transport for compatibility with old deployments.
  • #1414 2680a42 @TooTallNate - Add Request and Response revivers to web and CLI hydration so serialized Request/Response objects display correctly in the observability UI and CLI inspect output.

@workflow/world@4.1.0-beta.17

  • #1627 5f138f2 @VaguelySerious - Bump specVersion to 3 and gate CBOR queue transport on spec version. Old deployments (specVersion < 3) receive JSON queue messages; new deployments receive CBOR. Handler uses dual transport to deserialize both formats. Fixes replay/reenqueue from dashboard to older deployments.
  • #1533 7e70d18 @VaguelySerious - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.
  • #1537 c8dce52 @VaguelySerious - Allow workflow invocation to create run if initial storage call in start did not succeed. Send run input through queue to enable this. Allow creating run_created and run_started events together in World, and skip first event list call by returning events directly.

@workflow/world-local@4.1.0-beta.51

  • #1533 7e70d18 @VaguelySerious - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.
  • #1537 c8dce52 @VaguelySerious - Allow workflow invocation to create run if initial storage call in start did not succeed. Send run input through queue to enable this. Allow creating run_created and run_started events together in World, and skip first event list call by returning events directly.

@workflow/world-postgres@4.1.0-beta.53

  • #1533 7e70d18 @VaguelySerious - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.
  • #1537 c8dce52 @VaguelySerious - Allow workflow invocation to create run if initial storage call in start did not succeed. Send run input through queue to enable this. Allow creating run_created and run_started events together in World, and skip first event list call by returning events directly.

@workflow/world-vercel@4.1.0-beta.49

  • #1627 5f138f2 @VaguelySerious - Bump specVersion to 3 and gate CBOR queue transport on spec version. Old deployments (specVersion < 3) receive JSON queue messages; new deployments receive CBOR. Handler uses dual transport to deserialize both formats. Fixes replay/reenqueue from dashboard to older deployments.
  • #1537 c8dce52 @VaguelySerious - Allow workflow invocation to create run if initial storage call in start did not succeed. Send run input through queue to enable this. Allow creating run_created and run_started events together in World, and skip first event list call by returning events directly.
  • #1626 5b9eb40 @VaguelySerious - Paginate writeToStreamMulti to stay within the server's 1000 chunks per batch limit

@workflow/web-shared@4.1.0-beta.73

  • #1414 2680a42 @TooTallNate - Add Request and Response revivers to web and CLI hydration so serialized Request/Response objects display correctly in the observability UI and CLI inspect output.

@workflow/ai@4.1.0-beta.61

@workflow/swc-plugin@4.1.0-beta.22

Read more

workflow@4.2.0-beta.77

07 Apr 19:02
Immutable release. Only release title and notes can be modified.
24a041f

Choose a tag to compare

@workflow/core@4.2.0-beta.77

  • #1591 d8aaf27 @VaguelySerious - Fix step contextStorage global potentially seeing dual-instance issues when bundlers create multiple copies of the module.
  • #1367 047c01b @pranaygp - Make start() return Run<unknown> with unknown[] args when deploymentId is provided, since the deployed workflow version may have different types

@workflow/world@4.1.0-beta.16

@workflow/world-local@4.1.0-beta.50

@workflow/world-vercel@4.1.0-beta.48

  • #1602 760ebf1 @karthikscale3 - Update headers from x-workflow-run-id and x-workflow-step-id to x-vercel-workflow-run-id and x-vercel-workflow-step-id in order to align with header naming convention

@workflow/builders@4.0.1-beta.68

  • #1554 d1330cf @pranaygp - Fix node-module-error plugin pointing at multi-line comments instead of code usage
  • #1598 443a9e6 @TooTallNate - Override "sideEffects": false from package.json for discovered workflow/step/serde entries so esbuild does not drop their bare imports from the virtual entry

@workflow/next@4.0.1-beta.73

  • #1597 4429078 @TooTallNate - Stop unconditionally setting WORKFLOW_PUBLIC_MANIFEST=1 during next dev, which caused public/.well-known/workflow/v1/manifest.json to be created without the env var being explicitly set.

workflow@4.2.0

07 Apr 23:56
Immutable release. Only release title and notes can be modified.
4e435e0

Choose a tag to compare

@workflow/core@4.2.0

@workflow/cli@4.2.0

@workflow/world@4.1.0

@workflow/world-local@4.1.0

@workflow/world-postgres@4.1.0

@workflow/world-vercel@4.1.0

@workflow/world-testing@4.1.0

@workflow/web@4.1.0

@workflow/web-shared@4.1.0

@workflow/ai@4.1.0

@workflow/typescript-plugin@4.0.1

@workflow/swc-plugin@4.1.0

@workflow/builders@4.0.1

@workflow/next@4.0.1

@workflow/nitro@4.0.1

@workflow/nuxt@4.0.1

@workflow/sveltekit@4.0.0

@workflow/astro@4.0.0

@workflow/vite@4.0.0

@workflow/rollup@4.0.0

@workflow/errors@4.1.0

@workflow/utils@4.1.0

@workflow/nest@0.0.0

@workflow/serde@4.1.0

@workflow/vitest@4.0.1

workflow@4.2.0-beta.76

02 Apr 21:26
Immutable release. Only release title and notes can be modified.
45fd831

Choose a tag to compare

@workflow/world-local@4.1.0-beta.49

  • #1588 ef2218a @VaguelySerious - Fix zod v3/v4 schema mismatch crash (keyValidator._parse is not a function) by using consistent zod/v4 imports in queue files that consume v4-native schemas from @workflow/world

@workflow/world-postgres@4.1.0-beta.51

  • #1588 ef2218a @VaguelySerious - Fix zod v3/v4 schema mismatch crash (keyValidator._parse is not a function) by using consistent zod/v4 imports in queue files that consume v4-native schemas from @workflow/world

@workflow/world-vercel@4.1.0-beta.47

  • #1588 ef2218a @VaguelySerious - Fix zod v3/v4 schema mismatch crash (keyValidator._parse is not a function) by using consistent zod/v4 imports in queue files that consume v4-native schemas from @workflow/world

@workflow/web@4.1.0-beta.47

@workflow/ai@4.1.0-beta.60

workflow@4.2.0-beta.75

01 Apr 23:10
Immutable release. Only release title and notes can be modified.
8462c5d

Choose a tag to compare

@workflow/core@4.2.0-beta.75

  • #1569 a98f8de @VaguelySerious - Combine initial run fetch, event fetch, and run_started event creation
  • #1572 d38114b @TooTallNate - Fix resumeHook()/resumeWebhook() failing on workflow runs from pre-encryption deployments by checking the target run's workflowCoreVersion capabilities before encoding the payload
  • #1567 6dc1b78 @VaguelySerious - Increase flow route limit to max fluid duration and fail run if a single replay takes too long

@workflow/world@4.1.0-beta.15

@workflow/world-local@4.1.0-beta.48

@workflow/world-postgres@4.1.0-beta.50

@workflow/builders@4.0.1-beta.66

@workflow/next@4.0.1-beta.71

@workflow/nitro@4.0.1-beta.70

  • #1386 0e8a880 @comfuture - Preserve generated step bundle side effects in Nitro virtual handlers so local production builds keep workflow step registrations available at runtime.

@workflow/sveltekit@4.0.0-beta.64

@workflow/errors@4.1.0-beta.20

workflow@4.2.0-beta.74

30 Mar 20:43
Immutable release. Only release title and notes can be modified.
91ba457

Choose a tag to compare

@workflow/core@4.2.0-beta.74

@workflow/world-local@4.1.0-beta.47

@workflow/web@4.1.0-beta.46

@workflow/ai@4.1.0-beta.59

  • #1529 a0a7195 @VaguelySerious - Fix WorkflowChatTransport blocking browser paint during stream reconnect by yielding to the macrotask queue between chunks

@workflow/builders@4.0.1-beta.65

  • #1560 a3b7c48 @VaguelySerious - Only rewrite .ts extensions to .js in externalized step imports when targeting Node's native ESM loader (vitest), preserving original extensions for framework bundlers (Next.js, SvelteKit, etc.)
  • #1509 d119c74 @VaguelySerious - Fix import.meta.url being undefined when using CJS builds

workflow@4.2.0-beta.73

27 Mar 18:18
Immutable release. Only release title and notes can be modified.
e11eebf

Choose a tag to compare

@workflow/core@4.2.0-beta.73

  • #1520 8e7083b @pranaygp - Add btoa, atob, and Buffer globals to workflow VM context for base64 encoding/decoding
  • #1523 d1391e1 @pranaygp - Fix race condition allowing duplicate hook_disposed events for the same hook
  • #1518 c739b99 @ceolinwill - Fix getWritable() in step functions to resolve on lock release instead of requiring stream close, preventing Vercel function timeouts

@workflow/world-local@4.1.0-beta.46

@workflow/world-postgres@4.1.0-beta.48

@workflow/web@4.1.0-beta.45

@workflow/builders@4.0.1-beta.64

  • #1524 52db376 @matchai - Fix dependency resolution for step imports with .ts, .mts, and .cts extensions

@workflow/vitest@4.0.1-beta.10

  • #1524 52db376 @matchai - Fix step dependencies not being mockable when imported from TypeScript files

workflow@4.2.0-beta.72

24 Mar 17:22
Immutable release. Only release title and notes can be modified.
a375a3f

Choose a tag to compare

@workflow/core@4.2.0-beta.72

  • #1448 73a851a @pranaygp - Add HookConflictError to @workflow/errors and use it for hook token conflicts instead of WorkflowRuntimeError
  • #1340 84599b7 @pranaygp - Add error code classification (USER_ERROR, RUNTIME_ERROR) to run_failed events, improve queue and schema validation error logging
  • #1452 672d919 @pranaygp - Fix workflow/step not found errors to fail gracefully instead of causing infinite queue retries
  • #1344 beccbc4 @pranaygp - Remove VQS maxDeliveries cap and enforce max delivery limit in workflow/step handlers with graceful failure
  • #1460 78f1b0e @VaguelySerious - Support negative startIndex for streaming (e.g. -3 reads last 3 chunks)
  • #1438 da6adf7 @VaguelySerious - Improve display when run data has expired
  • #1342 aee035f @pranaygp - Replace HTTP status code checks with semantic error types (EntityConflictError, RunExpiredError, ThrottleError, TooEarlyError). BREAKING CHANGE: WorkflowAPIError renamed to WorkflowWorldError.
  • #1470 01bbe66 @VaguelySerious - Add getStreamChunks() and getStreamInfo() to the Streamer interface, and getTailIndex() to the readable stream returned by run.getReadable(). WorkflowChatTransport now reads the x-workflow-stream-tail-index response header to resolve negative initialStartIndex values into absolute positions, fixing reconnection retries after a disconnect.
  • #1446 2b07294 @VaguelySerious - Ensure open stream flush is await-able in pendingOps

@workflow/cli@4.2.0-beta.72

@workflow/world@4.1.0-beta.14

  • #1460 78f1b0e @VaguelySerious - Support negative startIndex for streaming (e.g. -3 reads last 3 chunks)
  • #1470 01bbe66 @VaguelySerious - Add getStreamChunks() and getStreamInfo() to the Streamer interface, and getTailIndex() to the readable stream returned by run.getReadable(). WorkflowChatTransport now reads the x-workflow-stream-tail-index response header to resolve negative initialStartIndex values into absolute positions, fixing reconnection retries after a disconnect.

@workflow/world-local@4.1.0-beta.45

  • #1340 84599b7 @pranaygp - Add error code classification (USER_ERROR, RUNTIME_ERROR) to run_failed events, improve queue and schema validation error logging
  • #1434 d428d66 @pranaygp - Add atomic terminal-state guards to step and wait transitions using writeExclusive lock files. Prevents concurrent step_completed/step_failed/wait_completed races and blocks step_started on already-terminal steps. Also adds cancelled to isStepTerminal.
  • #1344 beccbc4 @pranaygp - Remove VQS maxDeliveries cap and enforce max delivery limit in workflow/step handlers with graceful failure
  • #1460 78f1b0e @VaguelySerious - Support negative startIndex for streaming (e.g. -3 reads last 3 chunks)
  • #1342 aee035f @pranaygp - Replace HTTP status code checks with semantic error types (EntityConflictError, RunExpiredError, ThrottleError, TooEarlyError). BREAKING CHANGE: WorkflowAPIError renamed to WorkflowWorldError.
  • #1470 01bbe66 @VaguelySerious - Add getStreamChunks() and getStreamInfo() to the Streamer interface, and getTailIndex() to the readable stream returned by run.getReadable(). WorkflowChatTransport now reads the x-workflow-stream-tail-index response header to resolve negative initialStartIndex values into absolute positions, fixing reconnection retries after a disconnect.

@workflow/world-postgres@4.1.0-beta.47

  • #1434 d428d66 @pranaygp - Fix race condition in step_started that could corrupt the event log. The UPDATE for step_started now includes a conditional guard (status NOT IN ('completed', 'failed', 'cancelled')) to prevent a concurrent step execution from reverting a completed step back to running. Also adds terminal-state guards to step_retrying, run_completed, run_failed, and run_cancelled, and adds cancelled to the existing guards on step_completed and step_failed.
  • #1484 5502438 @jlalmes - Replace postgres (postgres.js) with pg (node-postgres) for Drizzle and Graphile Worker. Add optional pool on createWorld to share a pg.Pool; when provided
  • #1460 78f1b0e @VaguelySerious - Support negative startIndex for streaming (e.g. -3 reads last 3 chunks)
  • #1342 aee035f @pranaygp - Replace HTTP status code checks with semantic error types (EntityConflictError, RunExpiredError, ThrottleError, TooEarlyError). BREAKING CHANGE: WorkflowAPIError renamed to WorkflowWorldError.
  • #1470 01bbe66 @VaguelySerious - Add getStreamChunks() and getStreamInfo() to the Streamer interface, and getTailIndex() to the readable stream returned by run.getReadable(). WorkflowChatTransport now reads the x-workflow-stream-tail-index response header to resolve negative initialStartIndex values into absolute positions, fixing reconnection retries after a disconnect.

@workflow/world-vercel@4.1.0-beta.45

Read more

workflow@4.2.0-beta.71

18 Mar 17:24
Immutable release. Only release title and notes can be modified.
5d19698

Choose a tag to compare

@workflow/core@4.2.0-beta.71

  • #1409 97e4384 @TooTallNate - Remove @deprecated tag from deploymentId in StartOptions
  • #1413 dcb0761 @TooTallNate - Refactor builtin step functions to use this value serialization instead of explicit parameter passing. Remove unused duplicate builtins file from @workflow/core.
  • #1396 2f0772d @karthikscale3 - Track Vercel request IDs (x-vercel-id) on all workflow events for correlating request logs with workflow executions
  • #1400 a2c0c7e @VaguelySerious - Seed lazy workflow file discovery in NextJS. Require workflow definitions to be in manifest for Vercel environments.
  • #1418 2cc42cb @VaguelySerious - Don't fail to queue on 409 responses
  • #1402 f52afe7 @VaguelySerious - Reduce log severity for 409/429 logs from warn to info, as they can't be meaningfully acted on by the consumer.

@workflow/world@4.1.0-beta.13

  • #1396 2f0772d @karthikscale3 - Track Vercel request IDs (x-vercel-id) on all workflow events for correlating request logs with workflow executions
  • #1364 94c14c7 @karthikscale3 - Strip only ref/payload fields from eventData when resolveData is 'none', preserving all other metadata

@workflow/world-local@4.1.0-beta.44

  • #1417 02ea057 @NathanColosimo - Remove the unused world-local queue executor API and clean up postgres queue tests.
  • #1359 0f07403 @VaguelySerious - Write workflow data for vitest to the same folder as other local world runs, allowing them to be visible in observability tooling. Use a suffix-based system to ensure clearing runs on test start only affects vitest-related data.
  • #1364 94c14c7 @karthikscale3 - Strip only ref/payload fields from eventData when resolveData is 'none', preserving all other metadata

@workflow/world-postgres@4.1.0-beta.46

@workflow/world-vercel@4.1.0-beta.44

  • #1378 d6e8727 @TooTallNate - Reorder token resolution in fetchRunKey and resolveLatestDeploymentId to prefer options.token / VERCEL_TOKEN before calling OIDC, skipping the OIDC network call when a token is already available
  • #1396 2f0772d @karthikscale3 - Track Vercel request IDs (x-vercel-id) on all workflow events for correlating request logs with workflow executions
  • #1335 e902980 @VaguelySerious - Use undici dispatcher for queue client
  • #1364 94c14c7 @karthikscale3 - Strip only ref/payload fields from eventData when resolveData is 'none', preserving all other metadata

@workflow/web@4.1.0-beta.43

  • #1381 7b9b3c1 @karthikscale3 - web-shared: Timestamp tooltips, toast adapter, improved skeletons, and encrypted data detection for lazy-loaded events web: Add toast for decryption
  • #1364 94c14c7 @karthikscale3 - Strip only ref/payload fields from eventData when resolveData is 'none', preserving all other metadata

@workflow/web-shared@4.1.0-beta.66

@workflow/ai@4.1.0-beta.57

  • #1362 74aea7b @pranaygp - BREAKING CHANGE: Migrate to AI SDK v6. Drop AI SDK v5 support. - Migrate all types from V2 to V3 (LanguageModelV2*LanguageModelV3*) - Update peer dependency: ai ^5 || ^6^6, @ai-sdk/provider ^2 || ^3^3 - Simplify CompatibleLanguageModel from V2|V3 union to LanguageModelV3 - Remove providerExecuted guard on tool-result stream parts (V3: all tool-results are provider-executed) - Add instructions constructor option (replaces deprecated system) - Add onStepFinish and onFinish on constructor (merged with stream callbacks) - Add timeout stream option - Enrich onFinish event with text, finishReason, totalUsage - Add @workflow/ai/test export with mockTextModel and mockSequenceModel for workflow e2e testing - Update OutputSpecification to match AI SDK v6 Output interface - Fix WorkflowChatTransport to forward body and headers from ChatRequestOptions to prepareSendMessagesRequest and the default request body
  • #1385 2c80ec7 @VaguelySerious - Add type helpers (InferDurableAgentTools, InferDurableAgentUIMessage), support prepareStep on DurableAgent constructor, fix supportedUrls causing AI_DownloadError for image URLs, and add telemetry span support for experimental_telemetry. Fix LanguageModelV3ToolResultOutput breaking response when not json compatible.
  • #1389 4a298b5 @TooTallNate - Fix prepareStep system message being discarded when messages is also returned

@workflow/swc-plugin@4.1.0-beta.20

Read more