Skip to content

fix: settle aborted parallel steps before completing abortParallelWorkflow#2244

Draft
pranaygp wants to merge 1 commit into
mainfrom
pranaygp/fix-abort-parallel-timeout
Draft

fix: settle aborted parallel steps before completing abortParallelWorkflow#2244
pranaygp wants to merge 1 commit into
mainfrom
pranaygp/fix-abort-parallel-timeout

Conversation

@pranaygp
Copy link
Copy Markdown
Contributor

@pranaygp pranaygp commented Jun 4, 2026

Summary

  • keep the parallel longStep() promises alive as a named promise so the workflow can await them after aborting
  • wait for those in-flight steps to observe the abort before returning timed out
  • target the AbortController > abortParallelWorkflow: abort cancels all parallel steps CI timeout seen in Tests run 26914721179

Validation

  • pnpm install
  • pnpm -r --filter workflow... build
  • WORKFLOW_PUBLIC_MANIFEST=1 pnpm dev in workbench/nextjs-turbopack
  • DEPLOYMENT_URL="http://localhost:3000" APP_NAME="nextjs-turbopack" pnpm vitest run packages/core/e2e/e2e.test.ts -t "abortParallelWorkflow: abort cancels all parallel steps"

Notes

  • The focused local E2E did not reach the assertion because the local Next dev app failed earlier with Workflow "workflow//./workflows/99_e2e//abortParallelWorkflow" is not registered in the current deployment and a concurrent Module not found: Can't resolve <dynamic> warning from packages/core/dist/runtime/world.js.
  • That local manifest/bundling issue appears unrelated to this workflow logic change, so CI is the best verification for the actual timeout fix.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Jun 4, 2026

⚠️ No Changeset found

Latest commit: 8ea3699

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Jun 4, 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 Jun 4, 2026 6:37am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jun 4, 2026 6:37am
example-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-astro-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-express-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-fastify-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-hono-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-nitro-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-nuxt-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-sveltekit-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workbench-vite-workflow Ready Ready Preview, Comment Jun 4, 2026 6:37am
workflow-swc-playground Ready Ready Preview, Comment Jun 4, 2026 6:37am
workflow-tarballs Ready Ready Preview, Comment Jun 4, 2026 6:37am
workflow-web Ready Ready Preview, Comment Jun 4, 2026 6:37am

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 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 🥇 Express 0.041s (-1.0%) 1.006s (~) 0.965s 10 1.00x
💻 Local Nitro 0.044s (+0.9%) 1.006s (~) 0.962s 10 1.08x
🐘 Postgres Express 0.057s (-12.2% 🟢) 1.012s (~) 0.954s 10 1.42x
🐘 Postgres Nitro 0.059s (-34.2% 🟢) 1.019s (-1.2%) 0.959s 10 1.46x
💻 Local Next.js (Turbopack) 0.062s (-2.5%) 1.007s (~) 0.945s 10 1.53x
🐘 Postgres Next.js (Turbopack) 0.071s (+1.6%) 1.024s (+1.1%) 0.953s 10 1.75x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.306s (-99.0% 🟢) 2.228s (-93.2% 🟢) 1.922s 10 1.00x
▲ Vercel Next.js (Turbopack) 0.332s (-28.9% 🟢) 1.959s (-8.5% 🟢) 1.627s 10 1.09x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.092s (~) 2.006s (~) 0.914s 10 1.00x
💻 Local Nitro 1.102s (+0.7%) 2.006s (~) 0.904s 10 1.01x
🐘 Postgres Express 1.102s (~) 2.010s (~) 0.908s 10 1.01x
🐘 Postgres Nitro 1.117s (-2.2%) 2.008s (-1.3%) 0.891s 10 1.02x
💻 Local Next.js (Turbopack) 1.141s (~) 2.006s (~) 0.865s 10 1.04x
🐘 Postgres Next.js (Turbopack) 1.192s (+4.5%) 2.024s (+0.8%) 0.832s 10 1.09x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.559s (-0.8%) 3.286s (-13.8% 🟢) 1.727s 10 1.00x
▲ Vercel Next.js (Turbopack) 1.636s (-6.7% 🟢) 3.203s (-1.6%) 1.567s 10 1.05x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 10.501s (~) 11.023s (~) 0.522s 3 1.00x
🐘 Postgres Express 10.544s (~) 11.020s (~) 0.476s 3 1.00x
💻 Local Nitro 10.547s (~) 11.022s (~) 0.475s 3 1.00x
🐘 Postgres Nitro 10.588s (-1.0%) 11.022s (~) 0.434s 3 1.01x
💻 Local Next.js (Turbopack) 10.781s (~) 11.023s (~) 0.242s 3 1.03x
🐘 Postgres Next.js (Turbopack) 10.813s (~) 11.020s (~) 0.207s 3 1.03x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 13.491s (+2.2%) 15.260s (+3.2%) 1.769s 2 1.00x
▲ Vercel Next.js (Turbopack) 13.895s (+0.8%) 15.409s (+1.4%) 1.514s 2 1.03x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 13.715s (~) 14.029s (~) 0.314s 5 1.00x
🐘 Postgres Express 13.783s (-1.1%) 14.017s (~) 0.233s 5 1.00x
💻 Local Nitro 13.817s (~) 14.025s (~) 0.208s 5 1.01x
🐘 Postgres Nitro 14.270s (-2.7%) 14.624s (-2.7%) 0.353s 5 1.04x
💻 Local Next.js (Turbopack) 14.394s (~) 15.030s (~) 0.636s 4 1.05x
🐘 Postgres Next.js (Turbopack) 14.670s (+2.0%) 15.271s (+1.7%) 0.601s 4 1.07x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 20.568s (-11.2% 🟢) 22.227s (-11.6% 🟢) 1.659s 3 1.00x
▲ Vercel Next.js (Turbopack) 22.625s (+3.9%) 24.155s (+2.2%) 1.530s 3 1.10x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 12.343s (~) 13.026s (~) 0.683s 7 1.00x
🐘 Postgres Nitro 12.484s (-1.6%) 13.020s (-2.1%) 0.536s 7 1.01x
🐘 Postgres Express 12.519s (~) 13.016s (~) 0.497s 7 1.01x
💻 Local Nitro 12.524s (+1.0%) 13.024s (~) 0.500s 7 1.01x
🐘 Postgres Next.js (Turbopack) 13.482s (-1.2%) 14.025s (~) 0.543s 7 1.09x
💻 Local Next.js (Turbopack) 13.698s (+0.6%) 14.028s (~) 0.331s 7 1.11x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 29.020s (-14.3% 🟢) 31.277s (-13.4% 🟢) 2.257s 4 1.00x
▲ Vercel Next.js (Turbopack) 29.779s (+1.3%) 31.735s (+2.9%) 1.956s 3 1.03x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.169s (-2.1%) 2.007s (~) 0.838s 15 1.00x
💻 Local Express 1.205s (-2.6%) 2.006s (~) 0.801s 15 1.03x
💻 Local Nitro 1.220s (~) 2.006s (~) 0.786s 15 1.04x
🐘 Postgres Nitro 1.250s (-0.7%) 2.009s (~) 0.759s 15 1.07x
🐘 Postgres Next.js (Turbopack) 1.327s (+7.7% 🔺) 2.021s (+0.7%) 0.695s 15 1.14x
💻 Local Next.js (Turbopack) 1.343s (+1.4%) 2.005s (~) 0.663s 15 1.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.534s (-33.2% 🟢) 4.044s (-21.2% 🟢) 1.510s 8 1.00x
▲ Vercel Next.js (Turbopack) 3.136s (+21.4% 🔺) 4.601s (+12.4% 🔺) 1.465s 8 1.24x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.230s (-2.4%) 2.007s (~) 0.777s 15 1.00x
🐘 Postgres Nitro 1.269s (-6.6% 🟢) 2.023s (~) 0.754s 15 1.03x
🐘 Postgres Next.js (Turbopack) 1.373s (-0.8%) 2.006s (~) 0.633s 15 1.12x
💻 Local Nitro 1.665s (-5.2% 🟢) 2.006s (~) 0.341s 15 1.35x
💻 Local Express 1.732s (+1.6%) 2.005s (~) 0.273s 15 1.41x
💻 Local Next.js (Turbopack) 1.829s (-4.0%) 2.140s (-7.5% 🟢) 0.311s 15 1.49x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.673s (-16.3% 🟢) 5.072s (-10.6% 🟢) 1.399s 6 1.00x
▲ Vercel Nitro 3.999s (-5.5% 🟢) 5.586s (-7.5% 🟢) 1.587s 6 1.09x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Nitro

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.323s (-5.6% 🟢) 2.007s (~) 0.685s 15 1.00x
🐘 Postgres Nitro 1.518s (+3.2%) 2.154s (-7.1% 🟢) 0.636s 14 1.15x
🐘 Postgres Next.js (Turbopack) 1.827s (+7.6% 🔺) 2.525s (+17.8% 🔺) 0.698s 12 1.38x
💻 Local Nitro 4.645s (-2.1%) 5.011s (-3.3%) 0.367s 7 3.51x
💻 Local Next.js (Turbopack) 4.663s (-15.3% 🟢) 5.181s (-16.6% 🟢) 0.518s 6 3.53x
💻 Local Express 4.915s (+2.0%) 5.512s (+3.1%) 0.597s 6 3.72x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.882s (-64.5% 🟢) 6.057s (-60.7% 🟢) 1.174s 5 1.00x
▲ Vercel Next.js (Turbopack) 6.543s (-5.7% 🟢) 8.287s (-4.8%) 1.744s 4 1.34x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.175s (-1.0%) 2.008s (~) 0.832s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.244s (-0.8%) 2.012s (~) 0.768s 15 1.06x
🐘 Postgres Nitro 1.351s (+3.0%) 2.084s (~) 0.733s 15 1.15x
💻 Local Next.js (Turbopack) 1.403s (+1.6%) 2.006s (~) 0.603s 15 1.19x
💻 Local Express 1.507s (-0.8%) 2.006s (~) 0.500s 15 1.28x
💻 Local Nitro 1.590s (-3.7%) 2.006s (-3.2%) 0.416s 15 1.35x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.692s (-6.5% 🟢) 4.348s (+1.4%) 1.656s 7 1.00x
▲ Vercel Next.js (Turbopack) 2.946s (-26.1% 🟢) 4.373s (-20.7% 🟢) 1.427s 7 1.09x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.217s (-3.1%) 2.007s (~) 0.790s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.416s (-2.4%) 2.008s (-3.2%) 0.592s 15 1.16x
🐘 Postgres Nitro 1.425s (+14.1% 🔺) 2.084s (+3.6%) 0.659s 15 1.17x
💻 Local Nitro 1.915s (-9.3% 🟢) 2.317s (-15.3% 🟢) 0.402s 13 1.57x
💻 Local Express 1.997s (+5.3% 🔺) 2.470s (+6.7% 🔺) 0.473s 13 1.64x
💻 Local Next.js (Turbopack) 2.014s (-3.4%) 2.736s (-3.2%) 0.722s 11 1.66x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.534s (-23.8% 🟢) 4.560s (-29.1% 🟢) 1.026s 7 1.00x
▲ Vercel Nitro 3.790s (+1.6%) 5.455s (+1.9%) 1.664s 6 1.07x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Nitro

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.325s (-5.0% 🟢) 2.007s (~) 0.682s 15 1.00x
🐘 Postgres Nitro 1.541s (+6.0% 🔺) 2.151s (+3.5%) 0.610s 14 1.16x
🐘 Postgres Next.js (Turbopack) 1.799s (+4.5%) 2.408s (+8.4% 🔺) 0.609s 13 1.36x
💻 Local Next.js (Turbopack) 4.942s (-14.7% 🟢) 5.514s (-11.3% 🟢) 0.571s 6 3.73x
💻 Local Nitro 4.957s (-16.2% 🟢) 5.514s (-14.0% 🟢) 0.558s 6 3.74x
💻 Local Express 5.247s (-0.9%) 5.683s (-2.8%) 0.435s 6 3.96x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.720s (-26.7% 🟢) 6.377s (-20.6% 🟢) 1.657s 5 1.00x
▲ Vercel Next.js (Turbopack) 5.342s (-27.0% 🟢) 6.865s (-30.2% 🟢) 1.523s 5 1.13x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.583s (+2.3%) 1.041s (+3.4%) 0.458s 58 1.00x
💻 Local Express 0.593s (-1.0%) 1.005s (~) 0.411s 60 1.02x
💻 Local Nitro 0.608s (+2.9%) 1.005s (~) 0.396s 60 1.04x
🐘 Postgres Nitro 0.622s (+24.2% 🔺) 1.013s (~) 0.392s 60 1.07x
🐘 Postgres Next.js (Turbopack) 0.697s (-17.0% 🟢) 1.045s (-1.4%) 0.348s 58 1.19x
💻 Local Next.js (Turbopack) 0.875s (~) 1.022s (-1.7%) 0.146s 59 1.50x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.915s (-4.9%) 6.246s (-11.7% 🟢) 1.331s 10 1.00x
▲ Vercel Next.js (Turbopack) 5.399s (-4.9%) 6.861s (-6.7% 🟢) 1.462s 9 1.10x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.304s (-3.9%) 2.007s (~) 0.703s 45 1.00x
🐘 Postgres Nitro 1.319s (-8.5% 🟢) 2.010s (~) 0.692s 45 1.01x
💻 Local Express 1.505s (-1.5%) 2.006s (-1.1%) 0.501s 45 1.15x
🐘 Postgres Next.js (Turbopack) 1.582s (-17.3% 🟢) 2.009s (-4.4%) 0.427s 45 1.21x
💻 Local Nitro 1.677s (+11.8% 🔺) 2.122s (+4.6%) 0.445s 43 1.29x
💻 Local Next.js (Turbopack) 2.127s (+1.2%) 3.007s (~) 0.880s 30 1.63x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 11.988s (-13.7% 🟢) 13.863s (-10.8% 🟢) 1.875s 7 1.00x
▲ Vercel Next.js (Turbopack) 12.126s (-28.8% 🟢) 13.906s (-24.4% 🟢) 1.780s 7 1.01x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.703s (-2.3%) 3.058s (-2.5%) 0.355s 40 1.00x
🐘 Postgres Nitro 3.047s (+15.5% 🔺) 3.575s (+7.6% 🔺) 0.528s 34 1.13x
💻 Local Express 3.270s (+1.2%) 3.977s (~) 0.707s 31 1.21x
💻 Local Nitro 3.285s (+4.2%) 4.042s (+2.5%) 0.757s 30 1.22x
🐘 Postgres Next.js (Turbopack) 3.864s (+1.0%) 4.454s (+8.4% 🔺) 0.591s 28 1.43x
💻 Local Next.js (Turbopack) 4.370s (-1.5%) 5.010s (~) 0.640s 24 1.62x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 24.259s (-14.3% 🟢) 26.575s (-12.7% 🟢) 2.316s 5 1.00x
▲ Vercel Next.js (Turbopack) 27.297s (-8.2% 🟢) 28.803s (-8.8% 🟢) 1.507s 5 1.13x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.200s (-9.8% 🟢) 1.008s (~) 0.808s 60 1.00x
🐘 Postgres Express 0.204s (-10.3% 🟢) 1.006s (~) 0.801s 60 1.02x
🐘 Postgres Next.js (Turbopack) 0.351s (+33.4% 🔺) 1.017s (+1.2%) 0.666s 59 1.76x
💻 Local Express 0.439s (+4.3%) 1.004s (~) 0.566s 60 2.19x
💻 Local Nitro 0.459s (+1.8%) 1.004s (~) 0.545s 60 2.30x
💻 Local Next.js (Turbopack) 0.605s (-5.6% 🟢) 1.005s (-5.1% 🟢) 0.399s 60 3.03x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.327s (-1.0%) 3.840s (-2.5%) 1.513s 16 1.00x
▲ Vercel Next.js (Turbopack) 2.592s (-20.1% 🟢) 4.009s (-14.6% 🟢) 1.417s 15 1.11x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.307s (-14.8% 🟢) 1.006s (~) 0.699s 90 1.00x
🐘 Postgres Nitro 0.344s (-12.6% 🟢) 1.012s (-0.8%) 0.668s 89 1.12x
🐘 Postgres Next.js (Turbopack) 0.459s (-3.6%) 1.022s (+1.6%) 0.564s 89 1.49x
💻 Local Express 2.132s (+1.2%) 2.796s (+5.3% 🔺) 0.664s 33 6.94x
💻 Local Nitro 2.149s (+4.0%) 2.685s (+1.8%) 0.536s 34 6.99x
💻 Local Next.js (Turbopack) 2.269s (-10.9% 🟢) 2.979s (-9.6% 🟢) 0.709s 31 7.38x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 4.892s (-28.6% 🟢) 6.291s (-25.5% 🟢) 1.398s 15 1.00x
▲ Vercel Nitro 4.960s (-17.7% 🟢) 6.393s (-16.3% 🟢) 1.433s 15 1.01x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Nitro

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.594s (-13.9% 🟢) 1.006s (~) 0.412s 120 1.00x
🐘 Postgres Nitro 0.757s (+21.7% 🔺) 1.191s (+11.0% 🔺) 0.434s 101 1.27x
🐘 Postgres Next.js (Turbopack) 0.888s (-8.4% 🟢) 1.266s (-19.1% 🟢) 0.378s 95 1.49x
💻 Local Nitro 9.339s (-1.0%) 10.025s (~) 0.685s 13 15.72x
💻 Local Express 10.018s (+5.7% 🔺) 10.528s (+5.0% 🔺) 0.510s 12 16.86x
💻 Local Next.js (Turbopack) 10.444s (-4.6%) 11.212s (-4.6%) 0.768s 11 17.58x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 13.886s (-19.4% 🟢) 15.338s (-17.7% 🟢) 1.453s 8 1.00x
▲ Vercel Nitro 14.399s (-29.1% 🟢) 16.281s (-26.6% 🟢) 1.882s 8 1.04x
▲ Vercel Express ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Nitro

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.155s (-0.8%) 2.005s (~) 0.011s (-4.3%) 2.018s (~) 0.864s 10 1.00x
🐘 Postgres Express 1.156s (-1.2%) 2.001s (~) 0.001s (-33.3% 🟢) 2.009s (~) 0.853s 10 1.00x
💻 Local Express 1.161s (~) 2.005s (~) 0.010s (-1.9%) 2.017s (~) 0.856s 10 1.01x
🐘 Postgres Nitro 1.211s (+4.5%) 1.992s (~) 0.001s (+50.0% 🔺) 2.027s (+0.7%) 0.816s 10 1.05x
💻 Local Next.js (Turbopack) 1.224s (+1.3%) 2.003s (~) 0.011s (-10.8% 🟢) 2.018s (~) 0.794s 10 1.06x
🐘 Postgres Next.js (Turbopack) 1.257s (+2.0%) 2.001s (~) 0.001s (-30.8% 🟢) 2.008s (~) 0.751s 10 1.09x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.422s (+12.1% 🔺) 3.397s (+13.6% 🔺) 1.819s (+51.8% 🔺) 5.615s (+21.1% 🔺) 3.192s 10 1.00x
▲ Vercel Nitro 2.438s (+9.0% 🔺) 3.433s (+9.8% 🔺) 1.722s (+83.4% 🔺) 5.561s (+21.5% 🔺) 3.124s 10 1.01x
▲ Vercel Express ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack) | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.583s (~) 2.005s (~) 0.003s (-12.0% 🟢) 2.022s (~) 0.438s 30 1.00x
💻 Local Nitro 1.588s (+0.7%) 2.009s (~) 0.012s (+15.6% 🔺) 2.023s (~) 0.435s 30 1.00x
💻 Local Express 1.588s (+1.6%) 2.009s (~) 0.011s (+1.9%) 2.022s (~) 0.434s 30 1.00x
🐘 Postgres Nitro 1.716s (+3.8%) 2.074s (~) 0.003s (-1.8%) 2.103s (+0.8%) 0.388s 29 1.08x
💻 Local Next.js (Turbopack) 1.732s (-3.4%) 2.009s (~) 0.011s (-13.1% 🟢) 2.023s (~) 0.291s 30 1.09x
🐘 Postgres Next.js (Turbopack) 1.898s (+10.7% 🔺) 2.350s (+16.9% 🔺) 0.003s (-24.1% 🟢) 2.371s (+17.2% 🔺) 0.473s 26 1.20x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.779s (-4.1%) 7.028s (-0.7%) 0.300s (-36.1% 🟢) 7.717s (-4.0%) 1.938s 8 1.00x
▲ Vercel Next.js (Turbopack) 5.793s (-5.7% 🟢) 6.769s (-9.0% 🟢) 0.241s (+18.8% 🔺) 7.404s (-7.9% 🟢) 1.611s 9 1.00x
▲ Vercel Express ⚠️ missing - - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.674s (-5.4% 🟢) 1.032s (~) 0.000s (-50.8% 🟢) 1.047s (~) 0.373s 59 1.00x
🐘 Postgres Next.js (Turbopack) 0.996s (+29.3% 🔺) 1.440s (+39.1% 🔺) 0.000s (-29.3% 🟢) 1.482s (+41.1% 🔺) 0.485s 41 1.48x
🐘 Postgres Nitro 1.075s (+12.4% 🔺) 1.395s (+9.8% 🔺) 0.000s (-42.9% 🟢) 1.463s (+11.8% 🔺) 0.389s 42 1.59x
💻 Local Express 1.504s (+8.0% 🔺) 2.015s (~) 0.000s (-38.5% 🟢) 2.017s (~) 0.513s 30 2.23x
💻 Local Next.js (Turbopack) 1.517s (+2.0%) 2.014s (~) 0.001s (+200.0% 🔺) 2.017s (~) 0.500s 30 2.25x
💻 Local Nitro 1.585s (+14.4% 🔺) 2.012s (~) 0.000s (-51.0% 🟢) 2.187s (+8.5% 🔺) 0.602s 29 2.35x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.636s (-2.8%) 4.866s (-3.2%) 0.000s (-91.7% 🟢) 5.358s (-2.9%) 1.721s 12 1.00x
▲ Vercel Next.js (Turbopack) 3.820s (-9.2% 🟢) 4.964s (-1.4%) 0.000s (+Infinity% 🔺) 5.323s (-2.7%) 1.503s 12 1.05x
▲ Vercel Express ⚠️ missing - - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

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

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.251s (-12.6% 🟢) 2.034s (-4.7%) 0.000s (-51.7% 🟢) 2.063s (-4.5%) 0.812s 30 1.00x
🐘 Postgres Nitro 1.954s (+1.4%) 2.545s (+8.7% 🔺) 0.000s (-45.8% 🟢) 2.568s (+8.5% 🔺) 0.614s 24 1.56x
🐘 Postgres Next.js (Turbopack) 2.092s (+23.2% 🔺) 2.611s (+17.8% 🔺) 0.000s (-100.0% 🟢) 2.646s (+18.0% 🔺) 0.554s 23 1.67x
💻 Local Next.js (Turbopack) 3.148s (+6.2% 🔺) 3.731s (+3.2%) 0.000s (-54.5% 🟢) 3.737s (+3.3%) 0.589s 17 2.52x
💻 Local Express 3.452s (+12.4% 🔺) 4.030s (+5.0%) 0.000s (-37.8% 🟢) 4.032s (+4.9%) 0.580s 15 2.76x
💻 Local Nitro 3.477s (+17.1% 🔺) 3.824s (+5.9% 🔺) 0.001s (+126.7% 🔺) 4.164s (+15.1% 🔺) 0.687s 15 2.78x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 6.510s (-5.1% 🟢) 7.689s (-5.8% 🟢) 0.000s (-100.0% 🟢) 8.170s (-5.8% 🟢) 1.660s 8 1.00x
▲ Vercel Next.js (Turbopack) 7.085s (+7.1% 🔺) 8.313s (+6.9% 🔺) 0.000s (-100.0% 🟢) 8.717s (+6.3% 🔺) 1.632s 7 1.09x
▲ Vercel Express ⚠️ missing - - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Express 12/21
🐘 Postgres Express 19/21
▲ Vercel Nitro 16/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 16/21
Next.js (Turbopack) 🐘 Postgres 15/21
Nitro 🐘 Postgres 13/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)
  • 🌐 Redis: Community world (local development)
  • 🌐 Redis + BullMQ: Community world (local development)
  • 🌐 Cloudflare: Community world (local development)
  • 🌐 MySQL: Community world (local development)
  • 🌐 Azure: Community world (local development)
  • 🌐 NATS JetStream: Community world (local development)
  • 🌐 Upstash: Community world (local development)

📋 View full workflow run


Some benchmark jobs failed:

  • Local: success
  • Postgres: success
  • Vercel: failure

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

🧪 E2E Test Results

All tests passed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 1266 0 219 1485
✅ 💻 Local Development 1671 0 219 1890
✅ 📦 Local Production 1671 0 219 1890
✅ 🐘 Local Postgres 1671 0 219 1890
✅ 🪟 Windows 135 0 0 135
✅ 📋 Other 769 0 176 945
Total 7183 0 1052 8235

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 109 0 26
✅ example 109 0 26
✅ express 109 0 26
✅ fastify 109 0 26
✅ hono 109 0 26
✅ nextjs-turbopack 133 0 2
✅ nextjs-webpack 133 0 2
✅ nitro 109 0 26
✅ nuxt 109 0 26
✅ sveltekit 128 0 7
✅ vite 109 0 26
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 110 0 25
✅ express-stable 110 0 25
✅ fastify-stable 110 0 25
✅ hono-stable 110 0 25
✅ nextjs-turbopack-canary 116 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 135 0 0
✅ nextjs-webpack-canary 116 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 135 0 0
✅ nitro-stable 110 0 25
✅ nuxt-stable 110 0 25
✅ sveltekit-stable 129 0 6
✅ vite-stable 110 0 25
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 110 0 25
✅ express-stable 110 0 25
✅ fastify-stable 110 0 25
✅ hono-stable 110 0 25
✅ nextjs-turbopack-canary 116 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 135 0 0
✅ nextjs-webpack-canary 116 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 135 0 0
✅ nitro-stable 110 0 25
✅ nuxt-stable 110 0 25
✅ sveltekit-stable 129 0 6
✅ vite-stable 110 0 25
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 110 0 25
✅ express-stable 110 0 25
✅ fastify-stable 110 0 25
✅ hono-stable 110 0 25
✅ nextjs-turbopack-canary 116 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 135 0 0
✅ nextjs-webpack-canary 116 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 135 0 0
✅ nitro-stable 110 0 25
✅ nuxt-stable 110 0 25
✅ sveltekit-stable 129 0 6
✅ vite-stable 110 0 25
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 135 0 0
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 110 0 25
✅ e2e-local-dev-tanstack-start- 110 0 25
✅ e2e-local-postgres-nest-stable 110 0 25
✅ e2e-local-postgres-tanstack-start- 110 0 25
✅ e2e-local-prod-nest-stable 110 0 25
✅ e2e-local-prod-tanstack-start- 110 0 25
✅ e2e-vercel-prod-tanstack-start 109 0 26

📋 View full workflow run

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.

1 participant