Version Packages (beta)#1655
Conversation
📊 Benchmark Results
workflow with no steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro workflow with 1 step💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Express | Next.js (Turbopack) workflow with 10 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express workflow with 25 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express workflow with 50 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express Promise.all with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express Promise.all with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) Promise.all with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) Promise.race with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Express | Next.js (Turbopack) Promise.race with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) Promise.race with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro workflow with 10 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro workflow with 25 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Express | Next.js (Turbopack) workflow with 50 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) workflow with 10 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Next.js (Turbopack) | Express | Nitro workflow with 25 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Express | Next.js (Turbopack) workflow with 50 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Next.js (Turbopack) | Nitro | Express Stream Benchmarks (includes TTFB metrics)workflow with stream💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro stream pipeline with 5 transform steps (1MB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) 10 parallel streams (1MB each)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro fan-out fan-in 10 streams (1MB each)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro SummaryFastest Framework by WorldWinner determined by most benchmark wins
Fastest World by FrameworkWinner determined by most benchmark wins
Column Definitions
Worlds:
|
🧪 E2E Test Results❌ Some tests failed Summary
❌ Failed Tests🌍 Community Worlds (74 failed)mongodb (7 failed):
redis (7 failed):
turso (60 failed):
Details by Category✅ ▲ Vercel Production
✅ 💻 Local Development
✅ 📦 Local Production
✅ 🐘 Local Postgres
✅ 🪟 Windows
❌ 🌍 Community Worlds
✅ 📋 Other
❌ Some E2E test jobs failed:
Check the workflow run for details. |
cbf421d to
d2e45e1
Compare
e9d9a11 to
4a9774b
Compare
4a9774b to
20bd19a
Compare
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/builders@5.0.0-beta.1
Major Changes
89d242fThanks @TooTallNate! - BREAKING CHANGE: RemoveisWorkflowSdkFilepath-based serde exclusion. Serde discovery now uses AST-level verification via SWC detect mode across all integration paths (esbuild plugin, Next.js deferred builder, Next.js loader). This allows class definitions with serde symbols in SDK packages like@workflow/coreto be discovered and bundled correctly.Patch Changes
#1669
dc0c0dcThanks @TooTallNate! - Fix step bundle discovery and externalization for SDK serde classesimportParentstracking to all imports (not just file extensions) soparentHasChild()works through bare specifier importsworkflow/runtimein discovery inputs so SDK serde classes likeRunare always discovered#1562
e436242Thanks @VaguelySerious! - Switch Vercel Build Output API and standalone builder output from CJS to ESM. Step bundles, workflow bundles, and webhook bundles now emit ESM format by default, preserving nativeimport.meta.urlsupport and eliminating the need for CJS polyfills. Fully-bundled ESM output includes acreateRequirebanner to support CJS dependencies that userequire()for Node.js builtins. The intermediate workflow bundle (which runs insidevm.runInContext) remains CJS as required by the VM execution model.#1670
32a17b4Thanks @TooTallNate! - Fix lazy discovery bare specifier resolution in copied step filesenhanced-resolvewith ESM conditions to resolve bare specifiers from the original source file's locationenhanced-resolveto pnpm catalog and usecatalog:in both packagesUpdated dependencies [
d040182,66d49c0,ec517fa,a5c90ce,ea97bd6,0a86de3,71d39d2,873b4e2,66585fd,0a86de3,66d49c0,ebb0a4a,9513a81]:@workflow/cli@5.0.0-beta.1
Major Changes
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas the first parameter.writeToStream(name, runId, chunk)→streams.write(runId, name, chunk),writeToStreamMulti→streams.writeMulti,closeStream→streams.close,readFromStream→streams.get(runId, name, startIndex?),listStreamsByRunId→streams.list(runId).#1293
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.Patch Changes
#1562
e436242Thanks @VaguelySerious! - Switch Vercel Build Output API and standalone builder output from CJS to ESM. Step bundles, workflow bundles, and webhook bundles now emit ESM format by default, preserving nativeimport.meta.urlsupport and eliminating the need for CJS polyfills. Fully-bundled ESM output includes acreateRequirebanner to support CJS dependencies that userequire()for Node.js builtins. The intermediate workflow bundle (which runs insidevm.runInContext) remains CJS as required by the VM execution model.#942
873b4e2Thanks @VaguelySerious! - BREAKING CHANGE: MakegetWorldandcreateWorldasynchronous to support ESM dynamic imports for custom world modules. All callers must nowawait getWorld().Updated dependencies [
d040182,66d49c0,dc0c0dc,e436242,ec517fa,a5c90ce,ea97bd6,68cf25e,0a86de3,32a17b4,71d39d2,873b4e2,66585fd,0a86de3,89d242f,66d49c0,ebb0a4a,9513a81]:@workflow/core@5.0.0-beta.1
Major Changes
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas the first parameter.writeToStream(name, runId, chunk)→streams.write(runId, name, chunk),writeToStreamMulti→streams.writeMulti,closeStream→streams.close,readFromStream→streams.get(runId, name, startIndex?),listStreamsByRunId→streams.list(runId).#1632
0a86de3Thanks @TooTallNate! - BREAKING CHANGE: Remove@workflow/core/privateandworkflow/internal/privatepublic subpath exports. The SWC compiler plugin no longer generates imports from these paths.#1293
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.Minor Changes
#1652
ec517faThanks @TooTallNate! - Addfeatures.encryptiontoWorkflowMetadatareturned bygetWorkflowMetadata()#1616
71d39d2Thanks @TooTallNate! - Use custom class serialization forRunacross runtime and workflow VM contexts, and add e2e coverage forRuninstance boundary roundtrips#1677
9513a81Thanks @TooTallNate! - Add serialization support for workflow function referencesPatch Changes
#1658
a5c90ceThanks @VaguelySerious! - Fix community world E2E tests by addingspecVersionto the World interface sostart()uses the safe baseline (v2) for worlds that don't declare their supported version#1678
ea97bd6Thanks @TooTallNate! - Remove redundanthc_prefix from health check correlationId that caused doubledhc_hc_in the derived runId and stream name.#942
873b4e2Thanks @VaguelySerious! - BREAKING CHANGE: MakegetWorldandcreateWorldasynchronous to support ESM dynamic imports for custom world modules. All callers must nowawait getWorld().Updated dependencies [
66d49c0,a5c90ce,68cf25e,66d49c0]:@workflow/next@5.0.0-beta.1
Major Changes
89d242fThanks @TooTallNate! - BREAKING CHANGE: RemoveisWorkflowSdkFilepath-based serde exclusion. Serde discovery now uses AST-level verification via SWC detect mode across all integration paths (esbuild plugin, Next.js deferred builder, Next.js loader). This allows class definitions with serde symbols in SDK packages like@workflow/coreto be discovered and bundled correctly.Patch Changes
#1670
32a17b4Thanks @TooTallNate! - Fix lazy discovery bare specifier resolution in copied step filesenhanced-resolvewith ESM conditions to resolve bare specifiers from the original source file's locationenhanced-resolveto pnpm catalog and usecatalog:in both packages#1646
644d6b8Thanks @ijjk! - Stop eager input-graph directive discovery in deferred Next.js builds and rely on loader/socket-driven discovery withonBeforeDeferredEntries.Updated dependencies [
d040182,66d49c0,dc0c0dc,e436242,ec517fa,a5c90ce,ea97bd6,0a86de3,32a17b4,71d39d2,873b4e2,66585fd,0a86de3,89d242f,66d49c0,ebb0a4a,9513a81]:@workflow/rollup@5.0.0-beta.1
Major Changes
89d242fThanks @TooTallNate! - BREAKING CHANGE: RemoveisWorkflowSdkFilepath-based serde exclusion. Serde discovery now uses AST-level verification via SWC detect mode across all integration paths (esbuild plugin, Next.js deferred builder, Next.js loader). This allows class definitions with serde symbols in SDK packages like@workflow/coreto be discovered and bundled correctly.Patch Changes
d040182,dc0c0dc,e436242,0a86de3,32a17b4,66585fd,89d242f,ebb0a4a]:@workflow/swc-plugin@5.0.0-beta.1
Major Changes
0a86de3Thanks @TooTallNate! - BREAKING CHANGE: Inline all step registrations as self-contained IIFEs instead of generatingimport { registerStepFunction } from "workflow/internal/private". Closure variable access is also inlined. This eliminates the dependency on theworkflowpackage being available innode_modules, enabling 3rd-party packages to define step functions. Registrations are now placed immediately after each function definition instead of being batched at the bottom of the file.Minor Changes
d040182Thanks @TooTallNate! - Allow synchronous functions to use"use step"directive. This enables using"use step"as a mechanism to strip Node.js-dependent code from the workflow VM bundle without requiring the function to be async.Patch Changes
#1671
66585fdThanks @TooTallNate! - Eliminate unreferenced private class members in workflow mode after"use step"stripping#1664
ebb0a4aThanks @TooTallNate! - Restore export validation for file-level"use step"files: only function exports (sync or async) are allowed; non-function exports (constants, classes, re-exports) emit an error@workflow/web@5.0.0-beta.1
Major Changes
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas the first parameter.writeToStream(name, runId, chunk)→streams.write(runId, name, chunk),writeToStreamMulti→streams.writeMulti,closeStream→streams.close,readFromStream→streams.get(runId, name, startIndex?),listStreamsByRunId→streams.list(runId).#1293
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.workflow@5.0.0-beta.1
Major Changes
0a86de3Thanks @TooTallNate! - BREAKING CHANGE: Remove@workflow/core/privateandworkflow/internal/privatepublic subpath exports. The SWC compiler plugin no longer generates imports from these paths.Minor Changes
71d39d2Thanks @TooTallNate! - Use custom class serialization forRunacross runtime and workflow VM contexts, and add e2e coverage forRuninstance boundary roundtripsPatch Changes
#1653
c6b630fThanks @TooTallNate! - Fixworkflow/nextESM compatibility fornext.config.mjsfilesUpdated dependencies [
d040182,66d49c0,e436242,ec517fa,a5c90ce,ea97bd6,32a17b4,71d39d2,873b4e2,0a86de3,89d242f,644d6b8,66d49c0,9513a81]:@workflow/world@5.0.0-beta.1
Major Changes
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas the first parameter.writeToStream(name, runId, chunk)→streams.write(runId, name, chunk),writeToStreamMulti→streams.writeMulti,closeStream→streams.close,readFromStream→streams.get(runId, name, startIndex?),listStreamsByRunId→streams.list(runId).#1293
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.Patch Changes
a5c90ceThanks @VaguelySerious! - Fix community world E2E tests by addingspecVersionto the World interface sostart()uses the safe baseline (v2) for worlds that don't declare their supported version@workflow/world-local@5.0.0-beta.1
Major Changes
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas the first parameter.writeToStream(name, runId, chunk)→streams.write(runId, name, chunk),writeToStreamMulti→streams.writeMulti,closeStream→streams.close,readFromStream→streams.get(runId, name, startIndex?),listStreamsByRunId→streams.list(runId).#1293
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.Patch Changes
#1658
a5c90ceThanks @VaguelySerious! - Fix community world E2E tests by addingspecVersionto the World interface sostart()uses the safe baseline (v2) for worlds that don't declare their supported versionUpdated dependencies [
66d49c0,a5c90ce,66d49c0]:@workflow/world-postgres@5.0.0-beta.1
Major Changes
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas the first parameter.writeToStream(name, runId, chunk)→streams.write(runId, name, chunk),writeToStreamMulti→streams.writeMulti,closeStream→streams.close,readFromStream→streams.get(runId, name, startIndex?),listStreamsByRunId→streams.list(runId).#1293
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.Patch Changes
#1658
a5c90ceThanks @VaguelySerious! - Fix community world E2E tests by addingspecVersionto the World interface sostart()uses the safe baseline (v2) for worlds that don't declare their supported versionUpdated dependencies [
66d49c0,a5c90ce,66d49c0]:@workflow/world-vercel@5.0.0-beta.1
Major Changes
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas the first parameter.writeToStream(name, runId, chunk)→streams.write(runId, name, chunk),writeToStreamMulti→streams.writeMulti,closeStream→streams.close,readFromStream→streams.get(runId, name, startIndex?),listStreamsByRunId→streams.list(runId).#1293
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.Patch Changes
#1658
a5c90ceThanks @VaguelySerious! - Fix community world E2E tests by addingspecVersionto the World interface sostart()uses the safe baseline (v2) for worlds that don't declare their supported version#1676
68cf25eThanks @TooTallNate! - Fixstreams.get()to includerunIdin the request URL instead of always omitting it.Updated dependencies [
66d49c0,a5c90ce,66d49c0]:@workflow/typescript-plugin@5.0.0-beta.1
Minor Changes
d040182Thanks @TooTallNate! - Allow synchronous functions to use"use step"directive. This enables using"use step"as a mechanism to strip Node.js-dependent code from the workflow VM bundle without requiring the function to be async.@workflow/ai@5.0.0-beta.1
Patch Changes
#1663
4d31619Thanks @gr2m! - fix(ai): preserve provider tool identity across step boundariesProvider tools (e.g.
anthropic.tools.webSearch) were being converted to plain function tools intoolsToModelTools, strippingtype: 'provider',id, andargs. This caused providers like Anthropic Gateway to not recognize them as provider-executed tools.Updated dependencies [
c6b630f,71d39d2,0a86de3]:@workflow/astro@5.0.0-beta.1
Patch Changes
d040182,dc0c0dc,e436242,0a86de3,32a17b4,66585fd,89d242f,ebb0a4a]:@workflow/nest@5.0.0-beta.1
Patch Changes
d040182,dc0c0dc,e436242,0a86de3,32a17b4,66585fd,89d242f,ebb0a4a]:@workflow/nitro@5.0.0-beta.1
Patch Changes
d040182,66d49c0,dc0c0dc,e436242,ec517fa,a5c90ce,ea97bd6,0a86de3,32a17b4,71d39d2,873b4e2,66585fd,0a86de3,89d242f,66d49c0,ebb0a4a,9513a81]:@workflow/nuxt@5.0.0-beta.1
Patch Changes
@workflow/sveltekit@5.0.0-beta.1
Patch Changes
d040182,dc0c0dc,e436242,0a86de3,32a17b4,66585fd,89d242f,ebb0a4a]:@workflow/vite@5.0.0-beta.1
Patch Changes
dc0c0dc,e436242,32a17b4,89d242f]:@workflow/vitest@5.0.0-beta.1
Patch Changes
66d49c0,dc0c0dc,e436242,ec517fa,a5c90ce,ea97bd6,32a17b4,71d39d2,873b4e2,0a86de3,89d242f,66d49c0,9513a81]:@workflow/web-shared@5.0.0-beta.1
Patch Changes
#1685
38a642bThanks @karthikscale3! - Fix event data loading for step_created eventsUpdated dependencies [
66d49c0,ec517fa,a5c90ce,ea97bd6,71d39d2,873b4e2,0a86de3,66d49c0,9513a81]:@workflow/world-testing@5.0.0-beta.1
Patch Changes
66d49c0,e436242,ec517fa,a5c90ce,ea97bd6,c6b630f,71d39d2,873b4e2,0a86de3,66d49c0,9513a81]: