Skip to content

Version Packages (beta)#1615

Open
workflow-devkit-release-bot[bot] wants to merge 1 commit intomainfrom
changeset-release/main
Open

Version Packages (beta)#1615
workflow-devkit-release-bot[bot] wants to merge 1 commit intomainfrom
changeset-release/main

Conversation

@workflow-devkit-release-bot
Copy link
Copy Markdown
Contributor

@workflow-devkit-release-bot workflow-devkit-release-bot bot commented Apr 6, 2026

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.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/ai@4.1.0-beta.61

Patch Changes

  • #1444 e9ebe8f Thanks @gr2m! - Preserve reasoning content in DurableAgent conversation history across tool loop steps

  • Updated dependencies []:

    • workflow@4.2.0-beta.78

@workflow/astro@4.0.0-beta.52

Patch Changes

  • Updated dependencies [f5d2aef, 3308701]:
    • @workflow/builders@4.0.1-beta.69
    • @workflow/rollup@4.0.0-beta.35
    • @workflow/vite@4.0.0-beta.28

@workflow/builders@4.0.1-beta.69

Patch Changes

  • #1552 f5d2aef Thanks @TooTallNate! - Add serde compliance checker (analyzeSerdeCompliance) and build-time warnings for classes with Node.js imports in workflow bundle

  • #1613 3308701 Thanks @matchai! - Resolve path aliases when externalizing non-step imports

  • Updated dependencies [7e70d18, ba916e1, c8dce52, ab872cc]:

    • @workflow/core@4.2.0-beta.78
    • @workflow/errors@4.1.0-beta.20

@workflow/cli@4.2.0-beta.78

Patch Changes

  • #1552 f5d2aef Thanks @TooTallNate! - Add workflow transform command for inspecting SWC transform output with optional serde compliance analysis

  • #1552 f5d2aef Thanks @TooTallNate! - Implement serde compliance checks in workflow validate

  • #1414 2680a42 Thanks @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.

  • Updated dependencies [f5d2aef, 7e70d18, ba916e1, 3308701, c8dce52, ab872cc, 5b9eb40]:

    • @workflow/builders@4.0.1-beta.69
    • @workflow/world@4.1.0-beta.17
    • @workflow/core@4.2.0-beta.78
    • @workflow/world-local@4.1.0-beta.51
    • @workflow/world-vercel@4.1.0-beta.49
    • @workflow/errors@4.1.0-beta.20
    • @workflow/web@4.1.0-beta.47

@workflow/core@4.2.0-beta.78

Patch Changes

  • #1533 7e70d18 Thanks @VaguelySerious! - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.

  • #1512 ba916e1 Thanks @TooTallNate! - Add DOMException to the workflow VM context and add first-class serialization support, preserving message, name, and derived code across serialization boundaries

  • #1537 c8dce52 Thanks @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 Thanks @VaguelySerious! - Make registeredSteps a global singleton to protect against module duplication and caching issues

  • Updated dependencies [7e70d18, c8dce52, 5b9eb40]:

    • @workflow/world@4.1.0-beta.17
    • @workflow/world-local@4.1.0-beta.51
    • @workflow/world-vercel@4.1.0-beta.49
    • @workflow/errors@4.1.0-beta.20

@workflow/nest@0.0.0-beta.27

Patch Changes

  • Updated dependencies [f5d2aef, 3308701]:
    • @workflow/builders@4.0.1-beta.69

@workflow/next@4.0.1-beta.74

Patch Changes

@workflow/nitro@4.0.1-beta.73

Patch Changes

@workflow/nuxt@4.0.1-beta.62

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.73

@workflow/rollup@4.0.0-beta.35

Patch Changes

  • Updated dependencies [f5d2aef, 3308701]:
    • @workflow/builders@4.0.1-beta.69

@workflow/sveltekit@4.0.0-beta.67

Patch Changes

  • Updated dependencies [f5d2aef, 3308701]:
    • @workflow/builders@4.0.1-beta.69
    • @workflow/rollup@4.0.0-beta.35
    • @workflow/vite@4.0.0-beta.28

@workflow/vite@4.0.0-beta.28

Patch Changes

  • Updated dependencies [f5d2aef, 3308701]:
    • @workflow/builders@4.0.1-beta.69

@workflow/vitest@4.0.1-beta.15

Patch Changes

  • Updated dependencies [f5d2aef, 7e70d18, ba916e1, 3308701, c8dce52, ab872cc]:
    • @workflow/builders@4.0.1-beta.69
    • @workflow/world@4.1.0-beta.17
    • @workflow/core@4.2.0-beta.78
    • @workflow/world-local@4.1.0-beta.51
    • @workflow/rollup@4.0.0-beta.35

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

Patch Changes

  • #1414 2680a42 Thanks @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.

  • Updated dependencies [7e70d18, ba916e1, c8dce52, ab872cc]:

    • @workflow/world@4.1.0-beta.17
    • @workflow/core@4.2.0-beta.78

workflow@4.2.0-beta.78

Patch Changes

  • Updated dependencies [f5d2aef, f5d2aef, 7e70d18, ba916e1, c8dce52, 2680a42, ab872cc]:
    • @workflow/cli@4.2.0-beta.78
    • @workflow/core@4.2.0-beta.78
    • @workflow/astro@4.0.0-beta.52
    • @workflow/nest@0.0.0-beta.27
    • @workflow/next@4.0.1-beta.74
    • @workflow/nitro@4.0.1-beta.73
    • @workflow/rollup@4.0.0-beta.35
    • @workflow/sveltekit@4.0.0-beta.67
    • @workflow/errors@4.1.0-beta.20
    • @workflow/typescript-plugin@4.0.1-beta.5
    • @workflow/nuxt@4.0.1-beta.62

@workflow/world@4.1.0-beta.17

Patch Changes

  • #1533 7e70d18 Thanks @VaguelySerious! - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.

  • #1537 c8dce52 Thanks @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

Patch Changes

  • #1533 7e70d18 Thanks @VaguelySerious! - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.

  • #1537 c8dce52 Thanks @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.

  • Updated dependencies [7e70d18, c8dce52]:

    • @workflow/world@4.1.0-beta.17
    • @workflow/errors@4.1.0-beta.20

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

Patch Changes

  • #1533 7e70d18 Thanks @VaguelySerious! - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.

  • #1537 c8dce52 Thanks @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.

  • Updated dependencies [7e70d18, c8dce52]:

    • @workflow/world@4.1.0-beta.17
    • @workflow/world-local@4.1.0-beta.51
    • @workflow/errors@4.1.0-beta.20

@workflow/world-testing@4.1.0-beta.79

Patch Changes

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

Patch Changes

  • #1537 c8dce52 Thanks @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 Thanks @VaguelySerious! - Paginate writeToStreamMulti to stay within the server's 1000 chunks per batch limit

  • Updated dependencies [7e70d18, c8dce52]:

    • @workflow/world@4.1.0-beta.17
    • @workflow/errors@4.1.0-beta.20

@workflow-devkit-release-bot workflow-devkit-release-bot bot requested a review from a team as a code owner April 6, 2026 16:43
@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Apr 6, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Apr 7, 2026 0:04am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Apr 7, 2026 0:04am
example-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-astro-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-express-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-fastify-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-hono-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-nitro-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-nuxt-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-sveltekit-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workbench-vite-workflow Ready Ready Preview, Comment Apr 7, 2026 0:04am
workflow-docs Ready Ready Preview, Comment, Open in v0 Apr 7, 2026 0:04am
workflow-swc-playground Ready Ready Preview, Comment Apr 7, 2026 0:04am

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 879 0 67 946
✅ 💻 Local Development 854 0 178 1032
✅ 📦 Local Production 854 0 178 1032
✅ 🐘 Local Postgres 854 0 178 1032
✅ 🪟 Windows 78 0 8 86
❌ 🌍 Community Worlds 134 64 24 222
✅ 📋 Other 216 0 42 258
Total 3869 64 675 4608

❌ Failed Tests

🌍 Community Worlds (64 failed)

mongodb (4 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNJM2ZZTK9VEZCCS9Y60D5Q2
  • webhookWorkflow | wrun_01KNJM38P9B0D37C3RA0X03JX6
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNJMB3PZCXV6CBV0JHHETFQN
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNJMHK1QRJ5HBGMWTTH5B7E7

redis (3 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNJM2ZZTK9VEZCCS9Y60D5Q2
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNJMB3PZCXV6CBV0JHHETFQN
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNJMHK1QRJ5HBGMWTTH5B7E7

turso (57 failed):

  • addTenWorkflow | wrun_01KNJM1PN58ENNKMPE0Z82HWTJ
  • addTenWorkflow | wrun_01KNJM1PN58ENNKMPE0Z82HWTJ
  • wellKnownAgentWorkflow (.well-known/agent) | wrun_01KNJM3E3SS7TPJG5YP2HCA9WX
  • should work with react rendering in step
  • promiseAllWorkflow | wrun_01KNJM1XE7BM53K5XG34DGPAZ1
  • promiseRaceWorkflow | wrun_01KNJM2331NQ0DXQDW6ME94RWA
  • promiseAnyWorkflow | wrun_01KNJM26G8YSBW77N9QCG93G9R
  • importedStepOnlyWorkflow | wrun_01KNJM3V1CXGCHBE8C724XXDZ5
  • hookWorkflow | wrun_01KNJM2JRZ4WK3JPZZ9BGWBETG
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNJM2ZZTK9VEZCCS9Y60D5Q2
  • webhookWorkflow | wrun_01KNJM38P9B0D37C3RA0X03JX6
  • sleepingWorkflow | wrun_01KNJM3F1AE9GX061Y3CJVF3H5
  • parallelSleepWorkflow | wrun_01KNJM3V01MTEM3RH7Q98GYK43
  • nullByteWorkflow | wrun_01KNJM3YJB0K32RWY7YVRNVJ92
  • workflowAndStepMetadataWorkflow | wrun_01KNJM40RFVB9KQPWNKRRXZY6F
  • fetchWorkflow | wrun_01KNJM6RGSCX4T1JNV5DE0WGPQ
  • promiseRaceStressTestWorkflow | wrun_01KNJM6VWZSY6WFYXWWK5JNEAE
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • error handling not registered WorkflowNotRegisteredError fails the run when workflow does not exist
  • error handling not registered StepNotRegisteredError fails the step but workflow can catch it
  • error handling not registered StepNotRegisteredError fails the run when not caught in workflow
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KNJMAF033YBAYM3PAAS3PV35
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNJMB3PZCXV6CBV0JHHETFQN
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KNJMBS377Q89K5CF4FWAD0M8
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KNJMCCXMQC8QTJF454ZFA6Q9
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KNJMCNST681251VJD5CG6RHW
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KNJMCV8XBKCHPM6TTG5436E4
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KNJMCXCWPXGME63KBP8YZQQS
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KNJMDFC963Y94D0Y30T7MF2N
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KNJMDN18T6E5093APM52410Y
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KNJMDVTG9TK39B7S3W7EZTP8
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KNJME2BCHYAME4MTAMZ5JK3S
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KNJME8G16PRECY5PSJT2YWVV
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KNJMEFWCN99NQF80HSG45KX1
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KNJMEPHQZ6SJXAC5PZ2AC0WZ
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KNJMF1YWRKSVQ4E2ES6PA1KK
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KNJMFB097VHXDZJ1FQNCTFG7
  • cancelRun - cancelling a running workflow | wrun_01KNJMFJVEP8Q7QK5ZSQS7Y3XZ
  • cancelRun via CLI - cancelling a running workflow | wrun_01KNJMFW5XKRN4YQVTX48SM6GH
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KNJMG87EMJ9BVEHH4Y2BVKXH
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KNJMGXQVXNVA3PC4AYVNDS8G
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KNJMH7YBPT8B2A4NS39WXZVF
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KNJMHEJM4F2H5YWC99J4YABB
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KNJMHGQ00Q947ASE7KHHWF8G
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNJMHK1QRJ5HBGMWTTH5B7E7

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 79 0 7
✅ example 79 0 7
✅ express 79 0 7
✅ fastify 79 0 7
✅ hono 79 0 7
✅ nextjs-turbopack 84 0 2
✅ nextjs-webpack 84 0 2
✅ nitro 79 0 7
✅ nuxt 79 0 7
✅ sveltekit 79 0 7
✅ vite 79 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 72 0 14
✅ express-stable 72 0 14
✅ fastify-stable 72 0 14
✅ hono-stable 72 0 14
✅ nextjs-turbopack-canary 61 0 25
✅ nextjs-turbopack-stable 78 0 8
✅ nextjs-webpack-canary 61 0 25
✅ nextjs-webpack-stable 78 0 8
✅ nitro-stable 72 0 14
✅ nuxt-stable 72 0 14
✅ sveltekit-stable 72 0 14
✅ vite-stable 72 0 14
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 72 0 14
✅ express-stable 72 0 14
✅ fastify-stable 72 0 14
✅ hono-stable 72 0 14
✅ nextjs-turbopack-canary 61 0 25
✅ nextjs-turbopack-stable 78 0 8
✅ nextjs-webpack-canary 61 0 25
✅ nextjs-webpack-stable 78 0 8
✅ nitro-stable 72 0 14
✅ nuxt-stable 72 0 14
✅ sveltekit-stable 72 0 14
✅ vite-stable 72 0 14
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 72 0 14
✅ express-stable 72 0 14
✅ fastify-stable 72 0 14
✅ hono-stable 72 0 14
✅ nextjs-turbopack-canary 61 0 25
✅ nextjs-turbopack-stable 78 0 8
✅ nextjs-webpack-canary 61 0 25
✅ nextjs-webpack-stable 78 0 8
✅ nitro-stable 72 0 14
✅ nuxt-stable 72 0 14
✅ sveltekit-stable 72 0 14
✅ vite-stable 72 0 14
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 78 0 8
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 5 0 0
❌ mongodb 57 4 8
✅ redis-dev 5 0 0
❌ redis 58 3 8
✅ turso-dev 5 0 0
❌ turso 4 57 8
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 72 0 14
✅ e2e-local-postgres-nest-stable 72 0 14
✅ e2e-local-prod-nest-stable 72 0 14

📋 View full workflow run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.043s (~) 1.005s (~) 0.963s 10 1.00x
💻 Local Express 0.046s (+6.5% 🔺) 1.010s (~) 0.964s 10 1.07x
💻 Local Next.js (Turbopack) 0.047s 1.006s 0.959s 10 1.10x
🌐 Redis Next.js (Turbopack) 0.052s 1.005s 0.952s 10 1.23x
🐘 Postgres Next.js (Turbopack) 0.060s 1.010s 0.950s 10 1.41x
🐘 Postgres Nitro 0.062s (+5.6% 🔺) 1.010s (~) 0.948s 10 1.46x
🐘 Postgres Express 0.067s (+10.9% 🔺) 1.011s (~) 0.944s 10 1.58x
🌐 MongoDB Next.js (Turbopack) 0.074s 1.007s 0.933s 10 1.74x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 0.203s (-58.7% 🟢) 1.883s (-27.0% 🟢) 1.680s 10 1.00x
▲ Vercel Express 0.206s (-1.9%) 1.943s (-13.5% 🟢) 1.738s 10 1.01x
▲ Vercel Nitro 0.288s (+21.1% 🔺) 2.143s (-6.1% 🟢) 1.856s 10 1.42x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 1.123s 2.005s 0.883s 10 1.00x
🌐 Redis Next.js (Turbopack) 1.123s 2.006s 0.883s 10 1.00x
💻 Local Express 1.127s (~) 2.006s (~) 0.879s 10 1.00x
💻 Local Nitro 1.127s (~) 2.006s (~) 0.879s 10 1.00x
🐘 Postgres Next.js (Turbopack) 1.136s 2.011s 0.874s 10 1.01x
🐘 Postgres Express 1.139s (-1.1%) 2.010s (~) 0.872s 10 1.01x
🐘 Postgres Nitro 1.146s (+0.7%) 2.011s (~) 0.864s 10 1.02x
🌐 MongoDB Next.js (Turbopack) 1.302s 2.008s 0.706s 10 1.16x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.849s (~) 3.138s (-16.0% 🟢) 1.289s 10 1.00x
▲ Vercel Express 1.961s (+4.0%) 3.666s (-0.7%) 1.704s 10 1.06x
▲ Vercel Nitro 1.965s (-28.5% 🟢) 3.395s (-26.3% 🟢) 1.431s 10 1.06x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 10.753s 11.023s 0.270s 3 1.00x
💻 Local Next.js (Turbopack) 10.765s 11.024s 0.259s 3 1.00x
🐘 Postgres Next.js (Turbopack) 10.826s 11.020s 0.194s 3 1.01x
🐘 Postgres Express 10.893s (~) 11.020s (~) 0.128s 3 1.01x
🐘 Postgres Nitro 10.909s (~) 11.025s (~) 0.116s 3 1.01x
💻 Local Nitro 10.923s (~) 11.022s (~) 0.100s 3 1.02x
💻 Local Express 10.941s (~) 11.024s (~) 0.083s 3 1.02x
🌐 MongoDB Next.js (Turbopack) 12.246s 13.023s 0.777s 3 1.14x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 16.252s (-23.4% 🟢) 18.260s (-21.5% 🟢) 2.008s 2 1.00x
▲ Vercel Express 17.031s (-2.2%) 18.846s (-4.1%) 1.815s 2 1.05x
▲ Vercel Nitro 17.300s (-4.8%) 18.563s (-6.3% 🟢) 1.263s 2 1.06x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 14.249s 15.028s 0.779s 4 1.00x
🐘 Postgres Next.js (Turbopack) 14.417s 15.030s 0.613s 4 1.01x
🐘 Postgres Express 14.532s (~) 15.023s (~) 0.491s 4 1.02x
🐘 Postgres Nitro 14.535s (~) 15.018s (~) 0.484s 4 1.02x
💻 Local Next.js (Turbopack) 14.674s 15.030s 0.356s 4 1.03x
💻 Local Nitro 14.955s (~) 15.029s (~) 0.074s 4 1.05x
💻 Local Express 15.016s (~) 15.783s (+5.0% 🔺) 0.767s 4 1.05x
🌐 MongoDB Next.js (Turbopack) 17.785s 18.023s 0.238s 4 1.25x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 31.713s (+2.0%) 33.085s (+0.5%) 1.371s 2 1.00x
▲ Vercel Express 34.203s (+6.5% 🔺) 36.263s (+5.9% 🔺) 2.059s 2 1.08x
▲ Vercel Next.js (Turbopack) 34.899s (+4.2%) 36.330s (+2.1%) 1.431s 2 1.10x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 13.609s 14.026s 0.417s 7 1.00x
🐘 Postgres Next.js (Turbopack) 13.780s 14.021s 0.241s 7 1.01x
🐘 Postgres Nitro 13.994s (~) 14.308s (+1.0%) 0.314s 7 1.03x
🐘 Postgres Express 14.003s (-1.3%) 14.451s (-2.9%) 0.448s 7 1.03x
💻 Local Next.js (Turbopack) 16.156s 17.032s 0.876s 6 1.19x
💻 Local Nitro 16.624s (~) 17.031s (~) 0.407s 6 1.22x
💻 Local Express 16.644s (-0.9%) 17.031s (~) 0.387s 6 1.22x
🌐 MongoDB Next.js (Turbopack) 20.397s 21.028s 0.631s 5 1.50x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 52.830s (-2.1%) 54.458s (-2.3%) 1.628s 2 1.00x
▲ Vercel Next.js (Turbopack) 54.222s (-2.3%) 55.632s (-3.0%) 1.410s 2 1.03x
▲ Vercel Express 56.306s (+4.0%) 58.443s (+4.7%) 2.137s 2 1.07x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.221s 2.009s 0.788s 15 1.00x
🐘 Postgres Express 1.262s (-1.9%) 2.010s (~) 0.749s 15 1.03x
🐘 Postgres Nitro 1.276s (+1.4%) 2.010s (~) 0.735s 15 1.04x
🌐 Redis Next.js (Turbopack) 1.315s 2.006s 0.691s 15 1.08x
💻 Local Next.js (Turbopack) 1.502s 2.006s 0.504s 15 1.23x
💻 Local Nitro 1.531s (-1.5%) 2.006s (~) 0.475s 15 1.25x
💻 Local Express 1.535s (~) 2.006s (~) 0.471s 15 1.26x
🌐 MongoDB Next.js (Turbopack) 2.420s 3.108s 0.688s 10 1.98x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.164s (-6.6% 🟢) 3.814s (-3.6%) 1.650s 8 1.00x
▲ Vercel Next.js (Turbopack) 2.307s (-18.2% 🟢) 3.638s (-19.0% 🟢) 1.331s 9 1.07x
▲ Vercel Nitro 2.362s (-7.6% 🟢) 3.912s (-6.9% 🟢) 1.549s 8 1.09x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.325s (~) 3.010s (~) 0.685s 10 1.00x
🐘 Postgres Express 2.339s (~) 3.010s (~) 0.670s 10 1.01x
🐘 Postgres Next.js (Turbopack) 2.430s 3.009s 0.579s 10 1.05x
🌐 Redis Next.js (Turbopack) 2.522s 3.008s 0.486s 10 1.08x
💻 Local Next.js (Turbopack) 2.853s 3.309s 0.456s 10 1.23x
💻 Local Express 2.894s (-7.5% 🟢) 3.008s (-22.6% 🟢) 0.114s 10 1.24x
💻 Local Nitro 3.079s (-1.5%) 4.010s (+3.2%) 0.931s 8 1.32x
🌐 MongoDB Next.js (Turbopack) 9.601s 9.766s 0.165s 4 4.13x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.480s (-5.1% 🟢) 4.005s (-5.4% 🟢) 1.525s 8 1.00x
▲ Vercel Express 2.704s (+16.8% 🔺) 4.421s (+15.8% 🔺) 1.717s 7 1.09x
▲ Vercel Next.js (Turbopack) 3.154s (-4.5%) 4.728s (-12.6% 🟢) 1.574s 7 1.27x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 3.445s (-1.2%) 4.009s (~) 0.564s 8 1.00x
🐘 Postgres Express 3.471s (-0.5%) 4.013s (~) 0.542s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.675s 4.012s 0.337s 8 1.07x
🌐 Redis Next.js (Turbopack) 4.113s 4.867s 0.754s 7 1.19x
💻 Local Next.js (Turbopack) 7.934s 8.272s 0.338s 4 2.30x
💻 Local Nitro 8.214s (+0.7%) 9.024s (+2.9%) 0.810s 4 2.38x
💻 Local Express 8.422s (+1.0%) 9.023s (~) 0.601s 4 2.44x
🌐 MongoDB Next.js (Turbopack) 19.734s 20.528s 0.794s 2 5.73x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.939s (-22.1% 🟢) 4.774s (-17.3% 🟢) 1.836s 7 1.00x
▲ Vercel Nitro 2.966s (-11.0% 🟢) 4.642s (-7.4% 🟢) 1.675s 7 1.01x
▲ Vercel Next.js (Turbopack) 3.748s (-16.3% 🟢) 5.094s (-17.0% 🟢) 1.346s 6 1.28x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.220s 2.008s 0.788s 15 1.00x
🐘 Postgres Express 1.258s (~) 2.009s (~) 0.751s 15 1.03x
🐘 Postgres Nitro 1.265s (+1.8%) 2.008s (~) 0.743s 15 1.04x
🌐 Redis Next.js (Turbopack) 1.357s 2.006s 0.649s 15 1.11x
💻 Local Next.js (Turbopack) 1.505s 2.006s 0.501s 15 1.23x
💻 Local Nitro 1.536s (~) 2.006s (~) 0.470s 15 1.26x
💻 Local Express 1.596s (+3.9%) 2.006s (~) 0.410s 15 1.31x
🌐 MongoDB Next.js (Turbopack) 3.358s 3.757s 0.399s 8 2.75x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.089s (-1.2%) 3.330s (-18.0% 🟢) 1.240s 10 1.00x
▲ Vercel Nitro 2.159s (-9.6% 🟢) 3.561s (-11.1% 🟢) 1.403s 9 1.03x
▲ Vercel Express 2.344s (-19.6% 🟢) 4.247s (-10.8% 🟢) 1.903s 8 1.12x

🔍 Observability: Next.js (Turbopack) | Nitro | Express

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.324s (~) 3.010s (~) 0.685s 10 1.00x
🐘 Postgres Express 2.355s (~) 3.011s (~) 0.655s 10 1.01x
🐘 Postgres Next.js (Turbopack) 2.367s 3.009s 0.641s 10 1.02x
🌐 Redis Next.js (Turbopack) 2.564s 3.008s 0.444s 10 1.10x
💻 Local Next.js (Turbopack) 2.898s 3.453s 0.555s 9 1.25x
💻 Local Express 3.057s (+3.2%) 3.886s (+3.3%) 0.829s 8 1.32x
💻 Local Nitro 3.064s (+3.1%) 3.676s (~) 0.612s 9 1.32x
🌐 MongoDB Next.js (Turbopack) 9.468s 10.014s 0.546s 3 4.07x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.365s (-9.9% 🟢) 3.880s (-5.0% 🟢) 1.515s 8 1.00x
▲ Vercel Express 2.590s (-1.4%) 4.093s (-6.4% 🟢) 1.503s 8 1.09x
▲ Vercel Next.js (Turbopack) 2.981s (+11.0% 🔺) 4.326s (-2.0%) 1.345s 8 1.26x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.454s (-1.2%) 4.009s (~) 0.555s 8 1.00x
🐘 Postgres Nitro 3.485s (~) 4.012s (~) 0.528s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.667s 4.010s 0.344s 8 1.06x
🌐 Redis Next.js (Turbopack) 4.125s 5.011s 0.886s 6 1.19x
💻 Local Next.js (Turbopack) 8.245s 8.770s 0.525s 4 2.39x
💻 Local Nitro 8.908s (+0.9%) 9.522s (~) 0.614s 4 2.58x
💻 Local Express 9.286s (+8.3% 🔺) 10.025s (+11.1% 🔺) 0.739s 3 2.69x
🌐 MongoDB Next.js (Turbopack) 19.979s 20.524s 0.545s 2 5.78x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.322s (+20.6% 🔺) 4.859s (+5.6% 🔺) 1.538s 7 1.00x
▲ Vercel Express 3.600s (+24.4% 🔺) 5.451s (+13.2% 🔺) 1.851s 6 1.08x
▲ Vercel Next.js (Turbopack) 4.041s (-21.1% 🟢) 5.367s (-20.7% 🟢) 1.327s 6 1.22x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 0.735s 1.021s 0.286s 59 1.00x
🐘 Postgres Next.js (Turbopack) 0.759s 1.006s 0.247s 60 1.03x
🐘 Postgres Express 0.826s (-4.2%) 1.022s (~) 0.197s 59 1.12x
💻 Local Next.js (Turbopack) 0.856s 1.021s 0.166s 59 1.16x
🐘 Postgres Nitro 0.857s (+2.6%) 1.058s (+5.1% 🔺) 0.202s 57 1.17x
💻 Local Nitro 0.978s (+0.6%) 1.155s (+7.4% 🔺) 0.178s 53 1.33x
💻 Local Express 1.007s (+3.3%) 1.434s (+33.3% 🔺) 0.427s 42 1.37x
🌐 MongoDB Next.js (Turbopack) 2.133s 3.008s 0.875s 20 2.90x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 8.639s (-1.7%) 10.055s (-6.6% 🟢) 1.415s 6 1.00x
▲ Vercel Next.js (Turbopack) 9.737s (+3.2%) 11.125s (-2.9%) 1.389s 6 1.13x
▲ Vercel Express 10.153s (+17.2% 🔺) 11.977s (+14.9% 🔺) 1.823s 6 1.18x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.664s 2.006s 0.341s 45 1.00x
🐘 Postgres Next.js (Turbopack) 1.831s 2.029s 0.198s 45 1.10x
🐘 Postgres Express 1.943s (-7.3% 🟢) 2.075s (-28.7% 🟢) 0.132s 44 1.17x
🐘 Postgres Nitro 1.992s (+1.3%) 2.258s (~) 0.265s 40 1.20x
💻 Local Next.js (Turbopack) 2.711s 3.008s 0.297s 30 1.63x
💻 Local Nitro 2.993s (-6.9% 🟢) 3.416s (-9.1% 🟢) 0.422s 27 1.80x
💻 Local Express 3.020s (~) 3.609s (+1.8%) 0.589s 25 1.81x
🌐 MongoDB Next.js (Turbopack) 5.234s 6.011s 0.777s 15 3.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 27.757s (+4.3%) 29.068s (+2.1%) 1.312s 4 1.00x
▲ Vercel Express 27.900s (+2.8%) 29.994s (+1.5%) 2.094s 4 1.01x
▲ Vercel Next.js (Turbopack) 30.749s (+8.0% 🔺) 31.883s (+4.1%) 1.134s 3 1.11x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 3.323s 4.008s 0.684s 30 1.00x
🐘 Postgres Next.js (Turbopack) 3.753s 4.042s 0.289s 30 1.13x
🐘 Postgres Express 3.970s (-5.8% 🟢) 4.296s (-13.6% 🟢) 0.326s 28 1.19x
🐘 Postgres Nitro 4.037s (+0.9%) 4.703s (+8.6% 🔺) 0.666s 26 1.21x
💻 Local Next.js (Turbopack) 8.696s 9.017s 0.321s 14 2.62x
💻 Local Express 9.184s (+1.1%) 9.941s (+4.0%) 0.757s 13 2.76x
💻 Local Nitro 9.244s (+2.3%) 10.019s (+4.8%) 0.775s 12 2.78x
🌐 MongoDB Next.js (Turbopack) 10.562s 11.017s 0.455s 11 3.18x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 73.531s (-7.9% 🟢) 74.895s (-8.2% 🟢) 1.363s 2 1.00x
▲ Vercel Express 74.422s (+1.4%) 76.627s (+0.7%) 2.205s 2 1.01x
▲ Vercel Next.js (Turbopack) 79.080s (+6.9% 🔺) 80.336s (+5.9% 🔺) 1.256s 2 1.08x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.254s 1.007s 0.753s 60 1.00x
🐘 Postgres Nitro 0.282s (+1.4%) 1.007s (~) 0.725s 60 1.11x
🐘 Postgres Express 0.282s (-1.9%) 1.007s (~) 0.725s 60 1.11x
🌐 Redis Next.js (Turbopack) 0.300s 1.004s 0.704s 60 1.18x
💻 Local Next.js (Turbopack) 0.560s 1.004s 0.445s 60 2.20x
💻 Local Nitro 0.601s (-2.3%) 1.022s (~) 0.421s 59 2.37x
💻 Local Express 0.607s (+6.1% 🔺) 1.005s (~) 0.397s 60 2.39x
🌐 MongoDB Next.js (Turbopack) 3.354s 3.883s 0.529s 16 13.21x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.417s (-21.7% 🟢) 2.601s (-21.1% 🟢) 1.184s 24 1.00x
▲ Vercel Express 1.456s (+5.7% 🔺) 2.971s (+8.6% 🔺) 1.516s 21 1.03x
▲ Vercel Next.js (Turbopack) 1.617s (+13.6% 🔺) 3.014s (+5.8% 🔺) 1.397s 21 1.14x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.477s 1.007s 0.529s 90 1.00x
🐘 Postgres Express 0.478s (-2.7%) 1.006s (~) 0.528s 90 1.00x
🐘 Postgres Nitro 0.485s (-1.3%) 1.006s (~) 0.521s 90 1.02x
🌐 Redis Next.js (Turbopack) 1.156s 2.005s 0.849s 45 2.42x
💻 Local Express 2.561s (+1.6%) 3.009s (~) 0.448s 30 5.37x
💻 Local Nitro 2.585s (+2.4%) 3.009s (-1.1%) 0.424s 30 5.42x
💻 Local Next.js (Turbopack) 2.611s 3.009s 0.398s 30 5.47x
🌐 MongoDB Next.js (Turbopack) 9.405s 9.913s 0.508s 10 19.71x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.402s (+26.9% 🔺) 5.091s (+12.2% 🔺) 1.689s 19 1.00x
▲ Vercel Express 3.458s (+40.0% 🔺) 5.150s (+23.0% 🔺) 1.692s 18 1.02x
▲ Vercel Next.js (Turbopack) 3.648s (+22.7% 🔺) 5.217s (+12.4% 🔺) 1.570s 18 1.07x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.751s 1.006s 0.255s 120 1.00x
🐘 Postgres Nitro 0.772s (-0.6%) 1.007s (~) 0.235s 120 1.03x
🐘 Postgres Express 0.778s (-3.5%) 1.007s (~) 0.229s 120 1.04x
🌐 Redis Next.js (Turbopack) 2.602s 3.007s 0.405s 40 3.46x
💻 Local Next.js (Turbopack) 10.971s 11.572s 0.601s 11 14.60x
💻 Local Express 11.228s (-0.6%) 11.846s (~) 0.619s 11 14.94x
💻 Local Nitro 11.295s (+2.9%) 12.030s (+3.1%) 0.735s 10 15.03x
🌐 MongoDB Next.js (Turbopack) 19.869s 20.355s 0.486s 6 26.44x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 6.935s (+17.4% 🔺) 9.015s (+20.1% 🔺) 2.080s 15 1.00x
▲ Vercel Nitro 7.717s (+17.3% 🔺) 9.244s (+13.1% 🔺) 1.527s 13 1.11x
▲ Vercel Next.js (Turbopack) 14.644s (+129.4% 🔺) 15.943s (+98.7% 🔺) 1.298s 14 2.11x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 0.172s 1.003s 0.012s 1.018s 0.846s 10 1.00x
🌐 Redis Next.js (Turbopack) 0.178s 1.001s 0.001s 1.007s 0.829s 10 1.04x
🐘 Postgres Next.js (Turbopack) 0.189s 1.000s 0.002s 1.009s 0.820s 10 1.10x
💻 Local Nitro 0.201s (-5.2% 🟢) 1.004s (~) 0.012s (+3.4%) 1.018s (~) 0.818s 10 1.17x
💻 Local Express 0.205s (-2.4%) 1.004s (~) 0.012s (+2.6%) 1.018s (~) 0.813s 10 1.19x
🐘 Postgres Nitro 0.206s (+1.7%) 0.997s (~) 0.001s (+7.7% 🔺) 1.009s (~) 0.803s 10 1.20x
🐘 Postgres Express 0.212s (-2.4%) 0.996s (~) 0.002s (+15.4% 🔺) 1.010s (~) 0.798s 10 1.23x
🌐 MongoDB Next.js (Turbopack) 0.504s 0.952s 0.002s 1.009s 0.504s 10 2.93x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.425s (-13.3% 🟢) 2.575s (-11.2% 🟢) 0.599s (-8.3% 🟢) 3.537s (-12.6% 🟢) 2.112s 10 1.00x
▲ Vercel Express 1.690s (+3.3%) 3.114s (+7.5% 🔺) 0.529s (-5.7% 🟢) 4.064s (+4.5%) 2.374s 10 1.19x
▲ Vercel Nitro 1.903s (+15.3% 🔺) 3.099s (~) 0.520s (+22.6% 🔺) 3.965s (~) 2.062s 10 1.34x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 0.493s 1.001s 0.002s 1.010s 0.516s 60 1.00x
🐘 Postgres Next.js (Turbopack) 0.598s 1.009s 0.004s 1.021s 0.424s 59 1.21x
🐘 Postgres Nitro 0.606s (-2.2%) 1.004s (~) 0.004s (+47.2% 🔺) 1.021s (~) 0.416s 59 1.23x
🐘 Postgres Express 0.628s (+3.7%) 1.002s (~) 0.004s (+9.7% 🔺) 1.022s (~) 0.393s 59 1.27x
💻 Local Next.js (Turbopack) 0.664s 1.011s 0.009s 1.023s 0.360s 59 1.35x
💻 Local Nitro 0.809s (+13.3% 🔺) 1.012s (~) 0.010s (+13.5% 🔺) 1.113s (+8.9% 🔺) 0.304s 56 1.64x
💻 Local Express 0.843s (-10.4% 🟢) 1.013s (~) 0.008s (-2.7%) 1.116s (-9.1% 🟢) 0.272s 54 1.71x
🌐 MongoDB Next.js (Turbopack) 1.326s 1.954s 0.003s 2.012s 0.686s 30 2.69x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.329s (+10.9% 🔺) 5.665s (+2.9%) 0.228s (-29.3% 🟢) 6.461s (+2.9%) 2.132s 10 1.00x
▲ Vercel Nitro 4.855s (+20.5% 🔺) 5.970s (+10.7% 🔺) 0.228s (-38.3% 🟢) 6.705s (+9.0% 🔺) 1.850s 9 1.12x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 0.891s 1.017s 0.000s 1.021s 0.131s 59 1.00x
🐘 Postgres Next.js (Turbopack) 0.897s 1.072s 0.000s 1.079s 0.181s 56 1.01x
🐘 Postgres Nitro 0.935s (-1.6%) 1.103s (-7.7% 🟢) 0.000s (-9.1% 🟢) 1.117s (-7.6% 🟢) 0.182s 55 1.05x
🐘 Postgres Express 0.974s (+2.2%) 1.191s (+1.8%) 0.000s (~) 1.204s (+1.6%) 0.230s 51 1.09x
💻 Local Nitro 1.233s (-0.9%) 2.022s (~) 0.000s (+28.6% 🔺) 2.024s (~) 0.791s 30 1.38x
💻 Local Express 1.271s (-11.3% 🟢) 2.022s (~) 0.000s (-6.7% 🟢) 2.024s (-8.0% 🟢) 0.753s 30 1.43x
💻 Local Next.js (Turbopack) 1.288s 2.021s 0.000s 2.024s 0.735s 30 1.45x
🌐 MongoDB Next.js (Turbopack) 2.367s 2.951s 0.000s 3.007s 0.640s 20 2.66x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.821s (+14.6% 🔺) 4.121s (+13.5% 🔺) 0.000s (NaN%) 4.650s (+13.7% 🔺) 1.829s 13 1.00x
▲ Vercel Next.js (Turbopack) 2.984s (-6.9% 🟢) 4.379s (-6.1% 🟢) 0.000s (+84.6% 🔺) 4.876s (-4.5%) 1.892s 13 1.06x
▲ Vercel Nitro 3.869s (+50.0% 🔺) 4.894s (+30.6% 🔺) 0.002s (+Infinity% 🔺) 5.403s (+29.5% 🔺) 1.534s 12 1.37x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.567s 2.035s 0.000s 2.039s 0.472s 30 1.00x
🐘 Postgres Nitro 1.738s (-1.9%) 2.176s (+3.6%) 0.000s (+Infinity% 🔺) 2.187s (+2.1%) 0.449s 28 1.11x
🐘 Postgres Next.js (Turbopack) 1.768s 2.146s 0.000s 2.153s 0.385s 28 1.13x
🐘 Postgres Express 1.800s (+1.8%) 2.176s (+4.9%) 0.000s (-48.2% 🟢) 2.188s (+3.8%) 0.388s 28 1.15x
💻 Local Nitro 3.383s (-14.4% 🟢) 4.099s (-1.9%) 0.001s (-6.7% 🟢) 4.102s (-9.6% 🟢) 0.720s 15 2.16x
💻 Local Express 3.674s (+2.1%) 4.167s (+1.7%) 0.000s (+16.7% 🔺) 4.170s (+1.7%) 0.495s 15 2.34x
💻 Local Next.js (Turbopack) 3.792s 4.390s 0.001s 4.394s 0.601s 14 2.42x
🌐 MongoDB Next.js (Turbopack) 4.393s 4.957s 0.000s 5.009s 0.616s 12 2.80x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.310s (-31.3% 🟢) 4.939s (-23.1% 🟢) 0.000s (-18.2% 🟢) 5.512s (-19.4% 🟢) 2.202s 11 1.00x
▲ Vercel Next.js (Turbopack) 4.132s (+2.1%) 5.356s (-6.3% 🟢) 0.000s (-98.5% 🟢) 5.839s (-5.0% 🟢) 1.707s 11 1.25x
▲ Vercel Nitro 4.276s (+17.5% 🔺) 5.540s (+15.3% 🔺) 0.000s (-100.0% 🟢) 6.027s (+14.6% 🔺) 1.751s 10 1.29x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Next.js (Turbopack) 17/21
🐘 Postgres Next.js (Turbopack) 16/21
▲ Vercel Nitro 10/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 17/21
Next.js (Turbopack) 🌐 Redis 9/21
Nitro 🐘 Postgres 16/21
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run

Copy link
Copy Markdown
Contributor

@vercel vercel bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Suggestion:

Resilient start path creates run and run_created event as two separate queries without a database transaction, risking orphaned runs if the event insert fails.

Fix on Vercel

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants