Version Packages (beta) - #3087
Conversation
c9f67d0 to
fc81f45
Compare
f983d07 to
3069b49
Compare
b36a5ee to
706b6c4
Compare
🧪 E2E Test Results✅ All tests passed E2E Test SummarySummary
Details by Category✅ ▲ Vercel Production
✅ 💻 Local Development
✅ 📦 Local Production
✅ 🐘 Local Postgres
✅ 🪟 Windows
✅ 📋 Other
✅ vercel-multi-region
|
📊 Workflow Benchmarkscommit Backend:
📜 Previous results (5)af0556dTue, 28 Jul 2026 21:33:03 GMT · run logs
a69e1c2Mon, 27 Jul 2026 19:58:56 GMT · run logs
388e2e4Mon, 27 Jul 2026 18:58:11 GMT · run logs
93df707Mon, 27 Jul 2026 16:49:58 GMT · run logs
677b41eMon, 27 Jul 2026 16:17:58 GMT · run logs
ℹ️ Metric definitions & methodologyBest/P75/P90/P99 deltas compare against the most recent benchmark run on Metrics — TTFS: time to first step body (in-deployment start() → first step body, deployment clocks) · STSO: step-to-step overhead (gap between consecutive step bodies) · WO: workflow overhead (whole-run time outside step bodies, in-deployment anchored) · SL: stream latency (in-deployment write → read propagation, readAt - writtenAt) · SO: stream overhead (end-to-end write+consume time beyond the modelled generation window) Scenarios — step: one trivial no-op step, no stream; no hooks, so the run stays in turbo mode (in-process fast path) · stream: one streaming step; no hooks, so the run stays in turbo mode (in-process fast path) · hook + stream: registers a hook before one step, which exits turbo mode (dispatch path) · 1020 steps: 1020 trivial sequential steps; STSO is measured between consecutive steps in the given step ranges, and WO is the whole-run overhead outside step bodies · stream latency: parallel reader/writer steps on a dedicated stream; SL is the in-deployment write->read propagation (readAt - writtenAt) · stream overhead (text): writer streams 300 variable-length text token deltas paced at 100/s for 3s (a haiku-size LLM's token throughput) while a parallel reader drains the whole stream; SO is the end-to-end write+consume time beyond the 3s generation window (overhead/backpressure) · stream overhead (structured): same workload as stream overhead (text), but each delta is an AI-SDK-style structured object ({ type: 'text-delta', id, text }) instead of a raw string, so the SO gap vs the text scenario is the added serialization cost 🔴 marks a percentile over its target (within target is left unmarked). Targets (p75/p90/p99, ms) — TTFS 200/300/600 · SL 50/60/125 · SO 250/500/1000 · STSO (1-20) 20/30/60 · STSO (101-120) 30/45/90 · STSO (1001-1020) 40/60/120 All metrics are measured from deployment-side timestamps only. Runs are triggered by an in-deployment route that stamps the anchor ( Cold starts are kept in the numbers on purpose — they are part of real bursty-workload latency. The workbench deployment cold-starts the |
|
No backport to This is an automated changesets "Version Packages (beta)" commit that only bumps package versions, consumes changeset files, and appends CHANGELOG entries. Release plumbing and version bumps are explicitly not backported; To override, re-run the Backport to stable workflow manually via |
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
mainis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonmain.Releases
@workflow/cli@5.0.0-beta.37
Major Changes
62d570eThanks @NathanColosimo! - Remove the standalone step URL API and stale generated route artifacts while keeping step registrations inside the combined flow output.Patch Changes
#3146
e8bc7d6Thanks @TooTallNate! - Let observability tooling decrypt sealed (encp) payloads: key resolution now yields the run's full key capability, andhydrateDataWithKeydispatches on the envelope format.Updated dependencies [
8c12358,cfe7570,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,b4ba79e,4ba223a,a86035f,b8bcded,b406a04,d24c91c,fd05393,313a074,fc81f45,49276f2,49276f2,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,62d570e,62d570e,2941b1c,49276f2,d813fb8,b610c46]:@workflow/core@5.0.0-beta.37
Major Changes
#3128
7959accThanks @NathanColosimo! - BREAKING CHANGE: Remove the deprecatedexperimental_setAttributesandExperimentalSetAttributesOptionsaliases; usesetAttributesandSetAttributesOptionsinstead.#3112
4ada27dThanks @NathanColosimo! - Remove deprecated world-specific factory aliases in favor ofcreateWorld.#3061
62d570eThanks @NathanColosimo! - Remove the retired step route runtime and make queue health checks target the combined flow handler.#3045
d813fb8Thanks @NathanColosimo! - Deterministic sandbox hardening:crypto.subtle.digestin workflow functions now computes synchronously vianode:crypto(byte-identical values, deterministic timing under replay);Atomics.waitAsync, asyncWebAssemblycompilation,WeakRef, andFinalizationRegistryare no longer exposed (wall-clock timing and GC observation cannot be replayed).Minor Changes
#3098
8a95d36Thanks @TooTallNate! - Carry the owning run's public key in forwardedWritableStreamdescriptors, so a run writing into another run's stream seals frames with no run fetch and no key-API round trip.#3146
e8bc7d6Thanks @TooTallNate! - Let observability tooling decrypt sealed (encp) payloads: key resolution now yields the run's full key capability, andhydrateDataWithKeydispatches on the envelope format.#3094
7a65030Thanks @TooTallNate! - Teach the serialization layer to read and writeencpsealed envelopes via aPayloadKeyunion, so a cross-run writer can encrypt with only a public key. Existing symmetric call sites are unaffected.#3096
0b1ca15Thanks @TooTallNate! -resumeHook()now seals its payload to the target run's published public key when one is present, removing the cross-deploymentrun-keyAPI round trip from hook resumption. Readers resolve the full key capability so they can open sealed payloads.#3095
b4ba79eThanks @TooTallNate! - Derive each run's X25519 public key atstart()and stamp it on the run, so cross-run writers can seal payloads to the run without fetching its symmetric key.#3093
4ba223aThanks @TooTallNate! - Add theencpsealed-box encryption primitive: X25519 keypairs derived from the existing per-run key material, letting cross-run writers encrypt with only a public key. Not yet wired into any write path.#3099
a86035fThanks @TooTallNate! - The cross-deployment capability probe now returns the target run's public key, lettingstart()seal workflow arguments without a separate key-lookup request.Patch Changes
#3111
8c12358Thanks @NathanColosimo! - Clarify runtime invariants and compression behavior.#3155
b8bcdedThanks @TooTallNate! - Seal forwarded writes to streams taken withgetWritable()in a workflow body, which previously fell back to fetching the owner's symmetric key because the workflow VM has no key material to publish on the handle.#3125
d24c91cThanks @karthikscale3! - Hooks can carry an optionalresumeContext; when present,resumeHook/resumeWebhookresume from it directly instead of fetching the full run, saving a round trip per resume. When the context also carries the run'sencryptionPublicKey, the resume seals its payload (encp) directly to that key, so a default webhook resume needs neither a run read nor a run-key lookup. These two optimizations fall back independently: it fetches the full run when the context is absent, and uses symmetric encryption when no usable public key is available.#3069
fd05393Thanks @TooTallNate! - Fix a false "exceeded max retries" run failure: the retry-ceiling guard counted duplicatestep_startedevents written by invocations racing on the same pending batch as real attempts. The owned-recovery ceiling now counts only the owning message's own starts, and the background-step ceiling counts only bare (queue-delivered) starts.#3088
fc81f45Thanks @karthikscale3! - Stream writes dispatch the first chunk of an idle stream immediately (flush window default 0 instead of 10ms). Fast producers keep full batching via in-flight accumulation; setstreamFlushIntervalMs(World option) orWORKFLOW_STREAM_FLUSH_INTERVAL_MS(env, takes precedence) above 0 to opt into a windowed leading edge.#3131
d7553c4Thanks @NathanColosimo! - Avoid rescanning already prewarmed replay payloads during inline replays.#3110
5d17c60Thanks @NathanColosimo! - Consolidate runtime event merging logic.#3139
2941b1cThanks @pranaygp! - Deliver step results, wait completions, hook payloads and aborts in strict event-log order relative to one another, preventing replay divergence (CORRUPTED_EVENT_LOG) when a step completion is adjacent in the log to await_completed,hook_receivedor abort that a concurrent branch is awaiting.#3078
b610c46Thanks @karthikscale3! - Stream write batching now lives in the server writable itself (group commit), so rawReadableStreams piped across workflow/step boundaries batch the same asgetWritable()instead of sending one request per chunk.Updated dependencies [
8c12358,b4ba79e,a86035f,d24c91c,313a074,fc81f45,49276f2,49276f2,4ada27d,62d570e,62d570e,62d570e,49276f2]:@workflow/utils@5.0.0-beta.7
Major Changes
62d570eThanks @NathanColosimo! - Remove the standalone step URL API and stale generated route artifacts while keeping step registrations inside the combined flow output.Patch Changes
49276f2Thanks @VaguelySerious! - Select the Vercel World for builds that target Vercel without a deployment ID, such asvercel buildfollowed byvercel deploy --prebuilt, and applyworkflows.local.portwhenever the Local World is the target.@workflow/web-shared@5.0.0-beta.37
Major Changes
62d570eThanks @NathanColosimo! - Check only the combined workflow endpoint in the observability health check.Patch Changes
#3146
e8bc7d6Thanks @TooTallNate! - Let observability tooling decrypt sealed (encp) payloads: key resolution now yields the run's full key capability, andhydrateDataWithKeydispatches on the envelope format.#3095
b4ba79eThanks @TooTallNate! - Hide the run'sencryptionPublicKeyin the attribute panel — internal encryption plumbing, not user-facing.#3125
d24c91cThanks @karthikscale3! - Hooks can carry an optionalresumeContext; when present,resumeHook/resumeWebhookresume from it directly instead of fetching the full run, saving a round trip per resume. When the context also carries the run'sencryptionPublicKey, the resume seals its payload (encp) directly to that key, so a default webhook resume needs neither a run read nor a run-key lookup. These two optimizations fall back independently: it fetches the full run when the context is absent, and uses symmetric encryption when no usable public key is available.#3060
45a56a3Thanks @mitul-s! - Animate the new trace viewer's zoom controls consistently with span focus.Updated dependencies [
8c12358,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,b4ba79e,4ba223a,a86035f,b8bcded,d24c91c,fd05393,fc81f45,49276f2,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,62d570e,2941b1c,d813fb8,b610c46]:workflow@5.0.0-beta.37
Major Changes
#3128
7959accThanks @NathanColosimo! - BREAKING CHANGE: Remove the deprecatedexperimental_setAttributesandExperimentalSetAttributesOptionsaliases; usesetAttributesandSetAttributesOptionsinstead.#3061
62d570eThanks @NathanColosimo! - Remove the retired step route runtime and make queue health checks target the combined flow handler.#3045
d813fb8Thanks @NathanColosimo! - Deterministic sandbox hardening:crypto.subtle.digestin workflow functions now computes synchronously vianode:crypto(byte-identical values, deterministic timing under replay);Atomics.waitAsync, asyncWebAssemblycompilation,WeakRef, andFinalizationRegistryare no longer exposed (wall-clock timing and GC observation cannot be replayed).Patch Changes
8c12358,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,4ba223a,a86035f,b8bcded,f11e9fe,d24c91c,fd05393,fc81f45,3069b49,49276f2,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,2941b1c,d813fb8,0d6ec43,b610c46]:@workflow/world@5.0.0-beta.23
Major Changes
62d570eThanks @NathanColosimo! - Remove legacy step queue topics and payloads now that queued steps use the workflow topic and combined flow handler.Minor Changes
#3095
b4ba79eThanks @TooTallNate! - Persist and transport the new optionalencryptionPublicKeyfield on workflow runs, carried onrun_created(andrun_startedfor resilient start).#3099
a86035fThanks @TooTallNate! - The cross-deployment capability probe now returns the target run's public key, lettingstart()seal workflow arguments without a separate key-lookup request.Patch Changes
#3111
8c12358Thanks @NathanColosimo! - Clarify runtime invariants and compression behavior.#3125
d24c91cThanks @karthikscale3! - Hooks can carry an optionalresumeContext; when present,resumeHook/resumeWebhookresume from it directly instead of fetching the full run, saving a round trip per resume. When the context also carries the run'sencryptionPublicKey, the resume seals its payload (encp) directly to that key, so a default webhook resume needs neither a run read nor a run-key lookup. These two optimizations fall back independently: it fetches the full run when the context is absent, and uses symmetric encryption when no usable public key is available.#3088
fc81f45Thanks @karthikscale3! - Stream writes dispatch the first chunk of an idle stream immediately (flush window default 0 instead of 10ms). Fast producers keep full batching via in-flight accumulation; setstreamFlushIntervalMs(World option) orWORKFLOW_STREAM_FLUSH_INTERVAL_MS(env, takes precedence) above 0 to opt into a windowed leading edge.@workflow/world-local@5.0.0-beta.31
Major Changes
#3112
4ada27dThanks @NathanColosimo! - Remove deprecated world-specific factory aliases in favor ofcreateWorld.#3061
62d570eThanks @NathanColosimo! - Remove legacy step queue topics and payloads now that queued steps use the workflow topic and combined flow handler.Minor Changes
b4ba79eThanks @TooTallNate! - Persist and transport the new optionalencryptionPublicKeyfield on workflow runs, carried onrun_created(andrun_startedfor resilient start).Patch Changes
#3144
49276f2Thanks @VaguelySerious! - Warn when the Local World starts inside a Vercel deployment, and fail with an actionable error instead of a confusingENOENTwhen its data directory cannot be created on a read-only filesystem.Updated dependencies [
8c12358,b4ba79e,a86035f,d24c91c,fc81f45,49276f2,62d570e,62d570e,62d570e]:@workflow/world-postgres@5.0.0-beta.29
Major Changes
62d570eThanks @NathanColosimo! - Remove legacy step queue topics and payloads now that queued steps use the workflow topic and combined flow handler.Minor Changes
b4ba79eThanks @TooTallNate! - Add anencryption_public_keycolumn toworkflow_runs(migration0016) to store each run's X25519 public key.Patch Changes
#3064
cdb3db4Thanks @joeyhotz! - On shutdown, abort stalled workflow and step HTTP deliveries after Graphile Worker's grace period so their Postgres job rows are unlocked through normal failure handling instead of waiting for stale-lock recovery; aborted deliveries still consume an attempt and retry only when budget remains. Add opt-in application-managed shutdown throughapplicationManagedShutdownorWORKFLOW_POSTGRES_APPLICATION_MANAGED_SHUTDOWN=1so applications can awaitworld.close()before closing their HTTP server and caller-owned pool.#3125
d24c91cThanks @karthikscale3! - Hooks can carry an optionalresumeContext; when present,resumeHook/resumeWebhookresume from it directly instead of fetching the full run, saving a round trip per resume. When the context also carries the run'sencryptionPublicKey, the resume seals its payload (encp) directly to that key, so a default webhook resume needs neither a run read nor a run-key lookup. These two optimizations fall back independently: it fetches the full run when the context is absent, and uses symmetric encryption when no usable public key is available.Updated dependencies [
8c12358,b4ba79e,a86035f,d24c91c,fc81f45,49276f2,49276f2,4ada27d,62d570e,62d570e,62d570e]:@workflow/world-vercel@5.0.0-beta.33
Major Changes
#3112
4ada27dThanks @NathanColosimo! - Remove deprecated world-specific factory aliases in favor ofcreateWorld.#3061
62d570eThanks @NathanColosimo! - Remove legacy step queue topics and payloads now that queued steps use the workflow topic and combined flow handler.Minor Changes
#3095
b4ba79eThanks @TooTallNate! - Persist and transport the new optionalencryptionPublicKeyfield on workflow runs, carried onrun_created(andrun_startedfor resilient start).#3099
a86035fThanks @TooTallNate! - The cross-deployment capability probe now returns the target run's public key, lettingstart()seal workflow arguments without a separate key-lookup request.Patch Changes
#3111
8c12358Thanks @NathanColosimo! - Clarify runtime invariants and compression behavior.#3062
313a074Thanks @karthikscale3! - AddWORKFLOW_DISABLE_ANALYTICS_READS=1to opt the world'sanalyticsread namespace off, forcingworkflow inspectlist paths onto strongly consistent primary storage. Intended for tests and tooling that read entities immediately after writing them, where the analytics store's asynchronous ingestion can return stale pages.#3144
49276f2Thanks @VaguelySerious! - Explain how to fix a build targeting the Vercel World that runs outside a Vercel deployment, whereVERCEL_DEPLOYMENT_IDis missing.Updated dependencies [
8c12358,b4ba79e,a86035f,d24c91c,fc81f45,62d570e,62d570e]:@workflow/builders@5.0.0-beta.37
Minor Changes
cfe7570Thanks @VaguelySerious! - Add adiscoverWorkflowsInNodeModulesoption (andWORKFLOW_DISCOVER_NODE_MODULESenv var) to stop workflow discovery from descending intonode_modules, skipping the cost of scanning third-party dependencies for workflow/step/serde code.Patch Changes
#3052
b406a04Thanks @copilot-swe-agent! - Hoist theshouldFollowImportsFromFilecheck out ofprocessImportSpecifierso it is computed once per file instead of once per import specifier.#3061
62d570eThanks @NathanColosimo! - Remove the standalone step URL API and stale generated route artifacts while keeping step registrations inside the combined flow output.Updated dependencies [
8c12358,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,b4ba79e,4ba223a,a86035f,b8bcded,d24c91c,fd05393,313a074,fc81f45,49276f2,49276f2,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,62d570e,2941b1c,49276f2,d813fb8,b610c46]:@workflow/astro@5.0.0-beta.37
Patch Changes
#3166
0d6ec43Thanks @TooTallNate! - The generated webhook route now passes the incoming request directly to its handler instead of copying it into a newRequest, so the request body is no longer read before the handler runs.Updated dependencies [
cfe7570,b406a04,62d570e]:@workflow/errors@5.0.0-beta.13
Patch Changes
#3061
62d570eThanks @NathanColosimo! - Remove the retired step route runtime and make queue health checks target the combined flow handler.Updated dependencies [
49276f2,62d570e]:@workflow/nest@5.0.0-beta.37
Patch Changes
cfe7570,b406a04,62d570e]:@workflow/next@5.0.0-beta.37
Patch Changes
#3071
f11e9feThanks @TooTallNate! - UpdatenextdevDependency to 16.2.11 to address CVE-2026-64641#3085
3069b49Thanks @VaguelySerious! - Dev watcher now respects.gitignoreand aWORKFLOW_DEV_WATCH_IGNORED_PATHSenv var, avoidingEMFILE: too many open fileson large monorepos.#3144
49276f2Thanks @VaguelySerious! - Select the Vercel World for builds that target Vercel without a deployment ID, such asvercel buildfollowed byvercel deploy --prebuilt, and applyworkflows.local.portwhenever the Local World is the target.#3061
62d570eThanks @NathanColosimo! - Remove the standalone step URL API and stale generated route artifacts while keeping step registrations inside the combined flow output.Updated dependencies [
8c12358,cfe7570,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,4ba223a,a86035f,b8bcded,b406a04,d24c91c,fd05393,fc81f45,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,2941b1c,d813fb8,b610c46]:@workflow/nitro@5.0.0-beta.37
Patch Changes
#3061
62d570eThanks @NathanColosimo! - Remove the standalone step URL API and stale generated route artifacts while keeping step registrations inside the combined flow output.Updated dependencies [
8c12358,cfe7570,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,4ba223a,a86035f,b8bcded,b406a04,d24c91c,fd05393,fc81f45,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,62d570e,2941b1c,d813fb8,b610c46]:@workflow/nuxt@5.0.0-beta.37
Patch Changes
cfe7570,b406a04,62d570e]:@workflow/rollup@5.0.0-beta.37
Patch Changes
cfe7570,b406a04,62d570e]:@workflow/sveltekit@5.0.0-beta.37
Patch Changes
#3166
0d6ec43Thanks @TooTallNate! - The generated webhook route now passes the incoming request directly to its handler instead of copying it into a newRequest, so the request body is no longer read before the handler runs.Updated dependencies [
cfe7570,b406a04,62d570e]:@workflow/vite@5.0.0-beta.37
Patch Changes
cfe7570,b406a04,62d570e]:@workflow/vitest@5.0.0-beta.37
Patch Changes
8c12358,cfe7570,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,b4ba79e,4ba223a,a86035f,b8bcded,b406a04,d24c91c,fd05393,fc81f45,49276f2,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,62d570e,2941b1c,d813fb8,b610c46]:@workflow/web@5.0.0-beta.37
Patch Changes
#3146
e8bc7d6Thanks @TooTallNate! - Let observability tooling decrypt sealed (encp) payloads: key resolution now yields the run's full key capability, andhydrateDataWithKeydispatches on the envelope format.#3061
62d570eThanks @NathanColosimo! - Check only the combined workflow endpoint in the observability health check.Updated dependencies [
b4ba79e,49276f2,4ada27d,62d570e]:@workflow/world-testing@5.0.0-beta.37
Patch Changes
#3055
6670e08Thanks @VaguelySerious! - Fix flaky Local World tests caused by concurrent test servers sharing one data directory and re-enqueuing each other's in-flight runs on startup#3061
62d570eThanks @NathanColosimo! - Remove the standalone step URL API and stale generated route artifacts while keeping step registrations inside the combined flow output.Updated dependencies [
8c12358,8a95d36,e8bc7d6,7a65030,0b1ca15,b4ba79e,b4ba79e,4ba223a,a86035f,b8bcded,d24c91c,fd05393,fc81f45,49276f2,49276f2,d7553c4,5d17c60,7959acc,4ada27d,62d570e,62d570e,62d570e,2941b1c,d813fb8,b610c46]: