Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability by pranaygp · Pull Request #2375 · vercel/workflow · GitHub
Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability by pranaygp · Pull Request #2375 · vercel/workflow · GitHub
Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability by pranaygp · Pull Request #2375 · vercel/workflow · GitHub
Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability by pranaygp · Pull Request #2375 · vercel/workflow · GitHub
Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability by pranaygp · Pull Request #2375 · vercel/workflow · GitHub
Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability by pranaygp · Pull Request #2375 · vercel/workflow · GitHub
Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability by pranaygp · Pull Request #2375 · vercel/workflow · GitHub
Skip to content

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability - #2375

Merged
pranaygp merged 2 commits into
mainfrom
pgp/docs
Jun 12, 2026
Merged

docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability#2375
pranaygp merged 2 commits into
mainfrom
pgp/docs

Conversation

@pranaygp

@pranaygppranaygp commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits restructuring and correcting the API reference so it follows one convention everywhere: one section per package entry point, one page per export, with every documented export verified against package sources and every code sample actually type-checked.

1. Restructure: workflow/runtime + workflow/observability sections

The API reference is organized by entry point, but getWorld() and the World SDK pages lived under workflow/api despite being exported from workflow/runtime — the pages' own examples import from workflow/runtime. The observability utilities additionally documented workflow/observability exports from inside the World SDK group.

  • New workflow-runtime section: get-world, World SDK (world/ — storage, streams, queue), plus dedicated pages for every other runtime export: createWorld, setWorld, getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint on v4 only — verified against stable).
  • New workflow-observability section with per-function pages: hydrateResourceIO, observabilityRevivers, hydrateData, parseStepName, parseWorkflowName, parseClassName.
  • 8 permanent redirects for the moved URLs in both /docs and /v5/docs spaces; all inbound links updated.

2. Correctness sweep (every documented export verified against sources)

  • Removed fictional encryption API: the observability docs documented getEncryptionKeyForRun() and hydrateResourceIOWithKey() as workflow/observability exports behind @expect-error:2305 markers — neither exists there (getEncryptionKeyForRun is an optional method on the World interface; hydrateResourceIOWithKey doesn't exist anywhere). Replaced with an honest "Encrypted Data" section describing the pass-through Uint8Array behavior.
  • 5 undocumented workflow/errors exports got pages: WorkflowError (incl. the .is() doesn't-match-subclasses caveat), HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError, RunNotSupportedError.
  • v4 accuracy: v4 pages no longer claim getWorld() returns Promise<World> — it's synchronous in 4.x (became async in 5.x); noted on the v4 pages with await-compatible samples. parseWorkflowName import fixed from internal @workflow/utils/parse-name to workflow/observability.
  • Fixed how-it-works/encryption.mdx sample that didn't satisfy the World["getEncryptionKeyForRun"] overload set.

3. Coverage: framework adapter sections

workflow/next was the only documented adapter. Added sections for all six others, with v4 variants reflecting stable's actual API (no sourcemap option; no-arg sveltekit/astro plugins):

workflow/nitro, workflow/nuxt, workflow/sveltekit (workflowPlugin()), workflow/astro (workflow()), workflow/vite (workflow()), workflow/nest (WorkflowModule, NestLocalBuilder, WorkflowController, configureWorkflowController).

4. Docs typechecking: closed the silent-skip hole

@workflow/docs-typecheck ignores module-not-found errors for import paths missing from its paths mapping — so samples importing workflow/runtime, workflow/next, @workflow/serde, @workflow/vitest, or @workflow/world were silently unchecked (everything typed any). Fixed by mapping all entry points (plus pinning vite/vitest/nitro/vite to single instances to avoid duplicate-package type conflicts).

This immediately surfaced and led to fixing: the encryption.mdx sample bug, the vite getting-started nitro config-key augmentation, and made 12 previously-skipped samples genuinely type-check — all 6 @skip-typecheck markers in the vitest docs and all 3 stale @expect-error:2351 markers in the serde docs are gone. Remaining markers all have honest reasons (type-only signature snippets, v4-only exports checked against v5 types, polyfilled globals).

Result: 997 samples type-check (up from 919), 0 failures. Docs build (684 pages), link lint, and smoke test all pass. No changeset needed (docs content, skills, and a private package).

Docs Preview

Preview deployment: workflow-docs-git-pgp-docs.vercel.sh (requires Vercel team access)

Pagev4v5
API Reference index/docs/api-reference/v5/docs/api-reference
workflow/runtime index/docs/api-reference/workflow-runtime/v5/docs/api-reference/workflow-runtime
getWorld()/docs/api-reference/workflow-runtime/get-world/v5/docs/api-reference/workflow-runtime/get-world
World SDK/docs/api-reference/workflow-runtime/world/v5/docs/api-reference/workflow-runtime/world
createWorld() (new)/docs/api-reference/workflow-runtime/create-world/v5/docs/api-reference/workflow-runtime/create-world
workflowEntrypoint() (new)/docs/api-reference/workflow-runtime/workflow-entrypoint/v5/docs/api-reference/workflow-runtime/workflow-entrypoint
stepEntrypoint (new, v4 only)/docs/api-reference/workflow-runtime/step-entrypoint
workflow/observability index/docs/api-reference/workflow-observability/v5/docs/api-reference/workflow-observability
hydrateResourceIO() (new)/docs/api-reference/workflow-observability/hydrate-resource-io/v5/docs/api-reference/workflow-observability/hydrate-resource-io
parseWorkflowName() (new)/docs/api-reference/workflow-observability/parse-workflow-name/v5/docs/api-reference/workflow-observability/parse-workflow-name
WorkflowError (new)/docs/api-reference/workflow-errors/workflow-error/v5/docs/api-reference/workflow-errors/workflow-error
HookConflictError (new)/docs/api-reference/workflow-errors/hook-conflict-error/v5/docs/api-reference/workflow-errors/hook-conflict-error
workflow/nitro (new)/docs/api-reference/workflow-nitro/v5/docs/api-reference/workflow-nitro
workflow/nuxt (new)/docs/api-reference/workflow-nuxt/v5/docs/api-reference/workflow-nuxt
workflow/sveltekit (new)/docs/api-reference/workflow-sveltekit/v5/docs/api-reference/workflow-sveltekit
workflow/astro (new)/docs/api-reference/workflow-astro/v5/docs/api-reference/workflow-astro
workflow/vite (new)/docs/api-reference/workflow-vite/v5/docs/api-reference/workflow-vite
workflow/nest (new)/docs/api-reference/workflow-nest/v5/docs/api-reference/workflow-nest
workflow/api index/docs/api-reference/workflow-api/v5/docs/api-reference/workflow-api

Redirect check: old World SDK URL and old observability URL should land on the new pages.

🤖 Generated with Claude Code

…orkflow/observability
The API reference is organized as one section per package entry point,
but getWorld() and the World SDK pages lived under workflow/api despite
being exported from workflow/runtime, and the observability utilities
page documented workflow/observability exports from inside the World
SDK group.
- Add workflow-runtime section (getWorld, World SDK) with an index that
also covers the remaining runtime exports
- Promote observability utilities to a top-level workflow-observability
page matching its import path
- Update all inbound links, add permanent redirects for the old URLs in
both /docs and /v5/docs spaces, and mirror the structure in v4
- Update workflow skill doc paths (bump to 1.9)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 11, 2026 23:42
@pranaygp
pranaygp requested a review from a team as a code ownerJune 11, 2026 23:42
@changeset-bot

changeset-botBot commented Jun 11, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eea55b3

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

vercelBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express0.044s (+3.8%)1.005s (~)0.961s101.00x
💻 LocalNitro0.045s (+5.7% 🔺)1.007s (~)0.962s101.02x
🐘 PostgresExpress0.063s (+3.1%)1.013s (~)0.950s101.44x
💻 LocalNext.js (Turbopack)0.063s (~)1.006s (~)0.942s101.44x
🐘 PostgresNitro0.065s (-1.5%)1.012s (~)0.947s101.47x
🐘 PostgresNext.js (Turbopack)0.067s (-11.1% 🟢)1.012s (~)0.946s101.51x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.295s (-22.0% 🟢)2.450s (+16.7% 🔺)2.155s101.00x
▲ VercelExpress0.338s (+24.7% 🔺)2.493s (-3.4%)2.156s101.15x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.097s (+0.6%)2.008s (~)0.910s101.00x
💻 LocalExpress1.104s (+0.9%)2.006s (~)0.902s101.01x
🐘 PostgresNitro1.108s (~)2.010s (~)0.902s101.01x
🐘 PostgresExpress1.114s (~)2.011s (~)0.897s101.01x
💻 LocalNext.js (Turbopack)1.129s (~)2.006s (~)0.877s101.03x
🐘 PostgresNext.js (Turbopack)1.137s (-0.6%)2.010s (~)0.874s101.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro1.705s (+1.7%)3.866s (+12.1% 🔺)2.161s101.00x
▲ VercelExpress1.835s (+4.7%)3.826s (+3.1%)1.990s101.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro10.521s (~)11.023s (~)0.502s31.00x
🐘 PostgresNitro10.523s (-0.9%)11.016s (~)0.493s31.00x
💻 LocalExpress10.545s (~)11.021s (~)0.476s31.00x
🐘 PostgresExpress10.572s (~)11.018s (~)0.445s31.00x
💻 LocalNext.js (Turbopack)10.815s (~)11.021s (~)0.206s31.03x
🐘 PostgresNext.js (Turbopack)10.829s (-1.7%)11.016s (-5.7% 🟢)0.188s31.03x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.860s (+3.9%)16.122s (+6.5% 🔺)2.262s21.00x
▲ VercelExpress14.288s (+6.5% 🔺)16.635s (+5.7% 🔺)2.347s21.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express13.767s (-0.6%)14.027s (~)0.260s51.00x
🐘 PostgresNitro13.778s (~)14.018s (~)0.240s51.00x
🐘 PostgresExpress13.833s (~)14.019s (~)0.186s51.00x
💻 LocalNitro13.875s (~)14.227s (~)0.352s51.01x
🐘 PostgresNext.js (Turbopack)14.377s (-0.8%)15.017s (~)0.641s41.04x
💻 LocalNext.js (Turbopack)14.466s (~)15.029s (~)0.563s41.05x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro21.284s (-5.1% 🟢)23.326s (-3.1%)2.042s31.00x
▲ VercelExpress22.340s (+4.0%)24.678s (+6.9% 🔺)2.338s31.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro12.471s (~)13.027s (~)0.556s71.00x
💻 LocalExpress12.480s (~)13.025s (~)0.545s71.00x
🐘 PostgresNitro12.527s (~)13.021s (~)0.494s71.00x
🐘 PostgresExpress12.568s (-1.4%)13.018s (~)0.449s71.01x
💻 LocalNext.js (Turbopack)13.636s (~)14.027s (~)0.391s71.09x
🐘 PostgresNext.js (Turbopack)13.856s (-0.8%)14.162s (-1.0%)0.307s71.11x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro29.757s (-6.2% 🟢)32.568s (-2.2%)2.811s31.00x
▲ VercelExpress30.516s (+2.9%)32.952s (+5.8% 🔺)2.436s31.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro1.192s (-2.6%)2.006s (~)0.814s151.00x
💻 LocalExpress1.194s (~)2.006s (~)0.811s151.00x
🐘 PostgresNitro1.201s (~)2.008s (~)0.806s151.01x
🐘 PostgresExpress1.223s (+1.7%)2.007s (~)0.785s151.03x
🐘 PostgresNext.js (Turbopack)1.321s (+5.0%)2.007s (~)0.687s151.11x
💻 LocalNext.js (Turbopack)1.371s (+1.7%)2.006s (~)0.635s151.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.354s (-36.4% 🟢)3.931s (-24.1% 🟢)1.577s81.00x
▲ VercelExpress2.989s (+17.1% 🔺)4.750s (+5.5% 🔺)1.761s71.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.363s (+8.3% 🔺)2.315s (+15.4% 🔺)0.952s131.00x
🐘 PostgresExpress1.408s (+11.5% 🔺)2.508s (+24.9% 🔺)1.100s121.03x
🐘 PostgresNext.js (Turbopack)1.536s (+9.7% 🔺)2.392s (+19.2% 🔺)0.856s131.13x
💻 LocalExpress1.621s (-12.0% 🟢)2.006s (-6.7% 🟢)0.385s151.19x
💻 LocalNext.js (Turbopack)1.704s (-9.3% 🟢)2.149s (~)0.446s141.25x
💻 LocalNitro1.936s (+13.7% 🔺)2.295s (+14.4% 🔺)0.359s141.42x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.825s (-54.7% 🟢)4.668s (-39.7% 🟢)1.844s71.00x
▲ VercelExpress3.588s (-18.8% 🟢)5.475s (-10.5% 🟢)1.887s61.27x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.599s (+13.6% 🔺)4.137s (+106.0% 🔺)2.538s81.00x
🐘 PostgresExpress1.639s (+16.9% 🔺)4.011s (+99.7% 🔺)2.372s81.02x
🐘 PostgresNext.js (Turbopack)3.867s (+114.4% 🔺)5.012s (+118.2% 🔺)1.145s62.42x
💻 LocalExpress4.430s (-17.7% 🟢)5.013s (-18.9% 🟢)0.583s72.77x
💻 LocalNext.js (Turbopack)4.662s (-18.3% 🟢)5.012s (-19.3% 🟢)0.349s62.92x
💻 LocalNitro5.693s (+8.5% 🔺)6.214s (+3.3%)0.521s53.56x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express4.701s (-48.5% 🟢)7.122s (-37.3% 🟢)2.420s51.00x
▲ VercelNitro4.876s (-71.3% 🟢)7.084s (-61.2% 🟢)2.208s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.209s (+1.5%)2.007s (~)0.798s151.00x
🐘 PostgresExpress1.242s (+2.5%)2.007s (~)0.766s151.03x
🐘 PostgresNext.js (Turbopack)1.272s (+0.6%)2.007s (~)0.735s151.05x
💻 LocalNext.js (Turbopack)1.396s (+3.3%)2.006s (~)0.610s151.15x
💻 LocalExpress1.566s (-5.6% 🟢)2.006s (-3.3%)0.440s151.30x
💻 LocalNitro1.571s (+4.1%)2.007s (~)0.436s151.30x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.310s (-14.4% 🟢)4.184s (-11.2% 🟢)1.874s81.00x
▲ VercelNitro2.800s (+8.6% 🔺)4.547s (+7.4% 🔺)1.748s71.21x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.359s (+4.8%)2.735s (+36.1% 🔺)1.376s111.00x
🐘 PostgresNitro1.391s (+9.4% 🔺)2.316s (+15.3% 🔺)0.925s131.02x
🐘 PostgresNext.js (Turbopack)1.509s (+7.5% 🔺)2.150s (+7.1% 🔺)0.642s141.11x
💻 LocalExpress1.746s (-19.1% 🟢)2.074s (-22.5% 🟢)0.328s151.28x
💻 LocalNext.js (Turbopack)1.930s (-5.7% 🟢)2.315s (-23.0% 🟢)0.386s131.42x
💻 LocalNitro2.412s (+11.1% 🔺)3.010s (+16.1% 🔺)0.598s101.77x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.781s (-42.4% 🟢)4.706s (-26.5% 🟢)1.924s71.00x
▲ VercelExpress3.015s (-12.0% 🟢)4.952s (-2.9%)1.937s71.08x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express1.728s (+23.2% 🔺)3.887s (+93.3% 🔺)2.159s81.00x
🐘 PostgresNitro1.759s (+26.7% 🔺)4.299s (+114.1% 🔺)2.540s71.02x
🐘 PostgresNext.js (Turbopack)3.406s (+88.4% 🔺)4.590s (+106.3% 🔺)1.183s71.97x
💻 LocalExpress4.631s (-27.2% 🟢)5.179s (-26.2% 🟢)0.548s62.68x
💻 LocalNext.js (Turbopack)4.996s (-17.5% 🟢)5.513s (-19.1% 🟢)0.518s62.89x
💻 LocalNitro6.597s (+21.4% 🔺)7.218s (+20.0% 🔺)0.620s53.82x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.819s (-25.1% 🟢)6.096s (-15.8% 🟢)2.277s51.00x
▲ VercelNitro3.978s (-43.2% 🟢)6.102s (-29.1% 🟢)2.124s51.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.591s (+2.0%)1.023s (+1.7%)0.432s591.00x
💻 LocalExpress0.599s (-2.1%)1.004s (~)0.406s601.01x
💻 LocalNitro0.603s (~)1.005s (~)0.402s601.02x
🐘 PostgresExpress0.649s (+8.2% 🔺)1.078s (+7.0% 🔺)0.428s561.10x
🐘 PostgresNext.js (Turbopack)0.815s (-4.7%)1.006s (-1.7%)0.192s601.38x
💻 LocalNext.js (Turbopack)0.865s (~)1.057s (+3.5%)0.193s571.46x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.901s (-41.8% 🟢)7.878s (-33.1% 🟢)1.977s81.00x
▲ VercelNitro6.500s (+31.0% 🔺)8.173s (+25.5% 🔺)1.674s81.10x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.394s (-2.9%)2.008s (-1.1%)0.614s451.00x
🐘 PostgresExpress1.410s (-1.7%)2.007s (~)0.597s451.01x
💻 LocalNitro1.539s (+2.3%)2.006s (~)0.468s451.10x
💻 LocalExpress1.573s (+1.2%)2.052s (+1.2%)0.479s441.13x
🐘 PostgresNext.js (Turbopack)1.923s (-5.2% 🟢)2.100s (-20.9% 🟢)0.177s431.38x
💻 LocalNext.js (Turbopack)2.121s (+1.0%)3.008s (~)0.887s301.52x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro13.555s (+3.5%)15.710s (+8.6% 🔺)2.156s61.00x
▲ VercelExpress13.745s (-4.3%)16.324s (+1.1%)2.579s61.01x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express2.734s (-2.7%)3.137s (~)0.402s391.00x
🐘 PostgresNitro2.807s (~)3.167s (~)0.360s381.03x
💻 LocalExpress3.204s (-2.5%)4.009s (~)0.805s301.17x
💻 LocalNitro3.335s (+1.1%)4.043s (+0.8%)0.708s301.22x
🐘 PostgresNext.js (Turbopack)3.805s (-4.5%)4.076s (-5.9% 🟢)0.271s301.39x
💻 LocalNext.js (Turbopack)4.301s (-1.0%)5.010s (~)0.709s241.57x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro26.901s (-7.6% 🟢)30.108s (-2.3%)3.207s41.00x
▲ VercelExpress27.593s (+5.2% 🔺)30.283s (+7.3% 🔺)2.690s41.03x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Express0.247s (+6.3% 🔺)1.006s (~)0.759s601.00x
🐘 PostgresNitro0.253s (+15.3% 🔺)1.006s (~)0.753s601.02x
🐘 PostgresNext.js (Turbopack)0.297s (+7.0% 🔺)1.006s (~)0.709s601.20x
💻 LocalNitro0.443s (+3.2%)1.005s (-1.7%)0.561s601.79x
💻 LocalExpress0.460s (+11.4% 🔺)1.004s (~)0.544s601.86x
💻 LocalNext.js (Turbopack)0.538s (-1.6%)1.005s (~)0.467s602.17x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express1.987s (-22.6% 🟢)3.912s (-4.8%)1.925s161.00x
▲ VercelNitro2.425s (-14.1% 🟢)4.385s (+1.6%)1.959s141.22x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.415s (+15.8% 🔺)1.018s (+1.1%)0.602s891.00x
🐘 PostgresExpress0.433s (+15.7% 🔺)1.040s (+3.4%)0.607s871.04x
🐘 PostgresNext.js (Turbopack)0.586s (+17.4% 🔺)1.077s (+7.0% 🔺)0.491s851.41x
💻 LocalExpress2.093s (+2.7%)2.608s (+2.8%)0.515s355.04x
💻 LocalNitro2.111s (-3.3%)2.715s (~)0.604s345.08x
💻 LocalNext.js (Turbopack)2.469s (+0.8%)3.183s (+1.1%)0.714s295.94x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.954s (-68.1% 🟢)4.673s (-57.0% 🟢)1.720s201.00x
▲ VercelExpress3.077s (-43.2% 🟢)4.900s (-30.7% 🟢)1.823s191.04x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.773s (+13.5% 🔺)1.471s (+46.2% 🔺)0.698s821.00x
🐘 PostgresExpress0.824s (+18.4% 🔺)1.387s (+37.8% 🔺)0.562s871.07x
🐘 PostgresNext.js (Turbopack)2.878s (+186.3% 🔺)3.681s (+98.5% 🔺)0.803s333.72x
💻 LocalExpress8.974s (-3.7%)9.484s (-3.9%)0.510s1311.61x
💻 LocalNitro9.802s (+5.6% 🔺)10.278s (+4.9%)0.476s1212.68x
💻 LocalNext.js (Turbopack)10.867s (-0.7%)11.848s (+3.2%)0.981s1114.06x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express6.012s (-68.2% 🟢)7.689s (-62.5% 🟢)1.677s161.00x
▲ VercelNitro6.311s (-67.2% 🟢)8.185s (-63.0% 🟢)1.874s151.05x
▲ VercelNext.js (Turbopack)⚠️missing----

🔍 Observability: Express | Nitro

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.156s (-1.1%)2.005s (~)0.010s (-16.2% 🟢)2.017s (~)0.861s101.00x
🐘 PostgresNitro1.163s (-0.9%)1.999s (~)0.001s (-7.7% 🟢)2.011s (~)0.848s101.01x
💻 LocalNitro1.170s (~)2.005s (~)0.013s (+29.8% 🔺)2.021s (~)0.851s101.01x
🐘 PostgresExpress1.173s (~)1.993s (~)0.001s (~)2.010s (~)0.837s101.01x
💻 LocalNext.js (Turbopack)1.210s (~)2.003s (~)0.010s (-16.9% 🟢)2.017s (~)0.807s101.05x
🐘 PostgresNext.js (Turbopack)1.240s (~)2.001s (~)0.001s (-7.7% 🟢)2.011s (~)0.771s101.07x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.325s (+7.3% 🔺)3.415s (+6.6% 🔺)0.924s (+1.7%)4.885s (+6.6% 🔺)2.559s101.00x
▲ VercelNitro2.495s (+1.9%)3.612s (+7.4% 🔺)0.951s (~)5.085s (+6.7% 🔺)2.591s101.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

stream pipeline with 5 transform steps (1MB)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Express1.566s (~)2.009s (~)0.014s (+15.3% 🔺)2.025s (~)0.459s301.00x
🐘 PostgresNitro1.572s (-2.5%)2.006s (~)0.005s (+4.7%)2.028s (~)0.456s301.00x
💻 LocalNitro1.581s (-0.8%)2.011s (~)0.012s (-1.6%)2.025s (~)0.444s301.01x
🐘 PostgresExpress1.642s (+2.5%)2.008s (~)0.005s (-0.6%)2.029s (~)0.387s301.05x
💻 LocalNext.js (Turbopack)1.724s (-0.9%)2.009s (~)0.014s (+13.5% 🔺)2.026s (~)0.303s301.10x
🐘 PostgresNext.js (Turbopack)1.752s (-1.9%)2.009s (~)0.005s (+6.7% 🔺)2.026s (~)0.274s301.12x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express5.920s (-2.5%)7.209s (-1.2%)0.239s (-9.2% 🟢)8.009s (~)2.089s81.00x
▲ VercelNitro6.134s (+3.6%)7.265s (+3.3%)0.230s (-51.1% 🟢)8.253s (+3.3%)2.119s81.04x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Express | Nitro

10 parallel streams (1MB each)

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro0.785s (+10.8% 🔺)1.028s (-1.5%)0.000s (-33.3% 🟢)1.067s (~)0.282s571.00x
🐘 PostgresExpress0.820s (+15.9% 🔺)1.065s (+4.9%)0.000s (-100.0% 🟢)1.079s (+4.9%)0.259s561.04x
🐘 PostgresNext.js (Turbopack)0.999s (+15.9% 🔺)1.452s (+33.1% 🔺)0.000s (+31.0% 🔺)1.460s (+32.9% 🔺)0.462s421.27x
💻 LocalNitro1.381s (-4.1%)2.014s (~)0.001s (+200.0% 🔺)2.016s (~)0.635s301.76x
💻 LocalExpress1.397s (+3.5%)2.012s (~)0.000s (+25.0% 🔺)2.014s (~)0.617s301.78x
💻 LocalNext.js (Turbopack)1.478s (+0.8%)2.013s (~)0.000s (-40.0% 🟢)2.016s (~)0.539s301.88x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.713s (-28.7% 🟢)4.232s (-12.3% 🟢)0.006s (+Infinity% 🔺)4.788s (-8.3% 🟢)2.075s131.00x
▲ VercelExpress2.803s (-16.6% 🟢)4.259s (-6.9% 🟢)0.000s (-100.0% 🟢)4.766s (-5.4% 🟢)1.962s131.03x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

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

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
🐘 Postgres🥇 Nitro1.553s (+16.5% 🔺)2.138s (+5.5% 🔺)0.000s (+Infinity% 🔺)2.155s (+4.5%)0.602s281.00x
🐘 PostgresExpress1.596s (+4.6%)2.137s (-3.7%)0.000s (-51.8% 🟢)2.152s (-4.3%)0.556s281.03x
🐘 PostgresNext.js (Turbopack)2.271s (+31.3% 🔺)2.909s (+28.6% 🔺)0.000s (NaN%)2.916s (+28.4% 🔺)0.644s211.46x
💻 LocalNext.js (Turbopack)2.956s (+3.6%)3.614s (+5.8% 🔺)0.001s (+76.5% 🔺)3.618s (+5.8% 🔺)0.662s171.90x
💻 LocalNitro3.091s (-2.4%)3.902s (+1.7%)0.001s (+233.3% 🔺)3.904s (+1.6%)0.813s161.99x
💻 LocalExpress3.123s (+0.9%)3.773s (+2.8%)0.000s (-32.4% 🟢)3.776s (+2.7%)0.653s162.01x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro4.482s (-39.2% 🟢)5.818s (-26.7% 🟢)0.000s (NaN%)6.338s (-29.8% 🟢)1.856s101.00x
▲ VercelExpress4.803s (-9.7% 🟢)6.224s (-5.4% 🟢)0.000s (NaN%)6.745s (-6.2% 🟢)1.942s91.07x
▲ VercelNext.js (Turbopack)⚠️missing-----

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalExpress12/21
🐘 PostgresNitro16/21
▲ VercelNitro13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express🐘 Postgres12/21
Next.js (Turbopack)🐘 Postgres15/21
Nitro🐘 Postgres16/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

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production137602191595
✅ 💻 Local Development181102192030
✅ 📦 Local Production181102192030
✅ 🐘 Local Postgres179702332030
✅ 🪟 Windows14500145
✅ 📋 Other83701781015
Total7777010688845

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro119026
✅ example119026
✅ express119026
✅ fastify119026
✅ hono119026
✅ nextjs-turbopack14302
✅ nextjs-webpack14302
✅ nitro119026
✅ nuxt119026
✅ sveltekit13807
✅ vite119026
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable120025
✅ express-stable120025
✅ fastify-stable120025
✅ hono-stable120025
✅ nextjs-turbopack-canary126019
✅ nextjs-turbopack-stable-lazy-discovery-disabled14500
✅ nextjs-turbopack-stable-lazy-discovery-enabled14500
✅ nextjs-webpack-canary126019
✅ nextjs-webpack-stable-lazy-discovery-disabled14500
✅ nextjs-webpack-stable-lazy-discovery-enabled14500
✅ nitro-stable120025
✅ nuxt-stable120025
✅ sveltekit-stable13906
✅ vite-stable120025
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable119026
✅ express-stable119026
✅ fastify-stable119026
✅ hono-stable119026
✅ nextjs-turbopack-canary125020
✅ nextjs-turbopack-stable-lazy-discovery-disabled14401
✅ nextjs-turbopack-stable-lazy-discovery-enabled14401
✅ nextjs-webpack-canary125020
✅ nextjs-webpack-stable-lazy-discovery-disabled14401
✅ nextjs-webpack-stable-lazy-discovery-enabled14401
✅ nitro-stable119026
✅ nuxt-stable119026
✅ sveltekit-stable13807
✅ vite-stable119026
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack14500
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable120025
✅ e2e-local-dev-tanstack-start-120025
✅ e2e-local-postgres-nest-stable119026
✅ e2e-local-postgres-tanstack-start-119026
✅ e2e-local-prod-nest-stable120025
✅ e2e-local-prod-tanstack-start-120025
✅ e2e-vercel-prod-tanstack-start119026

📋 View full workflow run

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Reorganizes the API reference docs so pages live under the section that matches their actual public entrypoints (workflow/runtime for getWorld + World SDK, and workflow/observability for observability utilities), with redirects and link updates to prevent breakage.

Changes:

  • Adds new workflow/runtime API reference section (v4 + v5) and moves World SDK docs under it.
  • Promotes observability utilities into a dedicated workflow/observability API reference page/section and updates all inbound links.
  • Adds permanent redirects for the moved routes and updates skills/workflow/SKILL.md to reflect the new doc structure/version.

Reviewed changes

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

Show a summary per file
FileDescription
skills/workflow/SKILL.mdBumps skill version and updates the documented docs path map to the new API reference layout.
docs/next.config.tsAdds permanent redirects for moved API reference routes (World SDK + observability + getWorld).
docs/content/docs/v5/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v5/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v5/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v5/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v5/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v5/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v5/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v5/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v5/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports.
docs/content/docs/v5/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v5/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v5/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v5/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v5/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v5/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.
docs/content/docs/v4/foundations/versioning.mdxUpdates observability utility link to the new top-level page.
docs/content/docs/v4/foundations/streaming.mdxUpdates World SDK streams link to the new workflow-runtime location.
docs/content/docs/v4/api-reference/workflow-runtime/world/streams.mdxAdjusts prerequisites/related links to point at the new getWorld + storage pages.
docs/content/docs/v4/api-reference/workflow-runtime/world/storage.mdxUpdates observability links to the new workflow-observability page.
docs/content/docs/v4/api-reference/workflow-runtime/world/queue.mdxUpdates prerequisite and related storage link to workflow-runtime.
docs/content/docs/v4/api-reference/workflow-runtime/world/meta.jsonAdds nav metadata for the World SDK subsection.
docs/content/docs/v4/api-reference/workflow-runtime/world/index.mdxUpdates cards/links to workflow-runtime and points observability to the new page.
docs/content/docs/v4/api-reference/workflow-runtime/meta.jsonAdds nav metadata for the new workflow/runtime section.
docs/content/docs/v4/api-reference/workflow-runtime/index.mdxAdds overview page for workflow/runtime and lists key exports (incl. stepEntrypoint() for v4).
docs/content/docs/v4/api-reference/workflow-runtime/get-world.mdxUpdates World SDK/observability references to new routes.
docs/content/docs/v4/api-reference/workflow-observability.mdxRenames/repositions page to represent workflow/observability entrypoint and updates links.
docs/content/docs/v4/api-reference/workflow-api/world/meta.jsonRemoves old World SDK nav metadata from workflow/api section.
docs/content/docs/v4/api-reference/workflow-api/index.mdxRemoves getWorld/World SDK cards and adds callout pointing to workflow/runtime.
docs/content/docs/v4/api-reference/meta.jsonAdds workflow-runtime and workflow-observability to API reference navigation.
docs/content/docs/v4/api-reference/index.mdxAdds cards for the new workflow/runtime and workflow/observability sections.

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

…ion pages, typecheck coverage
- docs-typecheck: map workflow/runtime, workflow/next, all framework
adapter entry points, @workflow/serde, @workflow/vitest,
@workflow/world, and pin vite/vitest/nitro-vite to single instances.
Unmapped imports were silently unchecked (TS2307 ignored), which had
been hiding real sample errors.
- workflow/observability: split into per-function pages
(hydrateResourceIO, observabilityRevivers, hydrateData,
parseStepName, parseWorkflowName, parseClassName). Removed the
encryption section that documented non-existent exports
(getEncryptionKeyForRun is a World method; hydrateResourceIOWithKey
doesn't exist) behind @expect-error markers.
- workflow/runtime: dedicated pages for createWorld, setWorld,
getWorldHandlers, workflowEntrypoint, healthCheck (+ stepEntrypoint
on v4). v4 pages note the 4.x sync getWorld/createWorld behavior.
- workflow/errors: pages for the 5 undocumented exports: WorkflowError,
HookConflictError, WorkflowRunNotCompletedError, WorkflowRuntimeError,
RunNotSupportedError.
- New API reference sections for all framework adapters: workflow/nitro,
workflow/nuxt, workflow/sveltekit, workflow/astro, workflow/vite,
workflow/nest (v4 variants reflect stable's API: no sourcemap option,
no-arg sveltekit/astro plugins).
- Removed stale escape hatches: 6 @skip-typecheck in vitest docs,
3 @expect-error:2351 in serde docs — all now type-check for real.
- Fixed how-it-works/encryption.mdx sample to satisfy the
getEncryptionKeyForRun overload set; fixed get-world.mdx to import
parseWorkflowName from workflow/observability instead of the internal
@workflow/utils path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Addednpm/​radix-ui@​1.5.0971008197100

View full report

@karthikscale3karthikscale3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed for correctness and regressions — LGTM.

What I checked:

  • API accuracy: Verified every documented export against sources on both branches. v5: all workflow/runtime exports exist with matching signatures, getWorld is async, stepEntrypoint correctly absent; all workflow/observability functions, workflow/errors classes (incl. the WorkflowError.is() subclass caveat), and adapter exports match. v4 (against stable): getWorld is sync, no-arg sveltekit/astro plugins, no sourcemap option, and the parseWorkflowName import fix to workflow/observability is correct. Confirmed getEncryptionKeyForRun is only an optional World method and hydrateResourceIOWithKey doesn't exist — removing those docs was right.
  • Redirects: All 8 rules correct; exact-match observability rules precede the world/:path* catch-alls, no existing rule shadows them, no redirect chains.
  • Stale links: Grep for workflow-api/world / workflow-api/get-world across docs, app code, and skills found nothing outside the redirect rules.
  • Lockfile churn: Beyond adding vite to docs-typecheck, the install re-resolved radix-uilatest (1.4.3 → 1.5.0, docs app) and shifted an esbuild peer resolution in @nuxt/module-builder's build graph — dev/build-time only, and Build Packages + all E2E suites pass.
  • CI: Green except Benchmark Vercel (nextjs-turbopack), which is unrelated — one bench case returned NaNx against the Vercel deployment while the same suite passed on Local/Postgres variants. A re-run should clear it.

🤖 Generated with Claude Code

@pranaygp
pranaygp merged commit 055b666 into mainJun 12, 2026
120 of 121 checks passed
@pranaygp
pranaygp deleted the pgp/docs branch June 12, 2026 08:42
github-actionsBot added a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2379. Merge conflicts were resolved by AI — please review carefully. (backport job run)

pranaygp pushed a commit that referenced this pull request Jun 12, 2026
…orkflow/observability (#2375) (#2379)
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pranaygp added a commit that referenced this pull request Jun 12, 2026
…ry-2
* origin/main:
Version Packages (beta) (#2364)
Animate in-progress segments in the timeline (#2383)
Render queued span time as a lead-in connector on the trace timeline. (#2381)
fix(docs): right-align sidebar folder carets consistently (#2377)
[core] Add wire-level framing for byte streams (#1853)
docs: move World SDK and getWorld under workflow/runtime, split out workflow/observability (#2375)
Replace hook.hasConflict with hook.getConflict() returning the conflicting Run (#2373)
ci: use claude-fable-5 for backport AI model (#2370)
Add `hook.hasConflict` for early hook conflict detection (#2015)
[core] V2: unify wait+step queue dispatch in suspension processing (#1925)
fix(world-local,world-postgres): make duplicate hook_created idempotent (#2295)
docs(observability): remove MVP implementation detail bullet (#2367)
fix: settle aborted parallel steps before completing abortParallelWorkflow (#2244)
Sign up for freeto 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.

3 participants

@pranaygp@karthikscale3