Skip to content

[codex] Fix detached ArrayBuffer proxy DX#1985

Open
pranaygp wants to merge 3 commits into
mainfrom
codex/fix-detached-arraybuffer-proxy-dx
Open

[codex] Fix detached ArrayBuffer proxy DX#1985
pranaygp wants to merge 3 commits into
mainfrom
codex/fix-detached-arraybuffer-proxy-dx

Conversation

@pranaygp
Copy link
Copy Markdown
Contributor

Summary

  • improve @workflow/world-local queue logging for the Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer failure mode
  • point developers at the concrete Next.js proxy.ts / middleware.ts matcher fix when /.well-known/workflow/* is being intercepted
  • make the Next.js getting-started docs easier to discover for both v4 and v5 users
  • add a changeset for the local-world package

Root cause

When a Next.js proxy or middleware reads the request body for Workflow's internal POST /.well-known/workflow/v1/flow request, the underlying ArrayBuffer can be detached before the executor reads it. The local queue then surfaces an undici-style fetch failed error with a detached-ArrayBuffer cause, which is technically correct but not actionable enough on its own.

What changed

  • detect the detached-ArrayBuffer error chain in packages/world-local/src/queue.ts
  • replace the raw async queue failure log with an actionable hint and docs link for this specific case
  • add a queue regression test for the rejected-fetch path
  • update the Next.js docs copy in docs/content/docs/v4/getting-started/next.mdx and docs/content/docs/v5/getting-started/next.mdx

Closes #1982

Validation

  • git diff --check
  • package tests could not be run in this worktree because pnpm, npm, corepack, and node_modules are unavailable here

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 14, 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 May 14, 2026 6:28pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment May 14, 2026 6:28pm
example-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-astro-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-express-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-fastify-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-hono-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-nitro-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-nuxt-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-sveltekit-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-tanstack-start-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workbench-vite-workflow Ready Ready Preview, Comment May 14, 2026 6:28pm
workflow-docs Ready Ready Preview, Comment, Open in v0 May 14, 2026 6:28pm
workflow-swc-playground Ready Ready Preview, Comment May 14, 2026 6:28pm
workflow-tarballs Ready Ready Preview, Comment May 14, 2026 6:28pm
workflow-web Ready Ready Preview, Comment May 14, 2026 6:28pm

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 14, 2026

🦋 Changeset detected

Latest commit: 23b8b4e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 20 packages
Name Type
@workflow/world-local Patch
@workflow/cli Patch
@workflow/core Patch
@workflow/vitest Patch
@workflow/world-postgres Patch
tarballs Patch
workflow Patch
@workflow/world-testing Patch
@workflow/builders Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/web-shared Patch
@workflow/web Patch
@workflow/ai Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite Patch
@workflow/nuxt Patch

Not sure what this means? Click here to learn what changesets are.

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 14, 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.025s (-43.6% 🟢) 1.004s (~) 0.979s 10 1.00x
💻 Local Nitro 0.036s (-17.4% 🟢) 1.005s (~) 0.970s 10 1.42x
🐘 Postgres Nitro 0.048s (-49.4% 🟢) 1.012s (-2.9%) 0.964s 10 1.93x
🐘 Postgres Next.js (Turbopack) 0.058s 1.011s 0.954s 10 2.30x
🐘 Postgres Express 0.067s (+16.2% 🔺) 1.035s (+2.5%) 0.968s 10 2.70x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.554s (+135.4% 🔺) 2.532s (+18.5% 🔺) 1.977s 10 1.00x
▲ Vercel Next.js (Turbopack) 0.804s (+219.6% 🔺) 2.964s (+27.0% 🔺) 2.160s 10 1.45x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.058s (-6.0% 🟢) 2.005s (~) 0.947s 10 1.00x
💻 Local Nitro 1.070s (-5.4% 🟢) 2.007s (~) 0.937s 10 1.01x
🐘 Postgres Nitro 1.083s (-5.0%) 2.008s (~) 0.925s 10 1.02x
🐘 Postgres Express 1.124s (-2.0%) 2.035s (+1.2%) 0.911s 10 1.06x
🐘 Postgres Next.js (Turbopack) 1.131s 2.014s 0.883s 10 1.07x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.636s (-19.6% 🟢) 3.854s (+0.6%) 2.218s 10 1.00x
▲ Vercel Express 1.682s (-10.3% 🟢) 3.646s (-4.2%) 1.964s 10 1.03x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Express

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 10.321s (-5.5% 🟢) 11.021s (~) 0.700s 3 1.00x
🐘 Postgres Nitro 10.409s (-4.2%) 11.016s (~) 0.607s 3 1.01x
💻 Local Nitro 10.432s (-4.7%) 11.022s (~) 0.590s 3 1.01x
🐘 Postgres Next.js (Turbopack) 10.745s 11.016s 0.271s 3 1.04x
🐘 Postgres Express 10.940s (~) 11.031s (~) 0.091s 3 1.06x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 13.757s (-20.6% 🟢) 15.481s (-20.2% 🟢) 1.724s 2 1.00x
▲ Vercel Express 13.758s (-19.0% 🟢) 15.735s (-21.4% 🟢) 1.976s 2 1.00x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Express

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 13.291s (-11.2% 🟢) 14.026s (-6.7% 🟢) 0.734s 5 1.00x
🐘 Postgres Nitro 13.499s (-7.5% 🟢) 14.018s (-6.7% 🟢) 0.520s 5 1.02x
💻 Local Nitro 13.533s (-10.2% 🟢) 14.028s (-12.5% 🟢) 0.495s 5 1.02x
🐘 Postgres Next.js (Turbopack) 14.158s 15.020s 0.862s 4 1.07x
🐘 Postgres Express 14.244s (-2.3%) 14.640s (-2.5%) 0.396s 5 1.07x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 22.607s (-57.0% 🟢) 24.213s (-55.7% 🟢) 1.607s 3 1.00x
▲ Vercel Express 22.657s (-55.0% 🟢) 24.432s (-53.5% 🟢) 1.774s 3 1.00x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Express

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 11.504s (-30.7% 🟢) 12.020s (-29.4% 🟢) 0.516s 8 1.00x
🐘 Postgres Nitro 11.924s (-14.6% 🟢) 12.268s (-14.3% 🟢) 0.345s 8 1.04x
💻 Local Nitro 11.984s (-28.6% 🟢) 12.273s (-27.9% 🟢) 0.290s 8 1.04x
🐘 Postgres Next.js (Turbopack) 13.315s 14.016s 0.701s 7 1.16x
🐘 Postgres Express 13.443s (-4.0%) 14.023s (-3.9%) 0.580s 7 1.17x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 32.646s (-91.7% 🟢) 35.171s (-91.1% 🟢) 2.525s 3 1.00x
▲ Vercel Express 33.063s (-72.7% 🟢) 35.293s (-71.5% 🟢) 2.229s 3 1.01x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Express

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.144s (-10.2% 🟢) 2.007s (~) 0.863s 15 1.00x
💻 Local Express 1.151s (-22.7% 🟢) 2.005s (~) 0.854s 15 1.01x
💻 Local Nitro 1.179s (-27.7% 🟢) 2.006s (-3.3%) 0.827s 15 1.03x
🐘 Postgres Express 1.196s (-5.1% 🟢) 2.016s (~) 0.820s 15 1.04x
🐘 Postgres Next.js (Turbopack) 1.218s 2.007s 0.789s 15 1.06x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.765s (-3.3%) 4.520s (-2.2%) 1.755s 7 1.00x
▲ Vercel Next.js (Turbopack) 2.898s (-14.7% 🟢) 4.679s (-5.1% 🟢) 1.781s 7 1.05x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.207s (-48.6% 🟢) 2.007s (-33.3% 🟢) 0.799s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.343s 2.008s 0.664s 15 1.11x
💻 Local Express 1.550s (-47.5% 🟢) 2.005s (-41.9% 🟢) 0.455s 15 1.28x
🐘 Postgres Express 1.641s (-30.5% 🟢) 2.081s (-30.8% 🟢) 0.441s 15 1.36x
💻 Local Nitro 1.827s (-41.9% 🟢) 2.075s (-46.6% 🟢) 0.248s 15 1.51x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.759s (+3.9%) 5.475s (+7.1% 🔺) 1.716s 6 1.00x
▲ Vercel Next.js (Turbopack) 3.966s (-44.1% 🟢) 5.630s (-36.8% 🟢) 1.663s 6 1.06x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.329s (-61.8% 🟢) 2.007s (-49.9% 🟢) 0.678s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.621s 2.008s 0.387s 15 1.22x
🐘 Postgres Express 2.089s (-40.1% 🟢) 2.826s (-29.5% 🟢) 0.738s 11 1.57x
💻 Local Express 3.515s (-57.8% 🟢) 4.009s (-55.6% 🟢) 0.494s 8 2.65x
💻 Local Nitro 5.100s (-38.9% 🟢) 5.680s (-37.0% 🟢) 0.580s 6 3.84x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.591s (+31.9% 🔺) 7.203s (+17.6% 🔺) 1.612s 5 1.00x
▲ Vercel Next.js (Turbopack) 5.780s (-35.2% 🟢) 7.496s (-31.6% 🟢) 1.716s 5 1.03x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.149s (-8.6% 🟢) 2.010s (~) 0.860s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.205s 2.008s 0.802s 15 1.05x
💻 Local Express 1.283s (-32.3% 🟢) 2.005s (-15.2% 🟢) 0.723s 15 1.12x
🐘 Postgres Express 1.408s (+12.0% 🔺) 2.151s (+7.1% 🔺) 0.743s 15 1.23x
💻 Local Nitro 1.424s (-23.7% 🟢) 2.006s (-14.3% 🟢) 0.583s 15 1.24x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.616s (+1.4%) 4.298s (-1.2%) 1.681s 7 1.00x
▲ Vercel Next.js (Turbopack) 2.776s (-5.3% 🟢) 4.332s (-6.7% 🟢) 1.555s 7 1.06x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.221s (-47.8% 🟢) 2.008s (-33.3% 🟢) 0.787s 15 1.00x
🐘 Postgres Express 1.335s (-43.0% 🟢) 2.012s (-33.2% 🟢) 0.677s 15 1.09x
🐘 Postgres Next.js (Turbopack) 1.342s 2.007s 0.665s 15 1.10x
💻 Local Express 1.636s (-47.8% 🟢) 2.005s (-46.7% 🟢) 0.369s 15 1.34x
💻 Local Nitro 2.147s (-30.0% 🟢) 2.507s (-35.5% 🟢) 0.360s 12 1.76x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.153s (+30.1% 🔺) 5.860s (+22.3% 🔺) 1.706s 6 1.00x
▲ Vercel Next.js (Turbopack) 4.712s (+49.9% 🔺) 6.679s (+47.7% 🔺) 1.967s 5 1.13x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.350s (-61.2% 🟢) 2.007s (-49.9% 🟢) 0.657s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.621s 2.074s 0.453s 15 1.20x
🐘 Postgres Express 2.060s (-41.1% 🟢) 2.750s (-31.4% 🟢) 0.689s 11 1.53x
💻 Local Express 4.339s (-50.7% 🟢) 4.872s (-47.5% 🟢) 0.532s 7 3.21x
💻 Local Nitro 6.043s (-33.9% 🟢) 6.515s (-35.0% 🟢) 0.472s 6 4.48x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.970s (-11.7% 🟢) 7.821s (-8.5% 🟢) 1.852s 4 1.00x
▲ Vercel Express 6.409s (~) 8.346s (+2.0%) 1.937s 4 1.07x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Express

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.370s (-62.4% 🟢) 1.003s (-6.7% 🟢) 0.633s 60 1.00x
🐘 Postgres Nitro 0.445s (-45.8% 🟢) 1.006s (~) 0.562s 60 1.20x
💻 Local Nitro 0.566s (-42.2% 🟢) 1.096s (~) 0.529s 55 1.53x
🐘 Postgres Next.js (Turbopack) 0.659s 1.006s 0.348s 60 1.78x
🐘 Postgres Express 0.691s (-17.6% 🟢) 1.236s (+20.8% 🔺) 0.544s 49 1.87x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.115s (-73.1% 🟢) 7.052s (-66.9% 🟢) 1.937s 9 1.00x
▲ Vercel Next.js (Turbopack) 5.357s (-63.1% 🟢) 7.189s (-55.3% 🟢) 1.832s 9 1.05x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.984s (-67.4% 🟢) 1.322s (-63.1% 🟢) 0.338s 69 1.00x
🐘 Postgres Nitro 1.024s (-46.9% 🟢) 1.435s (-31.7% 🟢) 0.412s 63 1.04x
💻 Local Nitro 1.190s (-60.8% 🟢) 2.006s (-46.6% 🟢) 0.816s 45 1.21x
🐘 Postgres Express 1.340s (-32.2% 🟢) 1.976s (-12.5% 🟢) 0.636s 46 1.36x
🐘 Postgres Next.js (Turbopack) 1.587s 2.007s 0.420s 45 1.61x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 14.687s (-57.5% 🟢) 16.599s (-54.9% 🟢) 1.913s 6 1.00x
▲ Vercel Next.js (Turbopack) 15.215s (-69.4% 🟢) 17.023s (-67.1% 🟢) 1.808s 6 1.04x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express | Next.js (Turbopack)

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.124s (-48.2% 🟢) 2.735s (-40.6% 🟢) 0.611s 44 1.00x
💻 Local Express 2.242s (-75.7% 🟢) 3.006s (-70.0% 🟢) 0.764s 40 1.06x
💻 Local Nitro 2.711s (-70.8% 🟢) 3.008s (-70.0% 🟢) 0.297s 40 1.28x
🐘 Postgres Express 2.782s (-30.3% 🟢) 3.337s (-23.6% 🟢) 0.555s 36 1.31x
🐘 Postgres Next.js (Turbopack) 3.143s 4.008s 0.866s 30 1.48x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 42.252s (-67.5% 🟢) 44.713s (-66.2% 🟢) 2.461s 3 1.00x
▲ Vercel Next.js (Turbopack) 45.487s (-57.5% 🟢) 47.658s (-56.2% 🟢) 2.171s 3 1.08x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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 🥇 Nitro 0.180s (-36.5% 🟢) 1.006s (~) 0.826s 60 1.00x
🐘 Postgres Next.js (Turbopack) 0.235s 1.006s 0.771s 60 1.31x
🐘 Postgres Express 0.307s (+8.8% 🔺) 1.023s (+1.6%) 0.716s 59 1.71x
💻 Local Express 0.383s (-31.6% 🟢) 1.003s (~) 0.620s 60 2.13x
💻 Local Nitro 0.449s (-25.8% 🟢) 1.004s (-1.7%) 0.556s 60 2.50x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.502s (+28.0% 🔺) 4.257s (+17.1% 🔺) 1.756s 15 1.00x
▲ Vercel Next.js (Turbopack) 3.344s (+65.3% 🔺) 5.242s (+38.2% 🔺) 1.898s 12 1.34x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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 🥇 Nitro 0.286s (-42.3% 🟢) 1.006s (~) 0.720s 90 1.00x
🐘 Postgres Next.js (Turbopack) 0.446s 1.006s 0.560s 90 1.56x
🐘 Postgres Express 0.625s (+22.6% 🔺) 1.241s (+23.3% 🔺) 0.616s 74 2.18x
💻 Local Express 1.899s (-24.5% 🟢) 2.376s (-21.0% 🟢) 0.477s 38 6.63x
💻 Local Nitro 2.267s (-10.7% 🟢) 2.976s (-1.1%) 0.710s 31 7.92x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 9.673s (+217.5% 🔺) 11.762s (+144.7% 🔺) 2.089s 8 1.00x
▲ Vercel Next.js (Turbopack) 9.895s (+179.9% 🔺) 11.625s (+123.9% 🔺) 1.731s 8 1.02x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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 🥇 Nitro 0.594s (-24.8% 🟢) 1.006s (~) 0.411s 120 1.00x
🐘 Postgres Express 0.869s (+6.2% 🔺) 1.343s (+32.0% 🔺) 0.474s 91 1.46x
🐘 Postgres Next.js (Turbopack) 0.941s 1.284s 0.343s 94 1.58x
💻 Local Express 8.239s (-26.4% 🟢) 8.808s (-26.2% 🟢) 0.569s 14 13.86x
💻 Local Nitro 10.068s (-10.0% 🟢) 10.860s (-6.9% 🟢) 0.792s 12 16.94x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 19.860s (+92.3% 🔺) 21.919s (+78.4% 🔺) 2.059s 6 1.00x
▲ Vercel Express 22.413s (+202.0% 🔺) 24.842s (+168.7% 🔺) 2.429s 5 1.13x
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack) | Express

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.103s (+454.0% 🔺) 2.004s (+99.5% 🔺) 0.008s (-35.5% 🟢) 2.014s (+97.8% 🔺) 0.911s 10 1.00x
🐘 Postgres Nitro 1.134s (+453.0% 🔺) 2.001s (+100.2% 🔺) 0.001s (-20.0% 🟢) 2.010s (+98.8% 🔺) 0.876s 10 1.03x
💻 Local Nitro 1.135s (+431.1% 🔺) 2.005s (+99.6% 🔺) 0.013s (+2.4%) 2.020s (+98.2% 🔺) 0.885s 10 1.03x
🐘 Postgres Next.js (Turbopack) 1.206s 2.001s 0.001s 2.010s 0.804s 10 1.09x
🐘 Postgres Express 1.402s (+583.6% 🔺) 1.994s (+99.7% 🔺) 0.193s (+11981.3% 🔺) 2.200s (+117.5% 🔺) 0.798s 10 1.27x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.302s (-66.4% 🟢) 3.616s (-58.2% 🟢) 2.635s (+316.9% 🔺) 6.754s (-31.0% 🟢) 4.452s 10 1.00x
▲ Vercel Express 2.785s (+11.2% 🔺) 4.040s (-1.2%) 2.458s (+155.8% 🔺) 7.004s (+25.3% 🔺) 4.219s 10 1.21x
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack) | Express

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.437s (+89.7% 🔺) 2.008s (+95.2% 🔺) 0.008s (-10.8% 🟢) 2.019s (+94.1% 🔺) 0.582s 30 1.00x
🐘 Postgres Nitro 1.505s (+141.1% 🔺) 2.004s (+99.0% 🔺) 0.004s (+0.8%) 2.027s (+98.3% 🔺) 0.522s 30 1.05x
🐘 Postgres Next.js (Turbopack) 1.696s 2.011s 0.004s 2.027s 0.331s 30 1.18x
💻 Local Nitro 1.939s (+131.2% 🔺) 2.011s (+98.7% 🔺) 0.010s (+4.2%) 2.424s (+117.2% 🔺) 0.485s 25 1.35x
🐘 Postgres Express 1.942s (+208.2% 🔺) 2.404s (+138.9% 🔺) 0.003s (-20.6% 🟢) 2.433s (+137.8% 🔺) 0.491s 25 1.35x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.992s (-7.9% 🟢) 7.347s (-8.3% 🟢) 0.338s (-17.2% 🟢) 8.207s (-7.1% 🟢) 2.216s 8 1.00x
▲ Vercel Next.js (Turbopack) 6.314s (-62.7% 🟢) 7.610s (-58.3% 🟢) 0.308s (+45.9% 🔺) 8.421s (-55.5% 🟢) 2.107s 8 1.05x
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Express | Next.js (Turbopack)

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.653s (-32.6% 🟢) 1.010s (-19.0% 🟢) 0.000s (-18.6% 🟢) 1.033s (-17.9% 🟢) 0.380s 59 1.00x
🐘 Postgres Next.js (Turbopack) 0.790s 1.035s 0.000s 1.050s 0.259s 58 1.21x
💻 Local Express 1.147s (-6.4% 🟢) 1.919s (-5.0% 🟢) 0.000s (-43.7% 🟢) 1.921s (-5.0% 🟢) 0.774s 32 1.76x
💻 Local Nitro 1.351s (+10.5% 🔺) 2.015s (~) 0.000s (+266.7% 🔺) 2.017s (~) 0.666s 30 2.07x
🐘 Postgres Express 1.537s (+59.9% 🔺) 2.026s (+58.5% 🔺) 0.000s (-20.7% 🟢) 2.081s (+59.3% 🔺) 0.545s 29 2.35x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.894s (+4.1%) 5.233s (+2.6%) 0.000s (~) 5.730s (+3.6%) 1.835s 11 1.00x
▲ Vercel Next.js (Turbopack) 3.982s (-60.9% 🟢) 5.367s (-53.4% 🟢) 0.000s (+Infinity% 🔺) 5.864s (-51.3% 🟢) 1.882s 11 1.02x
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Express | 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 🥇 Nitro 1.285s (-28.3% 🟢) 1.997s (-6.7% 🟢) 0.000s (-100.0% 🟢) 2.008s (-7.6% 🟢) 0.724s 30 1.00x
🐘 Postgres Next.js (Turbopack) 1.768s 2.310s 0.000s 2.329s 0.561s 26 1.38x
💻 Local Express 2.417s (-30.3% 🟢) 2.926s (-27.5% 🟢) 0.000s (-64.3% 🟢) 2.934s (-27.3% 🟢) 0.517s 21 1.88x
🐘 Postgres Express 2.841s (+60.3% 🔺) 3.388s (+55.6% 🔺) 0.000s (NaN%) 3.432s (+56.1% 🔺) 0.591s 18 2.21x
💻 Local Nitro 3.120s (-7.9% 🟢) 3.903s (-3.2%) 0.001s (+52.3% 🔺) 3.906s (-3.2%) 0.786s 16 2.43x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 6.073s (+32.4% 🔺) 7.379s (+22.5% 🔺) 0.000s (+Infinity% 🔺) 7.836s (+21.4% 🔺) 1.763s 8 1.00x
▲ Vercel Next.js (Turbopack) 7.187s (+28.0% 🔺) 8.564s (+22.7% 🔺) 0.002s (+1271.4% 🔺) 9.054s (+20.1% 🔺) 1.867s 7 1.18x
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Express | Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 💻 Local 15/21
Next.js (Turbopack) 🐘 Postgres 21/21
Nitro 🐘 Postgres 19/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


Some benchmark jobs failed:

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

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 14, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 1200 0 219 1419
✅ 💻 Local Development 1587 0 219 1806
❌ 📦 Local Production 1586 1 219 1806
❌ 🐘 Local Postgres 1585 2 219 1806
✅ 🪟 Windows 129 0 0 129
✅ 📋 Other 727 0 176 903
Total 6814 3 1052 7869

❌ Failed Tests

📦 Local Production (1 failed)

express-stable (1 failed):

  • AbortController abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step
🐘 Local Postgres (2 failed)

nextjs-turbopack-stable-lazy-discovery-disabled (1 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KRKWBRX7NGV00S0KWK71JEEY

nextjs-turbopack-stable-lazy-discovery-enabled (1 failed):

  • DurableAgent e2e core basic text response

Details by Category

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

📋 View full workflow run


Some E2E test jobs failed:

  • Vercel Prod: success
  • Local Dev: success
  • Local Prod: failure
  • Local Postgres: failure
  • Windows: success

Check the workflow run for details.

Comment thread packages/world-local/src/queue.ts Outdated
const DETACHED_ARRAYBUFFER_ERROR =
'Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer';
const PROXY_HANDLER_DOCS_URL =
'https://useworkflow.dev/docs/getting-started/next#configure-proxy-handler';
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Suggested change
'https://useworkflow.dev/docs/getting-started/next#configure-proxy-handler';
'https://workflow-sdk.dev/docs/getting-started/next#configure-proxy-handler';

@pranaygp pranaygp marked this pull request as ready for review May 14, 2026 18:27
@pranaygp pranaygp requested a review from a team as a code owner May 14, 2026 18:27
Copilot AI review requested due to automatic review settings May 14, 2026 18:27
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Improves DX for the common "detached ArrayBuffer" failure mode where a Next.js proxy/middleware intercepts Workflow's internal /.well-known/workflow/* request, by upgrading the local queue's error log to actionable guidance, adding test coverage, surfacing the same hint in the Next.js getting-started docs, and making the relevant docs section directly linkable via URL hash.

Changes:

  • Detect detached-ArrayBuffer errors (with cause-chain walk + cycle guard) in world-local queue's .catch() and replace the generic log with an actionable message + docs link, plus a regression test stubbing fetch.
  • Expand the v4/v5 Next.js getting-started "Configure Proxy Handler" accordion with a callout naming the exact error string, and give the accordion item an h3 anchor id (configure-proxy-handler).
  • Add a generic hash-open/scroll effect to the shared Accordion component so deep-links open the relevant accordion item; add a changeset for @workflow/world-local.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
File Description
packages/world-local/src/queue.ts Adds detached-ArrayBuffer detection and the actionable replacement log path in the queue's catch handler.
packages/world-local/src/queue.test.ts Adds a regression test that stubs fetch to reject with a detached-ArrayBuffer cause and asserts the new log format.
docs/content/docs/v5/getting-started/next.mdx Adds error-string callout and an id="configure-proxy-handler" anchor inside the accordion trigger.
docs/content/docs/v4/getting-started/next.mdx Same docs changes applied to the v4 guide.
docs/components/ui/accordion.tsx Adds a useEffect that opens and scrolls to the accordion item matching window.location.hash on mount and hashchange.
.changeset/sixty-plants-shout.md Patch changeset for @workflow/world-local.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

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.

DX: cryptic "detached ArrayBuffer" when middleware/proxy consumes workflow request body

3 participants