Skip to content

Add TSDoc for stepName field and document world.steps API#1451

Merged
pranaygp merged 2 commits into
mainfrom
v0/pranaygp-step-name-docs-2401
Mar 19, 2026
Merged

Add TSDoc for stepName field and document world.steps API#1451
pranaygp merged 2 commits into
mainfrom
v0/pranaygp-step-name-docs-2401

Conversation

@pranaygp
Copy link
Copy Markdown
Contributor

The stepName field from PR #1285 was already wired through to the Step entity schema returned by getWorld(), but it lacked documentation.

What changed

  • Added TSDoc comment to stepName field in packages/world/src/steps.ts explaining it's the human-readable step function name useful for progress UIs
  • Added two new examples to the getWorld() docs showing how to list steps and get a single step, demonstrating usage of step.stepName for building progress tracking UIs

This addresses Lucas's feedback about needing to hardcode step-index-to-label mappings - the stepName field is now clearly documented as the way to get human-readable step names.

Slack Thread

@pranaygp pranaygp requested a review from a team as a code owner March 19, 2026 17:24
Copilot AI review requested due to automatic review settings March 19, 2026 17:24
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Mar 19, 2026

⚠️ No Changeset found

Latest commit: 73c5a04

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 vercel Bot added the v0 label Mar 19, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 19, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 758 0 67 825
✅ 💻 Local Development 782 0 118 900
✅ 📦 Local Production 782 0 118 900
✅ 🐘 Local Postgres 782 0 118 900
✅ 🪟 Windows 72 0 3 75
❌ 🌍 Community Worlds 118 56 15 189
✅ 📋 Other 198 0 27 225
Total 3492 56 466 4014

❌ Failed Tests

🌍 Community Worlds (56 failed)

mongodb (3 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KM3JZ926D6MZH2AEXQ02MB0S
  • webhookWorkflow | wrun_01KM3JZGRABX60QTP7Q4AJK3T8
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KM3K4Q8BMN2R062S8DVQNN4J

redis (2 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KM3JZ926D6MZH2AEXQ02MB0S
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KM3K4Q8BMN2R062S8DVQNN4J

turso (51 failed):

  • addTenWorkflow | wrun_01KM3JY2CE7E3D9N5HPR81YE2W
  • addTenWorkflow | wrun_01KM3JY2CE7E3D9N5HPR81YE2W
  • wellKnownAgentWorkflow (.well-known/agent) | wrun_01KM3JZ6JANY4ARGQCH1SXJD4X
  • should work with react rendering in step
  • promiseAllWorkflow | wrun_01KM3JY95PBNZX2BTRFER51YCD
  • promiseRaceWorkflow | wrun_01KM3JYFXCAG43XDW56G7B2ZTP
  • promiseAnyWorkflow | wrun_01KM3JYJ1K0Z2VFG7YV079SPCZ
  • importedStepOnlyWorkflow | wrun_01KM3JZHDFM7K500504V3KM1F2
  • hookWorkflow | wrun_01KM3JYYHMYR0SHTK4TSVGEC3Q
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KM3JZ926D6MZH2AEXQ02MB0S
  • webhookWorkflow | wrun_01KM3JZGRABX60QTP7Q4AJK3T8
  • sleepingWorkflow | wrun_01KM3JZQA4MWK997N2VCEJYHBH
  • parallelSleepWorkflow | wrun_01KM3K02SQY7C5Z8RYHPY738TA
  • nullByteWorkflow | wrun_01KM3K063HNSYZ1REVYFZE95RY
  • workflowAndStepMetadataWorkflow | wrun_01KM3K08717EPR0MXFZM0K3WXH
  • fetchWorkflow | wrun_01KM3K1591RYV77B9B5Z9CFZR3
  • promiseRaceStressTestWorkflow | wrun_01KM3K18MM178V9FKWKYE204MG
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KM3K4311FKM8981ZHP84YQ6H
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KM3K4Q8BMN2R062S8DVQNN4J
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KM3K5C4D4H23HCV7R5N4S6SV
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KM3K60T0M1F7W1H19KN8NW6M
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KM3K69KBNWVYAZ1YRM5HVF1N
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KM3K6F81EHKS0887K2ETY8EC
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KM3K6HGXP991ZMPFGKP2XTFF
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KM3K70V61DZ03SK9P38X23DS
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KM3K76FV2KTD8AGMPG9Q2367
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KM3K7D33Q889Q3ZR3ADFT2F9
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KM3K7KR4YDWZ4GAQPCS2AEEQ
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KM3K7SMYX0KN7761K4WA4RER
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KM3K80AT1PEVAYHDFJ42TY74
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KM3K86WP7RVDN36D7SESZ9MN
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KM3K8HMVCDJDDXTHAW5QV6KG
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KM3K8SSDRXZWSRW2AKGW75SN
  • cancelRun - cancelling a running workflow | wrun_01KM3K90NSPK5YJ0F2NSE0B03Y
  • cancelRun via CLI - cancelling a running workflow | wrun_01KM3K99YZ8Z02YS20FYDFW5WB
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KM3K9NZ1V89P36E23K98EDCD
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KM3KAADA9XG6YKZXKKYFSGJN
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KM3KAP1FYW8NF4SHXYTQ1HDW

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 68 0 7
✅ example 68 0 7
✅ express 68 0 7
✅ fastify 68 0 7
✅ hono 68 0 7
✅ nextjs-turbopack 73 0 2
✅ nextjs-webpack 73 0 2
✅ nitro 68 0 7
✅ nuxt 68 0 7
✅ sveltekit 68 0 7
✅ vite 68 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 66 0 9
✅ express-stable 66 0 9
✅ fastify-stable 66 0 9
✅ hono-stable 66 0 9
✅ nextjs-turbopack-canary 55 0 20
✅ nextjs-turbopack-stable 72 0 3
✅ nextjs-webpack-canary 55 0 20
✅ nextjs-webpack-stable 72 0 3
✅ nitro-stable 66 0 9
✅ nuxt-stable 66 0 9
✅ sveltekit-stable 66 0 9
✅ vite-stable 66 0 9
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 66 0 9
✅ express-stable 66 0 9
✅ fastify-stable 66 0 9
✅ hono-stable 66 0 9
✅ nextjs-turbopack-canary 55 0 20
✅ nextjs-turbopack-stable 72 0 3
✅ nextjs-webpack-canary 55 0 20
✅ nextjs-webpack-stable 72 0 3
✅ nitro-stable 66 0 9
✅ nuxt-stable 66 0 9
✅ sveltekit-stable 66 0 9
✅ vite-stable 66 0 9
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 66 0 9
✅ express-stable 66 0 9
✅ fastify-stable 66 0 9
✅ hono-stable 66 0 9
✅ nextjs-turbopack-canary 55 0 20
✅ nextjs-turbopack-stable 72 0 3
✅ nextjs-webpack-canary 55 0 20
✅ nextjs-webpack-stable 72 0 3
✅ nitro-stable 66 0 9
✅ nuxt-stable 66 0 9
✅ sveltekit-stable 66 0 9
✅ vite-stable 66 0 9
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 72 0 3
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 3 0 2
❌ mongodb 52 3 3
✅ redis-dev 3 0 2
❌ redis 53 2 3
✅ turso-dev 3 0 2
❌ turso 4 51 3
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 66 0 9
✅ e2e-local-postgres-nest-stable 66 0 9
✅ e2e-local-prod-nest-stable 66 0 9

📋 View full workflow run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 19, 2026

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.043s (+9.6% 🔺) 1.005s (~) 0.962s 10 1.00x
💻 Local Nitro 0.044s (+1.6%) 1.006s (~) 0.962s 10 1.01x
💻 Local Next.js (Turbopack) 0.048s 1.006s 0.957s 10 1.11x
🌐 Redis Next.js (Turbopack) 0.056s (-1.9%) 1.007s (~) 0.951s 10 1.29x
🐘 Postgres Nitro 0.058s (-8.5% 🟢) 1.013s (~) 0.954s 10 1.34x
🐘 Postgres Next.js (Turbopack) 0.060s 1.011s 0.951s 10 1.38x
🐘 Postgres Express 0.067s (+8.1% 🔺) 1.012s (~) 0.945s 10 1.54x
🌐 MongoDB Next.js (Turbopack) 0.099s 1.008s 0.909s 10 2.29x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.406s (-11.8% 🟢) 2.114s (~) 1.708s 10 1.00x
▲ Vercel Express 0.432s (-21.4% 🟢) 2.197s (-5.4% 🟢) 1.765s 10 1.06x
▲ Vercel Next.js (Turbopack) 0.494s (-33.0% 🟢) 2.406s (-11.8% 🟢) 1.912s 10 1.22x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 1.121s 2.006s 0.885s 10 1.00x
🌐 Redis Next.js (Turbopack) 1.123s (~) 2.007s (~) 0.883s 10 1.00x
💻 Local Express 1.127s (+2.5%) 2.005s (~) 0.879s 10 1.01x
💻 Local Nitro 1.132s (~) 2.005s (~) 0.873s 10 1.01x
🐘 Postgres Next.js (Turbopack) 1.133s 2.012s 0.879s 10 1.01x
🐘 Postgres Express 1.147s (~) 2.012s (~) 0.865s 10 1.02x
🐘 Postgres Nitro 1.157s (~) 2.016s (~) 0.860s 10 1.03x
🌐 MongoDB Next.js (Turbopack) 1.322s 2.008s 0.686s 10 1.18x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.014s (-4.6%) 3.510s (-4.6%) 1.496s 10 1.00x
▲ Vercel Next.js (Turbopack) 2.175s (+1.1%) 3.551s (-6.2% 🟢) 1.375s 10 1.08x
▲ Vercel Nitro 2.198s (+7.1% 🔺) 3.410s (+6.0% 🔺) 1.212s 10 1.09x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 10.781s 11.023s 0.241s 3 1.00x
🌐 Redis Next.js (Turbopack) 10.814s (~) 11.024s (~) 0.210s 3 1.00x
🐘 Postgres Next.js (Turbopack) 10.899s 11.043s 0.144s 3 1.01x
💻 Local Nitro 10.907s (~) 11.023s (~) 0.116s 3 1.01x
💻 Local Express 10.917s (+2.5%) 11.023s (~) 0.106s 3 1.01x
🐘 Postgres Express 10.951s (~) 11.049s (~) 0.098s 3 1.02x
🐘 Postgres Nitro 10.957s (~) 11.045s (~) 0.088s 3 1.02x
🌐 MongoDB Next.js (Turbopack) 12.277s 13.024s 0.748s 3 1.14x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 16.700s (-3.4%) 18.604s (-0.9%) 1.905s 2 1.00x
▲ Vercel Nitro 16.976s (-3.9%) 17.901s (-3.3%) 0.925s 2 1.02x
▲ Vercel Next.js (Turbopack) 17.119s (+0.8%) 19.089s (+2.0%) 1.970s 2 1.03x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 26.839s (~) 27.053s (~) 0.214s 3 1.00x
🐘 Postgres Next.js (Turbopack) 26.993s 27.389s 0.396s 3 1.01x
💻 Local Next.js (Turbopack) 27.193s 28.053s 0.860s 3 1.01x
🐘 Postgres Express 27.280s (~) 28.063s (~) 0.783s 3 1.02x
🐘 Postgres Nitro 27.301s (~) 28.066s (~) 0.765s 3 1.02x
💻 Local Nitro 27.450s (~) 28.052s (~) 0.602s 3 1.02x
💻 Local Express 27.519s (+2.6%) 28.051s (+3.7%) 0.532s 3 1.03x
🌐 MongoDB Next.js (Turbopack) 30.564s 31.044s 0.481s 2 1.14x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 42.927s (-4.2%) 44.454s (-3.9%) 1.527s 2 1.00x
▲ Vercel Nitro 44.853s (~) 46.137s (~) 1.283s 2 1.04x
▲ Vercel Next.js (Turbopack) 45.536s (+1.2%) 47.191s (~) 1.655s 2 1.06x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 53.642s (~) 54.101s (~) 0.459s 2 1.00x
🐘 Postgres Next.js (Turbopack) 54.146s 55.098s 0.952s 2 1.01x
🐘 Postgres Express 54.264s (~) 55.093s (~) 0.829s 2 1.01x
🐘 Postgres Nitro 54.571s (+0.5%) 55.108s (~) 0.537s 2 1.02x
💻 Local Next.js (Turbopack) 55.880s 56.103s 0.223s 2 1.04x
💻 Local Nitro 56.495s (~) 57.103s (~) 0.608s 2 1.05x
💻 Local Express 56.633s (+3.0%) 57.100s (+3.6%) 0.467s 2 1.06x
🌐 MongoDB Next.js (Turbopack) 60.883s 61.073s 0.189s 2 1.13x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 95.019s (~) 97.079s (~) 2.060s 1 1.00x
▲ Vercel Express 96.067s (~) 97.091s (~) 1.024s 1 1.01x
▲ Vercel Nitro 96.358s (-7.5% 🟢) 98.064s (-6.8% 🟢) 1.706s 1 1.01x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.268s 2.010s 0.742s 15 1.00x
🐘 Postgres Express 1.280s (~) 2.010s (~) 0.730s 15 1.01x
🐘 Postgres Nitro 1.284s (~) 2.011s (~) 0.727s 15 1.01x
🌐 Redis Next.js (Turbopack) 1.362s (-0.9%) 2.007s (~) 0.645s 15 1.07x
💻 Local Nitro 1.505s (-1.3%) 2.006s (~) 0.500s 15 1.19x
💻 Local Express 1.523s (+4.6%) 2.005s (~) 0.481s 15 1.20x
💻 Local Next.js (Turbopack) 1.545s 2.006s 0.462s 15 1.22x
🌐 MongoDB Next.js (Turbopack) 2.172s 3.009s 0.836s 10 1.71x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.311s (-4.9%) 3.627s (+8.4% 🔺) 1.316s 9 1.00x
▲ Vercel Next.js (Turbopack) 2.597s (+6.2% 🔺) 3.827s (-4.4%) 1.230s 8 1.12x
▲ Vercel Express 2.981s (+24.4% 🔺) 4.422s (+17.5% 🔺) 1.441s 7 1.29x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.440s (-0.6%) 3.013s (~) 0.572s 10 1.00x
🐘 Postgres Nitro 2.441s (-0.9%) 3.013s (~) 0.572s 10 1.00x
🐘 Postgres Next.js (Turbopack) 2.452s 3.011s 0.559s 10 1.00x
🌐 Redis Next.js (Turbopack) 2.611s (+1.5%) 3.008s (~) 0.398s 10 1.07x
💻 Local Next.js (Turbopack) 2.799s 3.108s 0.309s 10 1.15x
💻 Local Express 2.843s (+9.3% 🔺) 3.108s (+3.3%) 0.265s 10 1.16x
💻 Local Nitro 2.875s (~) 3.208s (+6.7% 🔺) 0.333s 10 1.18x
🌐 MongoDB Next.js (Turbopack) 4.736s 5.178s 0.442s 6 1.94x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.763s (+16.0% 🔺) 4.036s (+4.1%) 1.273s 8 1.00x
▲ Vercel Next.js (Turbopack) 2.808s (+11.2% 🔺) 4.340s (+8.2% 🔺) 1.531s 7 1.02x
▲ Vercel Nitro 3.286s (+22.3% 🔺) 4.484s (+23.6% 🔺) 1.199s 7 1.19x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 3.615s (~) 4.014s (~) 0.398s 8 1.00x
🐘 Postgres Express 3.637s (+1.0%) 4.014s (~) 0.377s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.753s 4.014s 0.261s 8 1.04x
🌐 Redis Next.js (Turbopack) 4.142s (+0.7%) 5.013s (+2.9%) 0.871s 6 1.15x
💻 Local Next.js (Turbopack) 6.797s 7.514s 0.717s 4 1.88x
💻 Local Nitro 7.740s (-4.4%) 8.019s (-11.1% 🟢) 0.280s 4 2.14x
💻 Local Express 8.142s (+19.9% 🔺) 9.023s (+28.6% 🔺) 0.881s 4 2.25x
🌐 MongoDB Next.js (Turbopack) 10.009s 10.685s 0.676s 3 2.77x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.091s (+14.2% 🔺) 4.327s (+11.0% 🔺) 1.236s 7 1.00x
▲ Vercel Express 3.246s (-37.7% 🟢) 4.767s (-28.8% 🟢) 1.521s 7 1.05x
▲ Vercel Next.js (Turbopack) 3.632s (+17.7% 🔺) 5.003s (+6.7% 🔺) 1.371s 6 1.18x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.233s 2.010s 0.778s 15 1.00x
🐘 Postgres Express 1.265s (-0.8%) 2.011s (~) 0.745s 15 1.03x
🐘 Postgres Nitro 1.284s (+0.9%) 2.012s (~) 0.727s 15 1.04x
🌐 Redis Next.js (Turbopack) 1.313s (~) 2.006s (~) 0.693s 15 1.07x
💻 Local Nitro 1.519s (-1.0%) 2.005s (~) 0.486s 15 1.23x
💻 Local Express 1.539s (+5.2% 🔺) 2.005s (~) 0.466s 15 1.25x
💻 Local Next.js (Turbopack) 1.539s 2.006s 0.467s 15 1.25x
🌐 MongoDB Next.js (Turbopack) 2.202s 3.008s 0.807s 10 1.79x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.214s (-2.7%) 3.570s (-5.8% 🟢) 1.356s 9 1.00x
▲ Vercel Nitro 2.294s (-14.9% 🟢) 3.482s (-12.3% 🟢) 1.189s 9 1.04x
▲ Vercel Next.js (Turbopack) 2.406s (+3.3%) 3.637s (-4.2%) 1.231s 9 1.09x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 2.447s 3.012s 0.564s 10 1.00x
🐘 Postgres Nitro 2.464s (+0.7%) 3.012s (~) 0.548s 10 1.01x
🐘 Postgres Express 2.465s (~) 3.011s (~) 0.546s 10 1.01x
🌐 Redis Next.js (Turbopack) 2.577s (+1.0%) 3.009s (~) 0.432s 10 1.05x
💻 Local Next.js (Turbopack) 2.829s 3.008s 0.179s 10 1.16x
💻 Local Nitro 2.874s (-3.3%) 3.107s (-10.0% 🟢) 0.234s 10 1.17x
💻 Local Express 3.039s (+9.7% 🔺) 3.679s (+18.4% 🔺) 0.640s 9 1.24x
🌐 MongoDB Next.js (Turbopack) 4.767s 5.177s 0.410s 6 1.95x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.543s (+10.1% 🔺) 3.810s (+4.0%) 1.267s 8 1.00x
▲ Vercel Nitro 2.731s (+6.6% 🔺) 3.984s (+10.1% 🔺) 1.253s 8 1.07x
▲ Vercel Next.js (Turbopack) 2.880s (-2.5%) 4.043s (-6.6% 🟢) 1.163s 8 1.13x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 3.599s (~) 4.015s (~) 0.416s 8 1.00x
🐘 Postgres Express 3.606s (~) 4.014s (~) 0.408s 8 1.00x
🐘 Postgres Next.js (Turbopack) 3.729s 4.012s 0.284s 8 1.04x
🌐 Redis Next.js (Turbopack) 4.157s (~) 5.012s (+2.9%) 0.855s 6 1.16x
💻 Local Next.js (Turbopack) 7.904s 8.517s 0.614s 4 2.20x
💻 Local Nitro 8.328s (-2.8%) 9.022s (~) 0.694s 4 2.31x
💻 Local Express 8.808s (+21.5% 🔺) 9.273s (+19.4% 🔺) 0.465s 4 2.45x
🌐 MongoDB Next.js (Turbopack) 10.139s 10.684s 0.545s 3 2.82x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.010s (-18.2% 🟢) 4.550s (-6.8% 🟢) 1.540s 7 1.00x
▲ Vercel Next.js (Turbopack) 3.443s (+7.0% 🔺) 4.905s (+6.1% 🔺) 1.462s 7 1.14x
▲ Vercel Express 3.451s (+30.5% 🔺) 4.802s (+27.6% 🔺) 1.352s 7 1.15x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 0.172s 1.001s 0.012s 1.017s 0.845s 10 1.00x
💻 Local Nitro 0.196s (~) 1.003s (~) 0.011s (-3.4%) 1.017s (~) 0.821s 10 1.13x
💻 Local Express 0.200s (+44.4% 🔺) 1.003s (~) 0.011s (+4.8%) 1.017s (~) 0.817s 10 1.16x
🐘 Postgres Next.js (Turbopack) 0.204s 1.001s 0.002s 1.013s 0.808s 10 1.18x
🐘 Postgres Express 0.216s (-2.2%) 0.995s (~) 0.001s (-12.5% 🟢) 1.012s (~) 0.796s 10 1.25x
🌐 Redis Next.js (Turbopack) 0.230s (+26.4% 🔺) 1.000s (~) 0.002s (-11.8% 🟢) 1.008s (~) 0.778s 10 1.33x
🐘 Postgres Nitro 0.236s (+8.2% 🔺) 0.995s (~) 0.001s (-40.0% 🟢) 1.013s (~) 0.777s 10 1.37x
🌐 MongoDB Next.js (Turbopack) 0.504s 0.947s 0.001s 1.009s 0.505s 10 2.93x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.557s (-4.0%) 2.330s (-3.1%) 0.007s (+38.9% 🔺) 2.791s (-81.3% 🟢) 1.234s 10 1.00x
▲ Vercel Express 1.688s (+4.2%) 2.799s (+0.8%) 0.009s (+111.1% 🔺) 3.364s (+0.9%) 1.676s 10 1.08x
▲ Vercel Next.js (Turbopack) 1.715s (+6.7% 🔺) 2.719s (+6.3% 🔺) 0.004s (-79.9% 🟢) 3.270s (+4.6%) 1.555s 10 1.10x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Next.js (Turbopack) 9/12
🐘 Postgres Next.js (Turbopack) 8/12
▲ Vercel Express 6/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 6/12
Next.js (Turbopack) 💻 Local 4/12
Nitro 🐘 Postgres 6/12
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR improves developer-facing documentation around the stepName field and the world.steps API surfaced via getWorld(), to make it easier to build progress UIs without hardcoding step labels.

Changes:

  • Added TSDoc for stepName on the Step schema in @workflow/world.
  • Added getWorld() documentation examples for listing steps and fetching a single step, highlighting step.stepName.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
packages/world/src/steps.ts Adds TSDoc explaining the intent of stepName on the Step schema.
docs/content/docs/api-reference/workflow-api/get-world.mdx Adds examples demonstrating world.steps.list and world.steps.get, including stepName usage.

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

You can also share your feedback on Copilot code review. Take the survey.

Comment thread packages/world/src/steps.ts Outdated
Comment thread docs/content/docs/api-reference/workflow-api/get-world.mdx Outdated
Comment thread docs/content/docs/api-reference/workflow-api/get-world.mdx Outdated
…eStepName/parseWorkflowName utilities

- Split step examples into two: one with resolveData: 'none' for efficient listing without data, and one showing how to hydrate input/output with observabilityRevivers
- Add TSDoc to stepName and workflowName fields explaining the machine-readable format and how to use parse utilities
- Document parseStepName() and parseWorkflowName() from @workflow/utils/parse-name for extracting shortName and moduleSpecifier for UI display
- Add Callout explaining the naming format
Comment on lines +149 to +152
import { // [!code highlight]
hydrateResourceIO, // [!code highlight]
observabilityRevivers, // [!code highlight]
} from "@workflow/core/serialization-format"; // [!code highlight]
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@karthikscale3 this i why we need to just hydrate it automatically in the world I think instead of asking people to import these

or at the lease, we should re-export these from a more user friendly place (probably @workflow/world or workflow/api) and rename + document them so they're much friendlier to use

happy to ship this for now so it's at least useful for for people and agents to have a way to query this data and we can ITG on the workflow observability APIs

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.

yea agreed! I will take a stab at this and also will do a general audit of the entire CLI.

@pranaygp pranaygp merged commit f7bbe71 into main Mar 19, 2026
105 checks passed
@pranaygp pranaygp deleted the v0/pranaygp-step-name-docs-2401 branch March 19, 2026 17:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants