Skip to content

[codex] Surface workflow backend deprecation notices in clients#2230

Draft
pranaygp wants to merge 3 commits into
mainfrom
pranaygp/codex/workflow-deprecation-signaling
Draft

[codex] Surface workflow backend deprecation notices in clients#2230
pranaygp wants to merge 3 commits into
mainfrom
pranaygp/codex/workflow-deprecation-signaling

Conversation

@pranaygp

@pranaygp pranaygp commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • export structured workflow backend deprecation notices from @workflow/world-vercel, parsing standard lifecycle headers with legacy X-API-* fallback
  • warn once by default or let CLI/web callers render notices through onDeprecation, including removed-endpoint handling with WORKFLOW_SERVER_ENDPOINT_SUNSET
  • carry notices through CLI, web RPC, and raw stream responses and show a persistent deduplicated warning alert in the web UI
  • add optional runId correlation scoping across world implementations and migrate the web lookup away from the deprecated unscoped endpoint
  • document the public additions and add a changeset

Why

This gives upgraded workflow clients actionable deprecation feedback without changing workflow-server response bodies for existing SDK versions. It pairs with workflow-server#471, which supplies the lifecycle headers and canonical run-scoped correlation endpoint.

Verification

  • pnpm --filter @workflow/world-vercel typecheck
  • pnpm --filter @workflow/world-vercel exec vitest run src/utils.test.ts src/events.test.ts src/streamer.test.ts src/refs.test.ts (41 tests passed)
  • pnpm --filter @workflow/world-local typecheck && pnpm --filter @workflow/world-local test (366 tests passed)
  • pnpm --filter @workflow/world-postgres typecheck && pnpm --filter @workflow/world-postgres test (112 tests passed)
  • pnpm --filter @workflow/web test -- app/lib/deprecation-context.test.tsx app/lib/client/workflow-streams.test.ts (web suite: 78 tests passed)
  • pnpm exec vitest run packages/cli/src/lib/inspect/setup.test.ts (2 tests passed)
  • pnpm --filter @workflow/docs-typecheck exec vitest run src/__tests__/docs.test.ts -t 'packages/world-vercel/README.md' (new README sample passed)
  • targeted dependency-aware Turbo builds for affected packages
  • git diff --check
  • built-web browser smoke check

Screenshot

Rendered locally using representative workflow backend lifecycle headers.

Workflow backend endpoint deprecation alert

@changeset-bot

changeset-bot Bot commented Jun 2, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 70b0d44

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 Minor
@workflow/world-local Minor
@workflow/world-postgres Minor
@workflow/world-vercel Minor
@workflow/cli Minor
@workflow/web Minor
@workflow/core Patch
@workflow/vitest Patch
@workflow/web-shared Minor
@workflow/world-testing Patch
workflow Patch
@workflow/nitro Patch
@workflow/builders Patch
@workflow/next Patch
@workflow/nuxt Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite 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

@vercel

vercel Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

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 3, 2026 1:41am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jun 3, 2026 1:41am
example-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-astro-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-express-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-fastify-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-hono-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-nitro-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-nuxt-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-sveltekit-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workbench-vite-workflow Ready Ready Preview, Comment Jun 3, 2026 1:41am
workflow-docs Ready Ready Preview, Comment, Open in v0 Jun 3, 2026 1:41am
workflow-swc-playground Ready Ready Preview, Comment Jun 3, 2026 1:41am
workflow-tarballs Ready Ready Preview, Comment Jun 3, 2026 1:41am
workflow-web Ready Ready Preview, Comment Jun 3, 2026 1:41am

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

📊 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.041s (+1.5%) 1.005s (~) 0.964s 10 1.00x
💻 Local Express 0.043s (+2.9%) 1.007s (~) 0.964s 10 1.04x
🐘 Postgres Express 0.059s (-7.7% 🟢) 1.014s (~) 0.955s 10 1.42x
💻 Local Next.js (Turbopack) 0.060s (+25.2% 🔺) 1.006s (~) 0.946s 10 1.46x
🐘 Postgres Nitro 0.062s (-1.7%) 1.010s (~) 0.948s 10 1.50x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 0.304s (+2.5%) 2.195s (+2.6%) 1.891s 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.095s (~) 2.006s (~) 0.911s 10 1.00x
💻 Local Express 1.102s (~) 2.007s (~) 0.905s 10 1.01x
🐘 Postgres Express 1.104s (~) 2.009s (~) 0.905s 10 1.01x
🐘 Postgres Nitro 1.114s (~) 2.010s (~) 0.896s 10 1.02x
💻 Local Next.js (Turbopack) 1.133s (+2.5%) 2.007s (~) 0.874s 10 1.03x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.661s (+4.1%) 3.405s (+6.5% 🔺) 1.744s 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 🥇 Nitro 10.488s (~) 11.022s (~) 0.533s 3 1.00x
🐘 Postgres Express 10.538s (~) 11.020s (~) 0.481s 3 1.00x
💻 Local Express 10.564s (~) 11.022s (~) 0.458s 3 1.01x
🐘 Postgres Nitro 10.592s (~) 11.017s (~) 0.424s 3 1.01x
💻 Local Next.js (Turbopack) 10.779s (+1.3%) 11.022s (~) 0.243s 3 1.03x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 13.518s (-25.6% 🟢) 15.075s (-23.3% 🟢) 1.557s 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.751s (~) 14.027s (~) 0.276s 5 1.00x
💻 Local Express 13.751s (~) 14.028s (~) 0.277s 5 1.00x
🐘 Postgres Express 13.760s (~) 14.018s (~) 0.258s 5 1.00x
🐘 Postgres Nitro 14.101s (+1.9%) 14.219s (+1.4%) 0.119s 5 1.03x
💻 Local Next.js (Turbopack) 14.384s (+3.0%) 15.030s (+5.7% 🔺) 0.645s 4 1.05x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 21.558s (-7.3% 🟢) 23.331s (-3.9%) 1.773s 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 🥇 Nitro 12.302s (-1.1%) 13.025s (~) 0.723s 7 1.00x
🐘 Postgres Express 12.431s (-1.2%) 13.018s (~) 0.587s 7 1.01x
🐘 Postgres Nitro 12.486s (-0.9%) 13.019s (~) 0.534s 7 1.01x
💻 Local Express 12.499s (+0.6%) 13.024s (~) 0.525s 7 1.02x
💻 Local Next.js (Turbopack) 13.673s (+5.9% 🔺) 14.170s (+6.5% 🔺) 0.497s 7 1.11x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 31.221s (+4.4%) 32.888s (+5.8% 🔺) 1.667s 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.176s (-0.9%) 2.007s (~) 0.831s 15 1.00x
💻 Local Nitro 1.176s (-4.7%) 2.006s (~) 0.829s 15 1.00x
🐘 Postgres Nitro 1.192s (~) 2.008s (~) 0.816s 15 1.01x
💻 Local Express 1.240s (+2.8%) 2.006s (~) 0.766s 15 1.05x
💻 Local Next.js (Turbopack) 1.311s (~) 2.006s (~) 0.694s 15 1.11x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.782s (~) 4.652s (+16.8% 🔺) 1.869s 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.231s (-1.4%) 2.007s (~) 0.775s 15 1.00x
🐘 Postgres Nitro 1.255s (~) 2.009s (~) 0.753s 15 1.02x
💻 Local Nitro 1.694s (-0.9%) 2.006s (~) 0.312s 15 1.38x
💻 Local Next.js (Turbopack) 1.861s (+14.1% 🔺) 2.073s (~) 0.212s 15 1.51x
💻 Local Express 1.918s (+8.6% 🔺) 2.314s (+11.7% 🔺) 0.396s 13 1.56x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.675s (-9.3% 🟢) 5.095s (-5.2% 🟢) 1.420s 6 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.363s (-2.2%) 2.007s (~) 0.643s 15 1.00x
🐘 Postgres Nitro 1.400s (+0.8%) 2.008s (~) 0.607s 15 1.03x
💻 Local Nitro 4.426s (-1.3%) 5.012s (~) 0.585s 7 3.25x
💻 Local Next.js (Turbopack) 5.432s (+46.5% 🔺) 6.014s (+41.2% 🔺) 0.582s 5 3.98x
💻 Local Express 5.887s (+32.6% 🔺) 6.615s (+32.0% 🔺) 0.728s 5 4.32x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.785s (+10.0% 🔺) 7.283s (+8.2% 🔺) 1.497s 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.182s (~) 2.007s (~) 0.825s 15 1.00x
🐘 Postgres Nitro 1.202s (+1.5%) 2.007s (~) 0.805s 15 1.02x
💻 Local Next.js (Turbopack) 1.400s (+7.8% 🔺) 2.006s (~) 0.606s 15 1.18x
💻 Local Nitro 1.496s (-1.6%) 2.006s (~) 0.510s 15 1.27x
💻 Local Express 1.623s (+1.8%) 2.073s (+3.4%) 0.450s 15 1.37x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.597s (-9.0% 🟢) 3.970s (-10.6% 🟢) 1.373s 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.244s (-1.7%) 2.009s (~) 0.765s 15 1.00x
🐘 Postgres Nitro 1.256s (-6.0% 🟢) 2.008s (-3.3%) 0.752s 15 1.01x
💻 Local Nitro 2.054s (-4.1%) 2.510s (-11.2% 🟢) 0.455s 12 1.65x
💻 Local Next.js (Turbopack) 2.085s (+14.8% 🔺) 2.917s (+40.7% 🔺) 0.832s 11 1.68x
💻 Local Express 2.146s (+4.3%) 2.591s (+3.4%) 0.445s 12 1.72x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.885s (+13.9% 🔺) 5.409s (+16.7% 🔺) 1.524s 6 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.381s (-2.5%) 2.008s (~) 0.627s 15 1.00x
🐘 Postgres Nitro 1.393s (-1.7%) 2.007s (~) 0.614s 15 1.01x
💻 Local Nitro 5.109s (-5.4% 🟢) 5.680s (-5.6% 🟢) 0.570s 6 3.70x
💻 Local Express 5.604s (-0.8%) 6.014s (-3.2%) 0.410s 5 4.06x
💻 Local Next.js (Turbopack) 5.817s (+43.0% 🔺) 6.414s (+35.7% 🔺) 0.597s 5 4.21x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.653s (-9.7% 🟢) 7.297s (-7.5% 🟢) 1.643s 5 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.558s (-5.7% 🟢) 1.006s (-1.7%) 0.448s 60 1.00x
💻 Local Nitro 0.572s (-2.7%) 1.005s (~) 0.433s 60 1.02x
🐘 Postgres Nitro 0.598s (+0.7%) 1.024s (~) 0.426s 59 1.07x
💻 Local Express 0.637s (+7.7% 🔺) 1.022s (+1.7%) 0.385s 59 1.14x
💻 Local Next.js (Turbopack) 0.853s (+20.0% 🔺) 1.004s (-3.3%) 0.151s 60 1.53x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.056s (-15.9% 🟢) 6.436s (-11.9% 🟢) 1.381s 10 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.385s (~) 2.076s (+2.3%) 0.691s 44 1.00x
🐘 Postgres Nitro 1.447s (+7.1% 🔺) 2.053s (+2.3%) 0.606s 44 1.04x
💻 Local Nitro 1.506s (+1.8%) 2.028s (+1.1%) 0.522s 45 1.09x
💻 Local Express 1.541s (+1.3%) 2.007s (~) 0.466s 45 1.11x
💻 Local Next.js (Turbopack) 2.055s (+19.1% 🔺) 2.976s (+48.4% 🔺) 0.920s 31 1.48x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 13.716s (+2.5%) 15.570s (+4.7%) 1.854s 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 2.564s (-6.1% 🟢) 3.033s (-3.3%) 0.469s 40 1.00x
🐘 Postgres Nitro 2.796s (+2.8%) 3.163s (+2.5%) 0.367s 39 1.09x
💻 Local Nitro 3.160s (-1.3%) 3.790s (-5.5% 🟢) 0.630s 32 1.23x
💻 Local Express 3.383s (+4.5%) 4.043s (+0.8%) 0.660s 30 1.32x
💻 Local Next.js (Turbopack) 4.282s (+19.2% 🔺) 5.011s (+25.0% 🔺) 0.729s 24 1.67x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 29.087s (-5.6% 🟢) 31.580s (-1.8%) 2.493s 4 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.207s (-10.5% 🟢) 1.006s (~) 0.799s 60 1.00x
🐘 Postgres Nitro 0.222s (+1.9%) 1.006s (~) 0.784s 60 1.07x
💻 Local Nitro 0.423s (-8.7% 🟢) 1.004s (~) 0.581s 60 2.04x
💻 Local Express 0.458s (+5.7% 🔺) 1.004s (~) 0.546s 60 2.21x
💻 Local Next.js (Turbopack) 0.558s (+11.8% 🔺) 1.005s (-1.8%) 0.447s 60 2.69x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.298s (+3.3%) 3.659s (+1.9%) 1.361s 17 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.341s (-5.2% 🟢) 1.006s (~) 0.666s 90 1.00x
🐘 Postgres Nitro 0.359s (+3.1%) 1.006s (~) 0.647s 90 1.05x
💻 Local Nitro 2.060s (-3.4%) 2.608s (-4.7%) 0.548s 35 6.05x
💻 Local Express 2.198s (+4.9%) 2.767s (+7.3% 🔺) 0.569s 33 6.46x
💻 Local Next.js (Turbopack) 2.374s (+16.6% 🔺) 3.043s (+16.7% 🔺) 0.669s 30 6.97x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.463s (-5.1% 🟢) 7.008s (-2.9%) 1.545s 14 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.645s (-6.2% 🟢) 1.006s (~) 0.362s 120 1.00x
🐘 Postgres Nitro 0.684s (-1.5%) 1.006s (~) 0.322s 120 1.06x
💻 Local Nitro 9.303s (-4.3%) 9.951s (-2.4%) 0.648s 13 14.43x
💻 Local Express 10.143s (+6.5% 🔺) 10.698s (+5.0%) 0.555s 12 15.73x
💻 Local Next.js (Turbopack) 10.182s (+10.9% 🔺) 11.030s (+10.9% 🔺) 0.847s 11 15.79x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 16.667s (-1.0%) 18.683s (+1.0%) 2.015s 7 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
💻 Local 🥇 Nitro 1.156s (-1.2%) 2.005s (~) 0.010s (~) 2.017s (~) 0.861s 10 1.00x
🐘 Postgres Express 1.156s (-1.5%) 2.001s (~) 0.001s (-37.5% 🟢) 2.010s (~) 0.853s 10 1.00x
💻 Local Express 1.164s (-0.7%) 2.005s (~) 0.013s (+7.7% 🔺) 2.020s (~) 0.856s 10 1.01x
🐘 Postgres Nitro 1.177s (+1.1%) 1.993s (~) 0.001s (-23.5% 🟢) 2.010s (~) 0.833s 10 1.02x
💻 Local Next.js (Turbopack) 1.223s (-1.1%) 2.004s (~) 0.012s (+49.4% 🔺) 2.019s (~) 0.797s 10 1.06x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.202s (-14.1% 🟢) 3.263s (-8.7% 🟢) 2.231s (+76.7% 🔺) 5.894s (+13.0% 🔺) 3.692s 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
💻 Local 🥇 Nitro 1.563s (-0.9%) 2.010s (~) 0.010s (-1.9%) 2.022s (~) 0.459s 30 1.00x
🐘 Postgres Express 1.568s (-1.9%) 2.007s (~) 0.004s (+3.6%) 2.026s (~) 0.458s 30 1.00x
🐘 Postgres Nitro 1.588s (~) 2.003s (~) 0.004s (-6.6% 🟢) 2.024s (~) 0.436s 30 1.02x
💻 Local Express 1.622s (+2.2%) 2.010s (~) 0.011s (+17.3% 🔺) 2.023s (~) 0.401s 30 1.04x
💻 Local Next.js (Turbopack) 1.721s (+8.8% 🔺) 2.008s (~) 0.011s (+29.3% 🔺) 2.023s (~) 0.301s 30 1.10x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 6.035s (-13.5% 🟢) 6.962s (-16.9% 🟢) 0.447s (+115.5% 🔺) 7.832s (-13.5% 🟢) 1.797s 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.693s (-5.4% 🟢) 1.032s (-3.3%) 0.000s (-51.7% 🟢) 1.044s (-3.3%) 0.352s 58 1.00x
🐘 Postgres Nitro 0.740s (+2.1%) 1.048s (+1.7%) 0.000s (-32.2% 🟢) 1.060s (+1.0%) 0.321s 57 1.07x
💻 Local Express 1.468s (+8.7% 🔺) 2.015s (~) 0.001s (+150.0% 🔺) 2.017s (~) 0.549s 30 2.12x
💻 Local Next.js (Turbopack) 1.486s (+25.4% 🔺) 2.013s (+6.7% 🔺) 0.000s (+54.1% 🔺) 2.016s (+6.8% 🔺) 0.530s 30 2.15x
💻 Local Nitro 1.586s (+11.6% 🔺) 2.014s (~) 0.000s (-8.2% 🟢) 2.195s (+8.9% 🔺) 0.609s 28 2.29x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 4.015s (+15.8% 🔺) 5.164s (+20.6% 🔺) 0.000s (-100.0% 🟢) 5.683s (+17.3% 🔺) 1.667s 11 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.318s (-16.4% 🟢) 2.068s (-10.3% 🟢) 0.000s (-100.0% 🟢) 2.081s (-10.4% 🟢) 0.764s 29 1.00x
🐘 Postgres Nitro 1.457s (+3.1%) 2.098s (~) 0.000s (NaN%) 2.114s (~) 0.657s 29 1.11x
💻 Local Next.js (Turbopack) 2.711s (+15.1% 🔺) 3.358s (+9.4% 🔺) 0.001s (+427.8% 🔺) 3.362s (+9.4% 🔺) 0.651s 18 2.06x
💻 Local Nitro 2.988s (-5.4% 🟢) 3.778s (-3.2%) 0.000s (-28.6% 🟢) 3.780s (-3.2%) 0.793s 16 2.27x
💻 Local Express 3.259s (-6.6% 🟢) 3.840s (-1.3%) 0.001s (+17.2% 🔺) 3.844s (-9.1% 🟢) 0.585s 16 2.47x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.453s (-21.8% 🟢) 6.784s (-17.1% 🟢) 0.000s (NaN%) 7.214s (-16.3% 🟢) 1.761s 9 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 Nitro 18/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 18/21
Next.js (Turbopack) 💻 Local 20/21
Nitro 🐘 Postgres 12/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: failure
  • Vercel: failure

Check the workflow run for details.

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 1264 2 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 768 1 176 945
Total 7180 3 1052 8235

❌ Failed Tests

▲ Vercel Production (2 failed)

express (2 failed):

  • outputStreamWorkflow negative startIndex (reads from end)
  • distributedAbortController - TTL expiration triggers signal | wrun_01KT5JSX58SVS8773RZZJ0HM1Z | 🔍 observability
📋 Other (1 failed)

e2e-local-dev-nest-stable (1 failed):

  • AbortController abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 109 0 26
✅ example 109 0 26
❌ express 107 2 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 109 1 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


Some E2E test jobs failed:

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

Check the workflow run for details.

### events.listByCorrelationId()

List events that share a correlation ID, useful for tracing related events across runs.
List events that share a correlation ID. Supply `runId` when inspecting one run so backends can use the canonical run-scoped query.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Users shouldn't have to make decisions based on knowing backend internals

Comment thread packages/world/README.md
Comment on lines +8 to +11

`world.events.listByCorrelationId()` accepts an optional `runId` to limit
matching events to a single workflow run while preserving unscoped queries for
backends and callers that need cross-run results.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It's impossible to get cross-run results when using a correlationId, since they're unique per run, right? This doesn't make sense to me

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.

2 participants