Skip to content

feat(nitro): add /_workflow web ui during dev#2110

Open
RihanArfan wants to merge 1 commit into
mainfrom
feat/nitro-web-ui
Open

feat(nitro): add /_workflow web ui during dev#2110
RihanArfan wants to merge 1 commit into
mainfrom
feat/nitro-web-ui

Conversation

@RihanArfan
Copy link
Copy Markdown
Member

Adds route /_workflow during development which starts the web UI and redirects to it

localhost_49669_

@RihanArfan RihanArfan requested a review from a team as a code owner May 26, 2026 14:23
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 26, 2026

🦋 Changeset detected

Latest commit: 0ce7ffc

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

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

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

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

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment May 26, 2026 2:24pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment May 26, 2026 2:24pm
example-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-astro-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-express-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-fastify-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-hono-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-nitro-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-nuxt-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-sveltekit-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-tanstack-start-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workbench-vite-workflow Ready Ready Preview, Comment May 26, 2026 2:24pm
workflow-swc-playground Ready Ready Preview, Comment May 26, 2026 2:24pm
workflow-tarballs Ready Ready Preview, Comment May 26, 2026 2:24pm
workflow-web Ready Ready Preview, Comment May 26, 2026 2:24pm

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 26, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 1221 1 219 1441
✅ 💻 Local Development 1615 0 219 1834
✅ 📦 Local Production 1615 0 219 1834
✅ 🐘 Local Postgres 1615 0 219 1834
✅ 🪟 Windows 131 0 0 131
✅ 📋 Other 741 0 176 917
Total 6938 1 1052 7991

❌ Failed Tests

▲ Vercel Production (1 failed)

fastify (1 failed):

  • AbortController abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals

Details by Category

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

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 26, 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 🥇 Nitro 0.030s (-31.1% 🟢) 1.005s (~) 0.976s 10 1.00x
💻 Local Express 0.031s (-30.0% 🟢) 1.005s (~) 0.974s 10 1.04x
🐘 Postgres Express 0.044s (-23.3% 🟢) 1.011s (~) 0.967s 10 1.50x
🐘 Postgres Nitro 0.046s (-51.5% 🟢) 1.012s (-2.9%) 0.966s 10 1.56x
💻 Local Next.js (Turbopack) 0.048s 1.006s 0.957s 10 1.63x
🐘 Postgres Next.js (Turbopack) 0.059s 1.012s 0.953s 10 1.99x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.239s (-41.6% 🟢) 1.948s (-22.4% 🟢) 1.708s 10 1.00x
▲ Vercel Next.js (Turbopack) 0.327s (+30.0% 🔺) 2.364s (+1.3%) 2.037s 10 1.37x
▲ Vercel Express 0.342s (+45.4% 🔺) 2.159s (+1.1%) 1.816s 10 1.43x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.066s (-5.7% 🟢) 2.006s (~) 0.940s 10 1.00x
💻 Local Express 1.072s (-4.7%) 2.006s (~) 0.934s 10 1.01x
🐘 Postgres Express 1.079s (-5.9% 🟢) 2.010s (~) 0.931s 10 1.01x
🐘 Postgres Nitro 1.087s (-4.6%) 2.012s (~) 0.924s 10 1.02x
💻 Local Next.js (Turbopack) 1.109s 2.006s 0.898s 10 1.04x
🐘 Postgres Next.js (Turbopack) 1.121s 2.009s 0.888s 10 1.05x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.587s (-22.0% 🟢) 3.734s (-2.5%) 2.147s 10 1.00x
▲ Vercel Express 1.598s (-14.8% 🟢) 3.818s (~) 2.220s 10 1.01x
▲ Vercel Nitro 1.726s (-55.7% 🟢) 3.723s (-37.0% 🟢) 1.997s 10 1.09x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 10.395s (-5.2% 🟢) 11.013s (~) 0.618s 3 1.00x
💻 Local Nitro 10.395s (-5.0% 🟢) 11.022s (~) 0.627s 3 1.00x
💻 Local Express 10.437s (-4.4%) 11.023s (~) 0.586s 3 1.00x
🐘 Postgres Nitro 10.457s (-3.8%) 11.018s (~) 0.561s 3 1.01x
💻 Local Next.js (Turbopack) 10.671s 11.021s 0.351s 3 1.03x
🐘 Postgres Next.js (Turbopack) 10.778s 11.022s 0.244s 3 1.04x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 13.203s (-22.2% 🟢) 15.068s (-24.7% 🟢) 1.865s 2 1.00x
▲ Vercel Next.js (Turbopack) 13.337s (-23.0% 🟢) 15.744s (-18.8% 🟢) 2.407s 2 1.01x
▲ Vercel Nitro 13.662s (-42.4% 🟢) 15.046s (-40.1% 🟢) 1.385s 2 1.03x

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

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 13.428s (-7.9% 🟢) 14.017s (-6.7% 🟢) 0.589s 5 1.00x
💻 Local Express 13.479s (-10.0% 🟢) 14.027s (-6.7% 🟢) 0.548s 5 1.00x
💻 Local Nitro 13.491s (-10.4% 🟢) 14.027s (-12.5% 🟢) 0.536s 5 1.00x
🐘 Postgres Nitro 13.514s (-7.4% 🟢) 14.018s (-6.7% 🟢) 0.504s 5 1.01x
💻 Local Next.js (Turbopack) 14.056s 14.828s 0.772s 5 1.05x
🐘 Postgres Next.js (Turbopack) 14.176s 15.023s 0.847s 4 1.06x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 21.733s (-56.8% 🟢) 23.628s (-55.0% 🟢) 1.895s 3 1.00x
▲ Vercel Next.js (Turbopack) 22.097s (-58.0% 🟢) 23.750s (-56.5% 🟢) 1.653s 3 1.02x
▲ Vercel Nitro 22.943s (-64.4% 🟢) 25.029s (-62.4% 🟢) 2.086s 3 1.06x

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

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 11.899s (-29.1% 🟢) 12.022s (-29.4% 🟢) 0.123s 8 1.00x
🐘 Postgres Express 11.939s (-14.8% 🟢) 12.265s (-16.0% 🟢) 0.326s 8 1.00x
💻 Local Express 11.969s (-27.9% 🟢) 12.398s (-27.2% 🟢) 0.430s 8 1.01x
🐘 Postgres Nitro 12.043s (-13.8% 🟢) 12.520s (-12.5% 🟢) 0.477s 8 1.01x
💻 Local Next.js (Turbopack) 13.170s 14.026s 0.856s 7 1.11x
🐘 Postgres Next.js (Turbopack) 13.327s 14.018s 0.690s 7 1.12x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 29.055s (-93.1% 🟢) 30.713s (-92.8% 🟢) 1.658s 3 1.00x
▲ Vercel Express 30.605s (-74.8% 🟢) 32.770s (-73.5% 🟢) 2.166s 3 1.05x
▲ Vercel Next.js (Turbopack) 31.329s (-92.0% 🟢) 33.360s (-91.6% 🟢) 2.031s 3 1.08x

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

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.141s (-9.5% 🟢) 2.008s (~) 0.867s 15 1.00x
🐘 Postgres Nitro 1.147s (-10.0% 🟢) 2.008s (~) 0.861s 15 1.01x
💻 Local Nitro 1.169s (-28.4% 🟢) 2.006s (-3.3%) 0.837s 15 1.02x
💻 Local Express 1.175s (-21.1% 🟢) 2.006s (~) 0.830s 15 1.03x
🐘 Postgres Next.js (Turbopack) 1.233s 2.008s 0.774s 15 1.08x
💻 Local Next.js (Turbopack) 1.310s 2.006s 0.696s 15 1.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.592s (-9.4% 🟢) 4.129s (-10.7% 🟢) 1.537s 8 1.00x
▲ Vercel Next.js (Turbopack) 2.620s (-22.9% 🟢) 4.367s (-11.5% 🟢) 1.747s 7 1.01x
▲ Vercel Nitro 2.974s (+5.5% 🔺) 4.628s (+7.1% 🔺) 1.654s 7 1.15x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.190s (-49.6% 🟢) 2.007s (-33.3% 🟢) 0.817s 15 1.00x
🐘 Postgres Nitro 1.206s (-48.7% 🟢) 2.008s (-33.3% 🟢) 0.802s 15 1.01x
🐘 Postgres Next.js (Turbopack) 1.365s 2.008s 0.643s 15 1.15x
💻 Local Nitro 1.699s (-46.0% 🟢) 2.006s (-48.4% 🟢) 0.307s 15 1.43x
💻 Local Next.js (Turbopack) 1.728s 2.140s 0.412s 15 1.45x
💻 Local Express 1.795s (-39.2% 🟢) 2.073s (-40.0% 🟢) 0.279s 15 1.51x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.546s (-12.5% 🟢) 4.939s (-16.6% 🟢) 1.393s 7 1.00x
▲ Vercel Next.js (Turbopack) 3.725s (-47.5% 🟢) 5.324s (-40.2% 🟢) 1.599s 6 1.05x
▲ Vercel Express 4.591s (+26.8% 🔺) 6.331s (+23.9% 🔺) 1.740s 5 1.29x

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

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.298s (-62.8% 🟢) 2.008s (-49.9% 🟢) 0.710s 15 1.00x
🐘 Postgres Nitro 1.369s (-60.7% 🟢) 2.009s (-49.9% 🟢) 0.640s 15 1.05x
🐘 Postgres Next.js (Turbopack) 1.670s 2.008s 0.338s 15 1.29x
💻 Local Next.js (Turbopack) 4.492s 5.179s 0.688s 6 3.46x
💻 Local Express 4.690s (-43.8% 🟢) 5.346s (-40.8% 🟢) 0.656s 6 3.61x
💻 Local Nitro 4.830s (-42.2% 🟢) 5.511s (-38.9% 🟢) 0.682s 6 3.72x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 6.302s (+78.8% 🔺) 7.537s (+36.2% 🔺) 1.235s 4 1.00x
▲ Vercel Express 6.762s (+59.5% 🔺) 8.862s (+44.6% 🔺) 2.101s 4 1.07x
▲ Vercel Next.js (Turbopack) 7.104s (-20.3% 🟢) 9.155s (-16.5% 🟢) 2.051s 4 1.13x

🔍 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 🥇 Nitro 1.148s (-8.7% 🟢) 2.009s (~) 0.861s 15 1.00x
🐘 Postgres Express 1.150s (-8.5% 🟢) 2.008s (~) 0.858s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.209s 2.007s 0.798s 15 1.05x
💻 Local Next.js (Turbopack) 1.285s 2.006s 0.721s 15 1.12x
💻 Local Nitro 1.383s (-25.9% 🟢) 2.007s (-14.3% 🟢) 0.624s 15 1.20x
💻 Local Express 1.451s (-23.4% 🟢) 2.006s (-15.1% 🟢) 0.556s 15 1.26x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.563s (-0.7%) 4.176s (-4.0%) 1.613s 8 1.00x
▲ Vercel Nitro 2.678s (+8.9% 🔺) 3.983s (-4.5%) 1.305s 8 1.05x
▲ Vercel Next.js (Turbopack) 2.756s (-6.0% 🟢) 4.388s (-5.5% 🟢) 1.632s 7 1.08x

🔍 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 🥇 Express 1.196s (-48.9% 🟢) 2.010s (-33.3% 🟢) 0.814s 15 1.00x
🐘 Postgres Nitro 1.222s (-47.7% 🟢) 2.010s (-33.2% 🟢) 0.788s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.378s 2.010s 0.632s 15 1.15x
💻 Local Express 1.942s (-38.0% 🟢) 2.393s (-36.4% 🟢) 0.451s 13 1.62x
💻 Local Next.js (Turbopack) 2.000s 2.735s 0.735s 11 1.67x
💻 Local Nitro 2.030s (-33.8% 🟢) 2.508s (-35.5% 🟢) 0.478s 12 1.70x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.630s (+12.3% 🔺) 5.030s (-0.9%) 1.400s 6 1.00x
▲ Vercel Express 3.761s (+17.8% 🔺) 5.598s (+16.8% 🔺) 1.837s 6 1.04x
▲ Vercel Next.js (Turbopack) 4.144s (+31.9% 🔺) 5.762s (+27.4% 🔺) 1.618s 6 1.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.302s (-62.8% 🟢) 2.007s (-50.0% 🟢) 0.705s 15 1.00x
🐘 Postgres Nitro 1.337s (-61.6% 🟢) 2.008s (-49.9% 🟢) 0.672s 15 1.03x
🐘 Postgres Next.js (Turbopack) 1.649s 2.009s 0.360s 15 1.27x
💻 Local Nitro 5.437s (-40.5% 🟢) 6.012s (-40.0% 🟢) 0.575s 5 4.17x
💻 Local Next.js (Turbopack) 5.524s 5.680s 0.156s 6 4.24x
💻 Local Express 6.274s (-28.7% 🟢) 6.816s (-26.5% 🟢) 0.542s 5 4.82x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.391s (+5.9% 🔺) 7.313s (+7.3% 🔺) 1.921s 5 1.00x
▲ Vercel Express 5.547s (-13.6% 🟢) 7.272s (-11.1% 🟢) 1.725s 5 1.03x
▲ Vercel Next.js (Turbopack) 6.130s (-9.3% 🟢) 7.973s (-6.7% 🟢) 1.843s 4 1.14x

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

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.447s (-46.7% 🟢) 1.006s (-1.6%) 0.559s 60 1.00x
💻 Local Nitro 0.464s (-52.6% 🟢) 1.004s (-8.2% 🟢) 0.540s 60 1.04x
🐘 Postgres Nitro 0.474s (-42.2% 🟢) 1.007s (~) 0.533s 60 1.06x
💻 Local Express 0.480s (-51.2% 🟢) 1.004s (-6.7% 🟢) 0.524s 60 1.07x
🐘 Postgres Next.js (Turbopack) 0.690s 1.006s 0.317s 60 1.54x
💻 Local Next.js (Turbopack) 0.743s 1.004s 0.261s 60 1.66x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.259s (-72.3% 🟢) 7.059s (-66.9% 🟢) 1.800s 9 1.00x
▲ Vercel Nitro 5.302s (-76.0% 🟢) 6.721s (-72.0% 🟢) 1.420s 10 1.01x
▲ Vercel Next.js (Turbopack) 5.485s (-62.2% 🟢) 7.218s (-55.1% 🟢) 1.733s 9 1.04x

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

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.019s (-48.4% 🟢) 1.391s (-38.4% 🟢) 0.372s 65 1.00x
🐘 Postgres Nitro 1.094s (-43.3% 🟢) 2.008s (-4.4%) 0.915s 45 1.07x
💻 Local Nitro 1.172s (-61.4% 🟢) 2.006s (-46.6% 🟢) 0.834s 45 1.15x
💻 Local Express 1.209s (-59.9% 🟢) 2.006s (-44.1% 🟢) 0.796s 45 1.19x
🐘 Postgres Next.js (Turbopack) 1.647s 2.009s 0.362s 45 1.62x
💻 Local Next.js (Turbopack) 1.824s 2.028s 0.204s 45 1.79x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 13.084s (-62.1% 🟢) 15.173s (-58.8% 🟢) 2.090s 6 1.00x
▲ Vercel Next.js (Turbopack) 13.280s (-73.3% 🟢) 15.176s (-70.7% 🟢) 1.897s 6 1.02x
▲ Vercel Nitro 13.367s (-66.1% 🟢) 14.944s (-63.8% 🟢) 1.577s 7 1.02x

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

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.024s (-49.3% 🟢) 2.407s (-44.9% 🟢) 0.383s 50 1.00x
🐘 Postgres Nitro 2.272s (-44.6% 🟢) 3.060s (-33.5% 🟢) 0.788s 40 1.12x
💻 Local Nitro 2.737s (-70.6% 🟢) 3.032s (-69.7% 🟢) 0.296s 40 1.35x
💻 Local Express 2.755s (-70.1% 🟢) 3.033s (-69.7% 🟢) 0.278s 40 1.36x
🐘 Postgres Next.js (Turbopack) 3.227s 4.009s 0.783s 30 1.59x
💻 Local Next.js (Turbopack) 3.836s 4.074s 0.239s 30 1.89x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 27.369s (-71.8% 🟢) 28.920s (-70.6% 🟢) 1.551s 5 1.00x
▲ Vercel Next.js (Turbopack) 29.099s (-72.8% 🟢) 31.373s (-71.2% 🟢) 2.275s 4 1.06x
▲ Vercel Express 29.099s (-77.6% 🟢) 31.182s (-76.4% 🟢) 2.083s 4 1.06x

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

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.166s (-41.4% 🟢) 1.006s (~) 0.840s 60 1.00x
🐘 Postgres Nitro 0.183s (-35.4% 🟢) 1.007s (~) 0.824s 60 1.11x
🐘 Postgres Next.js (Turbopack) 0.241s 1.006s 0.765s 60 1.46x
💻 Local Express 0.385s (-31.4% 🟢) 1.004s (~) 0.620s 60 2.32x
💻 Local Nitro 0.431s (-28.7% 🟢) 1.005s (-1.7%) 0.573s 60 2.60x
💻 Local Next.js (Turbopack) 0.532s 1.004s 0.472s 60 3.21x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.406s (+44.8% 🔺) 3.966s (+18.3% 🔺) 1.560s 16 1.00x
▲ Vercel Next.js (Turbopack) 2.538s (+25.5% 🔺) 4.287s (+13.0% 🔺) 1.749s 14 1.05x
▲ Vercel Express 3.079s (+57.6% 🔺) 4.790s (+31.7% 🔺) 1.711s 13 1.28x

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

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.285s (-44.0% 🟢) 1.006s (~) 0.720s 90 1.00x
🐘 Postgres Nitro 0.326s (-34.2% 🟢) 1.007s (~) 0.681s 90 1.14x
🐘 Postgres Next.js (Turbopack) 0.467s 1.006s 0.540s 90 1.63x
💻 Local Express 2.134s (-15.1% 🟢) 2.767s (-8.0% 🟢) 0.633s 33 7.48x
💻 Local Nitro 2.154s (-15.1% 🟢) 2.853s (-5.2% 🟢) 0.698s 32 7.55x
💻 Local Next.js (Turbopack) 2.170s 2.883s 0.714s 32 7.60x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.895s (+93.5% 🔺) 7.672s (+59.6% 🔺) 1.776s 12 1.00x
▲ Vercel Nitro 6.062s (+87.9% 🔺) 7.550s (+56.6% 🔺) 1.488s 12 1.03x
▲ Vercel Next.js (Turbopack) 6.774s (+91.6% 🔺) 8.444s (+62.6% 🔺) 1.670s 11 1.15x

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

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.591s (-27.8% 🟢) 1.006s (-1.1%) 0.415s 120 1.00x
🐘 Postgres Nitro 0.691s (-12.6% 🟢) 1.007s (~) 0.316s 120 1.17x
🐘 Postgres Next.js (Turbopack) 0.965s 1.403s 0.437s 86 1.63x
💻 Local Next.js (Turbopack) 10.067s 10.776s 0.709s 12 17.04x
💻 Local Nitro 10.136s (-9.4% 🟢) 10.610s (-9.0% 🟢) 0.474s 12 17.16x
💻 Local Express 10.224s (-8.6% 🟢) 10.940s (-8.4% 🟢) 0.716s 11 17.30x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 12.844s (+66.3% 🔺) 14.428s (+53.5% 🔺) 1.585s 9 1.00x
▲ Vercel Next.js (Turbopack) 16.407s (+58.9% 🔺) 18.261s (+48.6% 🔺) 1.854s 8 1.28x
▲ Vercel Express 16.683s (+124.8% 🔺) 18.676s (+102.0% 🔺) 1.993s 7 1.30x

🔍 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
🐘 Postgres 🥇 Express 1.124s (+447.8% 🔺) 2.001s (+100.4% 🔺) 0.001s (-25.0% 🟢) 2.010s (+98.7% 🔺) 0.886s 10 1.00x
💻 Local Nitro 1.133s (+430.3% 🔺) 2.005s (+99.6% 🔺) 0.011s (-13.6% 🟢) 2.018s (+98.1% 🔺) 0.885s 10 1.01x
💻 Local Express 1.134s (+469.6% 🔺) 2.005s (+99.6% 🔺) 0.013s (+5.8% 🔺) 2.020s (+98.4% 🔺) 0.886s 10 1.01x
🐘 Postgres Nitro 1.146s (+458.8% 🔺) 1.999s (+100.0% 🔺) 0.002s (+13.3% 🔺) 2.011s (+98.9% 🔺) 0.866s 10 1.02x
💻 Local Next.js (Turbopack) 1.182s 2.003s 0.010s 2.017s 0.835s 10 1.05x
🐘 Postgres Next.js (Turbopack) 1.205s 2.001s 0.001s 2.011s 0.806s 10 1.07x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.155s (-43.8% 🟢) 3.346s (-36.6% 🟢) 1.700s (+129.0% 🔺) 5.442s (-16.1% 🟢) 3.288s 10 1.00x
▲ Vercel Express 2.222s (-11.3% 🟢) 3.575s (-12.6% 🟢) 1.758s (+82.9% 🔺) 5.859s (+4.8%) 3.638s 10 1.03x
▲ Vercel Next.js (Turbopack) 2.385s (-65.2% 🟢) 3.504s (-59.5% 🟢) 1.922s (+204.1% 🔺) 5.966s (-39.0% 🟢) 3.582s 10 1.11x

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

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.500s (+138.0% 🔺) 2.002s (+98.9% 🔺) 0.004s (+1.8%) 2.025s (+97.9% 🔺) 0.525s 30 1.00x
💻 Local Nitro 1.519s (+81.1% 🔺) 2.013s (+98.9% 🔺) 0.010s (+2.5%) 2.024s (+81.4% 🔺) 0.505s 30 1.01x
🐘 Postgres Nitro 1.642s (+163.1% 🔺) 2.006s (+99.2% 🔺) 0.004s (+1.6%) 2.028s (+98.4% 🔺) 0.386s 30 1.10x
🐘 Postgres Next.js (Turbopack) 1.720s 2.010s 0.004s 2.027s 0.307s 30 1.15x
💻 Local Express 1.940s (+156.3% 🔺) 2.011s (+95.5% 🔺) 0.010s (+1.1%) 2.424s (+133.1% 🔺) 0.484s 25 1.29x
💻 Local Next.js (Turbopack) 2.032s 2.010s 0.008s 2.392s 0.361s 27 1.35x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.962s (-64.8% 🟢) 7.181s (-60.6% 🟢) 1.085s (+413.7% 🔺) 8.768s (-53.7% 🟢) 2.806s 7 1.00x
▲ Vercel Express 5.985s (-8.0% 🟢) 7.368s (-8.0% 🟢) 0.331s (-19.0% 🟢) 8.209s (-7.1% 🟢) 2.224s 8 1.00x
▲ Vercel Nitro 6.191s (-79.0% 🟢) 7.347s (-76.1% 🟢) 0.198s (+76.6% 🔺) 7.965s (-74.9% 🟢) 1.774s 8 1.04x

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

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.643s (-33.0% 🟢) 1.013s (-20.7% 🟢) 0.000s (-61.0% 🟢) 1.031s (-21.1% 🟢) 0.388s 59 1.00x
🐘 Postgres Nitro 0.715s (-26.2% 🟢) 1.032s (-17.3% 🟢) 0.000s (+24.1% 🔺) 1.043s (-17.1% 🟢) 0.327s 58 1.11x
🐘 Postgres Next.js (Turbopack) 0.773s 1.053s 0.000s 1.062s 0.288s 57 1.20x
💻 Local Express 1.348s (+10.0% 🔺) 2.015s (~) 0.000s (+30.0% 🔺) 2.017s (~) 0.669s 30 2.09x
💻 Local Nitro 1.361s (+11.3% 🔺) 2.015s (~) 0.000s (+233.3% 🔺) 2.018s (~) 0.657s 30 2.12x
💻 Local Next.js (Turbopack) 1.422s 2.015s 0.001s 2.018s 0.596s 30 2.21x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.876s (+3.6%) 5.222s (+2.3%) 0.001s (+200.0% 🔺) 5.770s (+4.3%) 1.894s 11 1.00x
▲ Vercel Nitro 4.238s (+38.9% 🔺) 5.308s (+20.8% 🔺) 0.000s (+254.5% 🔺) 5.767s (+19.9% 🔺) 1.529s 11 1.09x
▲ Vercel Next.js (Turbopack) 4.380s (-57.0% 🟢) 5.453s (-52.7% 🟢) 0.001s (+Infinity% 🔺) 6.071s (-49.6% 🟢) 1.691s 10 1.13x

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

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

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.218s (-31.2% 🟢) 1.871s (-14.1% 🟢) 0.000s (NaN%) 1.893s (-13.9% 🟢) 0.674s 32 1.00x
🐘 Postgres Nitro 1.472s (-17.8% 🟢) 2.102s (-1.8%) 0.000s (+93.1% 🔺) 2.114s (-2.8%) 0.642s 29 1.21x
🐘 Postgres Next.js (Turbopack) 1.745s 2.262s 0.000s 2.269s 0.524s 27 1.43x
💻 Local Next.js (Turbopack) 2.777s 3.362s 0.001s 3.366s 0.588s 18 2.28x
💻 Local Nitro 3.096s (-8.6% 🟢) 3.905s (-3.2%) 0.000s (-53.1% 🟢) 3.907s (-3.2%) 0.811s 16 2.54x
💻 Local Express 3.156s (-9.0% 🟢) 3.966s (-1.7%) 0.000s (-76.6% 🟢) 3.969s (-1.7%) 0.813s 16 2.59x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.728s (+39.9% 🔺) 6.988s (+30.0% 🔺) 0.001s (+307.4% 🔺) 7.378s (+27.3% 🔺) 1.650s 9 1.00x
▲ Vercel Express 5.736s (+25.0% 🔺) 7.157s (+18.8% 🔺) 0.000s (NaN%) 7.635s (+18.2% 🔺) 1.900s 8 1.00x
▲ Vercel Next.js (Turbopack) 6.944s (+23.6% 🔺) 8.287s (+18.7% 🔺) 0.000s (+100.0% 🔺) 8.783s (+16.5% 🔺) 1.839s 8 1.21x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

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

"@workflow/rollup": "workspace:*",
"@workflow/swc-plugin": "workspace:*",
"@workflow/vite": "workspace:*",
"@workflow/web": "workspace:*",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

😱

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Actually this is already in the dep chain and that's on us, need to fix that separately. Fine for now since it doesn't change anything in practice

"@workflow/rollup": "workspace:*",
"@workflow/swc-plugin": "workspace:*",
"@workflow/vite": "workspace:*",
"@workflow/web": "workspace:*",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Actually this is already in the dep chain and that's on us, need to fix that separately. Fine for now since it doesn't change anything in practice

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants