Skip to content

[codex] Fix detached ArrayBuffer proxy DX#1985

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

[codex] Fix detached ArrayBuffer proxy DX#1985
pranaygp wants to merge 4 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 10:05pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment May 14, 2026 10:05pm
example-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-astro-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-express-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-fastify-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-hono-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-nitro-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-nuxt-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-sveltekit-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-tanstack-start-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workbench-vite-workflow Ready Ready Preview, Comment May 14, 2026 10:05pm
workflow-docs Ready Ready Preview, Comment, Open in v0 May 14, 2026 10:05pm
workflow-swc-playground Ready Ready Preview, Comment May 14, 2026 10:05pm
workflow-tarballs Ready Ready Preview, Comment May 14, 2026 10:05pm
workflow-web Ready Ready Preview, Comment May 14, 2026 10:05pm

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 14, 2026

🦋 Changeset detected

Latest commit: e401ced

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.030s (-31.8% 🟢) 1.005s (~) 0.974s 10 1.00x
💻 Local Nitro 0.031s (-28.5% 🟢) 1.006s (~) 0.975s 10 1.02x
🐘 Postgres Express 0.043s (-25.2% 🟢) 1.011s (~) 0.967s 10 1.44x
🐘 Postgres Nitro 0.301s (+216.1% 🔺) 1.148s (+10.0% 🔺) 0.847s 10 9.96x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 0.326s (+29.7% 🔺) 2.228s (-4.5%) 1.902s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.068s (-5.6% 🟢) 2.007s (~) 0.938s 10 1.00x
💻 Local Express 1.071s (-4.8%) 2.006s (~) 0.935s 10 1.00x
🐘 Postgres Express 1.083s (-5.6% 🟢) 2.009s (~) 0.927s 10 1.01x
🐘 Postgres Nitro 1.313s (+15.1% 🔺) 2.043s (+1.7%) 0.731s 10 1.23x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.745s (-14.2% 🟢) 3.521s (-8.1% 🟢) 1.776s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 10.409s (-4.7%) 11.022s (~) 0.613s 3 1.00x
💻 Local Nitro 10.410s (-4.9%) 11.021s (~) 0.611s 3 1.00x
🐘 Postgres Express 10.420s (-5.0%) 11.015s (~) 0.595s 3 1.00x
🐘 Postgres Nitro 11.460s (+5.4% 🔺) 11.799s (+7.0% 🔺) 0.340s 3 1.10x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 13.874s (-19.9% 🟢) 15.338s (-20.9% 🟢) 1.464s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 13.437s (-10.8% 🟢) 14.026s (-12.5% 🟢) 0.589s 5 1.00x
💻 Local Express 13.452s (-10.1% 🟢) 14.027s (-6.7% 🟢) 0.575s 5 1.00x
🐘 Postgres Express 13.463s (-7.7% 🟢) 14.016s (-6.7% 🟢) 0.554s 5 1.00x
🐘 Postgres Nitro 16.041s (+9.9% 🔺) 16.789s (+11.7% 🔺) 0.749s 4 1.19x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 22.123s (-57.9% 🟢) 23.610s (-56.8% 🟢) 1.487s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 11.862s (-28.5% 🟢) 12.021s (-29.4% 🟢) 0.159s 8 1.00x
💻 Local Nitro 11.909s (-29.0% 🟢) 12.272s (-27.9% 🟢) 0.364s 8 1.00x
🐘 Postgres Express 11.971s (-14.5% 🟢) 12.264s (-16.0% 🟢) 0.293s 8 1.01x
🐘 Postgres Nitro 14.156s (+1.4%) 14.637s (+2.3%) 0.481s 7 1.19x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 35.672s (-90.9% 🟢) 39.361s (-90.0% 🟢) 3.689s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.143s (-9.3% 🟢) 2.007s (~) 0.864s 15 1.00x
💻 Local Nitro 1.171s (-28.2% 🟢) 2.006s (-3.3%) 0.835s 15 1.02x
💻 Local Express 1.179s (-20.8% 🟢) 2.006s (~) 0.827s 15 1.03x
🐘 Postgres Nitro 1.550s (+21.6% 🔺) 2.203s (+9.6% 🔺) 0.653s 14 1.36x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.879s (-15.3% 🟢) 4.579s (-7.2% 🟢) 1.699s 7 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.187s (-49.7% 🟢) 2.007s (-33.3% 🟢) 0.820s 15 1.00x
💻 Local Nitro 1.686s (-46.4% 🟢) 2.005s (-48.4% 🟢) 0.319s 15 1.42x
💻 Local Express 1.761s (-40.4% 🟢) 2.005s (-41.9% 🟢) 0.245s 15 1.48x
🐘 Postgres Nitro 1.799s (-23.5% 🟢) 2.560s (-14.9% 🟢) 0.761s 12 1.52x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.286s (-25.5% 🟢) 7.216s (-19.0% 🟢) 1.930s 5 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.284s (-63.2% 🟢) 2.008s (-49.9% 🟢) 0.724s 15 1.00x
🐘 Postgres Nitro 2.279s (-34.5% 🟢) 3.169s (-20.9% 🟢) 0.890s 10 1.78x
💻 Local Nitro 4.725s (-43.4% 🟢) 5.179s (-42.6% 🟢) 0.454s 6 3.68x
💻 Local Express 5.445s (-34.7% 🟢) 5.846s (-35.2% 🟢) 0.401s 6 4.24x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.425s (-39.1% 🟢) 7.217s (-34.2% 🟢) 1.792s 5 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.135s (-9.7% 🟢) 2.009s (~) 0.874s 15 1.00x
💻 Local Nitro 1.351s (-27.6% 🟢) 2.006s (-14.3% 🟢) 0.655s 15 1.19x
💻 Local Express 1.442s (-23.9% 🟢) 2.006s (-15.1% 🟢) 0.564s 15 1.27x
🐘 Postgres Nitro 1.459s (+16.1% 🔺) 2.037s (+1.5%) 0.578s 15 1.29x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.569s (-12.4% 🟢) 4.002s (-13.8% 🟢) 1.433s 8 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.197s (-48.9% 🟢) 2.007s (-33.3% 🟢) 0.810s 15 1.00x
🐘 Postgres Nitro 1.557s (-33.4% 🟢) 2.407s (-20.0% 🟢) 0.850s 13 1.30x
💻 Local Nitro 1.793s (-41.5% 🟢) 2.151s (-44.7% 🟢) 0.358s 14 1.50x
💻 Local Express 2.190s (-30.1% 🟢) 2.508s (-33.4% 🟢) 0.317s 12 1.83x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 4.744s (+51.0% 🔺) 6.187s (+36.8% 🔺) 1.443s 5 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.272s (-63.6% 🟢) 2.007s (-50.0% 🟢) 0.735s 15 1.00x
🐘 Postgres Nitro 2.000s (-42.5% 🟢) 2.717s (-32.2% 🟢) 0.718s 12 1.57x
💻 Local Nitro 4.902s (-46.4% 🟢) 5.345s (-46.7% 🟢) 0.443s 6 3.85x
💻 Local Express 6.083s (-30.9% 🟢) 6.414s (-30.8% 🟢) 0.331s 5 4.78x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 7.367s (+9.0% 🔺) 9.079s (+6.3% 🔺) 1.713s 4 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.472s (-43.7% 🟢) 1.023s (~) 0.551s 59 1.00x
💻 Local Express 0.486s (-50.6% 🟢) 1.004s (-6.7% 🟢) 0.518s 60 1.03x
💻 Local Nitro 0.490s (-50.0% 🟢) 1.004s (-8.2% 🟢) 0.514s 60 1.04x
🐘 Postgres Nitro 0.869s (+5.9% 🔺) 1.344s (+33.6% 🔺) 0.475s 45 1.84x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.726s (-60.5% 🟢) 7.340s (-54.4% 🟢) 1.614s 9 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.082s (-45.3% 🟢) 1.806s (-20.0% 🟢) 0.724s 50 1.00x
💻 Local Express 1.181s (-60.8% 🟢) 2.005s (-44.1% 🟢) 0.824s 45 1.09x
💻 Local Nitro 1.190s (-60.8% 🟢) 2.006s (-46.6% 🟢) 0.816s 45 1.10x
🐘 Postgres Nitro 2.562s (+32.9% 🔺) 3.079s (+46.6% 🔺) 0.517s 30 2.37x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 14.376s (-71.1% 🟢) 16.151s (-68.8% 🟢) 1.775s 6 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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 1.976s (-50.5% 🟢) 2.207s (-49.5% 🟢) 0.231s 55 1.00x
💻 Local Express 2.652s (-71.2% 🟢) 3.007s (-70.0% 🟢) 0.355s 40 1.34x
💻 Local Nitro 2.727s (-70.7% 🟢) 3.033s (-69.7% 🟢) 0.306s 40 1.38x
🐘 Postgres Nitro 3.383s (-17.6% 🟢) 3.949s (-14.2% 🟢) 0.566s 31 1.71x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 43.378s (-59.5% 🟢) 45.035s (-58.7% 🟢) 1.657s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.164s (-42.0% 🟢) 1.006s (~) 0.842s 60 1.00x
💻 Local Express 0.444s (-20.8% 🟢) 1.004s (~) 0.560s 60 2.71x
💻 Local Nitro 0.459s (-24.0% 🟢) 1.004s (-1.7%) 0.545s 60 2.80x
🐘 Postgres Nitro 0.602s (+112.5% 🔺) 1.185s (+17.7% 🔺) 0.583s 52 3.67x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.687s (+32.8% 🔺) 4.206s (+10.9% 🔺) 1.520s 15 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.281s (-44.9% 🟢) 1.006s (~) 0.725s 90 1.00x
🐘 Postgres Nitro 1.106s (+122.9% 🔺) 1.680s (+66.9% 🔺) 0.574s 54 3.94x
💻 Local Express 2.150s (-14.4% 🟢) 2.943s (-2.2%) 0.793s 31 7.65x
💻 Local Nitro 2.273s (-10.4% 🟢) 2.944s (-2.2%) 0.671s 31 8.09x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 10.672s (+201.9% 🔺) 12.206s (+135.0% 🔺) 1.533s 8 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.560s (-31.6% 🟢) 1.005s (-1.2%) 0.445s 120 1.00x
🐘 Postgres Nitro 1.769s (+123.8% 🔺) 2.310s (+129.3% 🔺) 0.542s 52 3.16x
💻 Local Nitro 9.971s (-10.9% 🟢) 10.613s (-9.0% 🟢) 0.642s 12 17.80x
💻 Local Express 10.131s (-9.5% 🟢) 10.779s (-9.7% 🟢) 0.648s 12 18.09x
💻 Local Next.js (Turbopack) ⚠️ missing - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 28.565s (+176.6% 🔺) 30.319s (+146.8% 🔺) 1.754s 4 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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
🐘 Postgres 🥇 Express 1.135s (+453.2% 🔺) 2.000s (+100.3% 🔺) 0.001s (-31.3% 🟢) 2.009s (+98.6% 🔺) 0.875s 10 1.00x
💻 Local Express 1.135s (+470.1% 🔺) 2.005s (+99.6% 🔺) 0.012s (-2.5%) 2.019s (+98.3% 🔺) 0.884s 10 1.00x
💻 Local Nitro 1.143s (+435.0% 🔺) 2.005s (+99.6% 🔺) 0.010s (-18.4% 🟢) 2.018s (+98.0% 🔺) 0.874s 10 1.01x
🐘 Postgres Nitro 1.416s (+590.7% 🔺) 2.004s (+100.5% 🔺) 0.100s (+6533.3% 🔺) 2.144s (+112.0% 🔺) 0.728s 10 1.25x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.569s (-62.5% 🟢) 3.412s (-60.6% 🟢) 2.882s (+356.1% 🔺) 6.709s (-31.5% 🟢) 4.140s 10 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack)

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.519s (+141.2% 🔺) 2.009s (+99.6% 🔺) 0.003s (-9.5% 🟢) 2.024s (+97.9% 🔺) 0.505s 30 1.00x
💻 Local Express 1.536s (+102.9% 🔺) 2.012s (+95.5% 🔺) 0.009s (~) 2.023s (+94.6% 🔺) 0.487s 30 1.01x
💻 Local Nitro 1.544s (+84.1% 🔺) 2.011s (+98.8% 🔺) 0.010s (+6.4% 🔺) 2.023s (+81.3% 🔺) 0.479s 30 1.02x
🐘 Postgres Nitro 3.177s (+409.1% 🔺) 3.604s (+258.0% 🔺) 0.003s (-23.2% 🟢) 3.686s (+260.5% 🔺) 0.508s 17 2.09x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 6.008s (-64.5% 🟢) 7.055s (-61.3% 🟢) 0.244s (+15.5% 🔺) 7.733s (-59.2% 🟢) 1.725s 8 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: 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.659s (-31.4% 🟢) 1.054s (-17.5% 🟢) 0.000s (+21.1% 🔺) 1.061s (-18.8% 🟢) 0.402s 57 1.00x
💻 Local Express 1.363s (+11.2% 🔺) 2.015s (~) 0.000s (+10.0% 🔺) 2.017s (~) 0.655s 30 2.07x
💻 Local Nitro 1.407s (+15.1% 🔺) 2.017s (~) 0.000s (+233.3% 🔺) 2.020s (~) 0.612s 30 2.14x
🐘 Postgres Nitro 2.450s (+152.9% 🔺) 2.808s (+125.1% 🔺) 0.000s (+14.3% 🔺) 2.875s (+128.6% 🔺) 0.425s 21 3.72x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.725s (-63.4% 🟢) 4.905s (-57.4% 🟢) 0.000s (+Infinity% 🔺) 5.312s (-55.9% 🟢) 1.588s 12 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: 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.284s (-27.5% 🟢) 1.968s (-9.6% 🟢) 0.000s (+Infinity% 🔺) 1.981s (-9.9% 🟢) 0.696s 31 1.00x
💻 Local Nitro 3.170s (-6.4% 🟢) 3.907s (-3.1%) 0.000s (-18.0% 🟢) 3.909s (-3.1%) 0.739s 16 2.47x
💻 Local Express 3.460s (~) 3.828s (-5.1% 🟢) 0.000s (-58.3% 🟢) 4.166s (+3.2%) 0.706s 15 2.69x
🐘 Postgres Nitro 4.511s (+151.8% 🔺) 4.842s (+126.1% 🔺) 0.000s (-100.0% 🟢) 5.009s (+130.4% 🔺) 0.498s 12 3.51x
💻 Local Next.js (Turbopack) ⚠️ missing - - - - -
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 6.094s (+8.5% 🔺) 7.427s (+6.4% 🔺) 0.000s (-100.0% 🟢) 7.839s (+4.0%) 1.745s 8 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Express 11/21
🐘 Postgres Express 21/21
▲ Vercel Next.js (Turbopack) 21/21
Fastest World by Framework

Winner determined by most benchmark wins

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


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 May 14, 2026

🧪 E2E Test Results

Some tests failed

Summary

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

❌ Failed Tests

▲ Vercel Production (2 failed)

nextjs-turbopack (1 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KRM8M5JMW42PMWKDC52PG37Z | 🔍 observability

vite (1 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KRM8M5JMW42PMWKDC52PG37Z | 🔍 observability
🐘 Local Postgres (1 failed)

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

  • addTenWorkflow | wrun_01KRM88AJMT25D474EH06T0B5T

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 126 1 2
✅ nextjs-webpack 127 0 2
✅ nitro 103 0 26
✅ nuxt 103 0 26
✅ sveltekit 122 0 7
❌ vite 102 1 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 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 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 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 128 1 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: failure
  • Local Dev: success
  • Local Prod: success
  • 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.

@pranaygp pranaygp enabled auto-merge (squash) May 14, 2026 22:01
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