Skip to content

fix(next): derive workflow project root#2729

Draft
NathanColosimo wants to merge 3 commits into
mainfrom
codex/2716-next-root
Draft

fix(next): derive workflow project root#2729
NathanColosimo wants to merge 3 commits into
mainfrom
codex/2716-next-root

Conversation

@NathanColosimo

Copy link
Copy Markdown
Contributor

Summary

Derives the Workflow Next builder projectRoot from the same root sources Next uses for tracing: explicit outputFileTracingRoot, then turbopack.root, then workspace/lockfile markers. workingDir and moduleSpecifierRoot stay scoped to the Next app directory so module specifiers remain stable.

Part of #2716.

Tests

  • pnpm --filter @workflow/next test
  • pnpm turbo build --filter @workflow/next
  • pnpm biome check packages/next/src/index.ts packages/next/src/index.test.ts .changeset/next-root-detection.md

@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Jun 30, 2026 11:43pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jun 30, 2026 11:43pm
example-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-astro-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-express-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-fastify-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-hono-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-nitro-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-nuxt-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-vite-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workflow-docs Ready Ready Preview, Comment, Open in v0 Jun 30, 2026 11:43pm
workflow-swc-playground Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workflow-tarballs Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workflow-web Ready Ready Preview, Comment Jun 30, 2026 11:43pm

@changeset-bot

changeset-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 2b0ae70

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

This PR includes changesets to release 16 packages
Name Type
@workflow/next Patch
workflow Patch
@workflow/world-testing Patch
@workflow/core Patch
@workflow/builders Patch
@workflow/cli Patch
@workflow/nitro 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
@workflow/nuxt Patch

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

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

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 1442 0 230 1672
✅ 💻 Local Development 1605 0 219 1824
✅ 📦 Local Production 1605 0 219 1824
✅ 🐘 Local Postgres 1593 0 231 1824
✅ 🪟 Windows 152 0 0 152
✅ 📋 Other 885 0 179 1064
Total 7282 0 1078 8360

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 125 0 27
✅ example 125 0 27
✅ express 125 0 27
✅ fastify 125 0 27
✅ hono 125 0 27
✅ nextjs-turbopack 149 0 3
✅ nextjs-webpack 149 0 3
✅ nitro 125 0 27
✅ nuxt 125 0 27
✅ sveltekit 144 0 8
✅ vite 125 0 27
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 127 0 25
✅ express-stable 127 0 25
✅ fastify-stable 127 0 25
✅ hono-stable 127 0 25
✅ nextjs-turbopack-canary 133 0 19
✅ nextjs-turbopack-stable 152 0 0
✅ nextjs-webpack-canary 133 0 19
✅ nextjs-webpack-stable 152 0 0
✅ nitro-stable 127 0 25
✅ nuxt-stable 127 0 25
✅ sveltekit-stable 146 0 6
✅ vite-stable 127 0 25
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 127 0 25
✅ express-stable 127 0 25
✅ fastify-stable 127 0 25
✅ hono-stable 127 0 25
✅ nextjs-turbopack-canary 133 0 19
✅ nextjs-turbopack-stable 152 0 0
✅ nextjs-webpack-canary 133 0 19
✅ nextjs-webpack-stable 152 0 0
✅ nitro-stable 127 0 25
✅ nuxt-stable 127 0 25
✅ sveltekit-stable 146 0 6
✅ vite-stable 127 0 25
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 126 0 26
✅ express-stable 126 0 26
✅ fastify-stable 126 0 26
✅ hono-stable 126 0 26
✅ nextjs-turbopack-canary 132 0 20
✅ nextjs-turbopack-stable 151 0 1
✅ nextjs-webpack-canary 132 0 20
✅ nextjs-webpack-stable 151 0 1
✅ nitro-stable 126 0 26
✅ nuxt-stable 126 0 26
✅ sveltekit-stable 145 0 7
✅ vite-stable 126 0 26
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 152 0 0
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 127 0 25
✅ e2e-local-dev-tanstack-start- 127 0 25
✅ e2e-local-postgres-nest-stable 126 0 26
✅ e2e-local-postgres-tanstack-start- 126 0 26
✅ e2e-local-prod-nest-stable 127 0 25
✅ e2e-local-prod-tanstack-start- 127 0 25
✅ e2e-vercel-prod-tanstack-start 125 0 27

📋 View full workflow run

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.045s (-1.7%) 1.007s (~) 0.961s 10 1.00x
💻 Local Nitro 0.049s (+10.0% 🔺) 1.007s (~) 0.959s 10 1.07x
💻 Local Next.js (Turbopack) 0.051s (-5.8% 🟢) 1.006s (~) 0.955s 10 1.12x
🐘 Postgres Next.js (Turbopack) 0.060s (-45.9% 🟢) 1.013s (-2.6%) 0.953s 10 1.32x
🐘 Postgres Express 0.062s (-15.6% 🟢) 1.012s (~) 0.950s 10 1.36x
🐘 Postgres Nitro 0.065s (+3.8%) 1.011s (~) 0.945s 10 1.44x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.224s (-38.7% 🟢) 1.411s (-22.9% 🟢) 1.188s 10 1.00x
▲ Vercel Express 0.248s (+22.7% 🔺) 2.318s (+17.3% 🔺) 2.070s 10 1.11x
▲ Vercel Next.js (Turbopack) 0.305s (-34.0% 🟢) 1.895s (-26.2% 🟢) 1.590s 10 1.36x

🔍 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.080s (~) 2.006s (~) 0.926s 10 1.00x
💻 Local Express 1.081s (~) 2.006s (~) 0.925s 10 1.00x
💻 Local Nitro 1.084s (~) 2.006s (~) 0.922s 10 1.00x
🐘 Postgres Next.js (Turbopack) 1.093s (-0.8%) 2.009s (~) 0.915s 10 1.01x
🐘 Postgres Express 1.095s (~) 2.011s (~) 0.916s 10 1.01x
🐘 Postgres Nitro 1.103s (+1.0%) 2.010s (~) 0.906s 10 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.432s (+5.1% 🔺) 2.972s (+12.9% 🔺) 1.540s 10 1.00x
▲ Vercel Nitro 1.442s (+7.2% 🔺) 2.745s (-2.9%) 1.303s 10 1.01x
▲ Vercel Next.js (Turbopack) 2.537s (+13.0% 🔺) 3.650s (-4.4%) 1.112s 10 1.77x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 10.435s (-0.5%) 11.023s (~) 0.589s 3 1.00x
🐘 Postgres Express 10.444s (~) 11.020s (~) 0.576s 3 1.00x
💻 Local Nitro 10.479s (+0.5%) 11.022s (~) 0.543s 3 1.00x
🐘 Postgres Next.js (Turbopack) 10.495s (+0.9%) 11.017s (~) 0.522s 3 1.01x
💻 Local Next.js (Turbopack) 10.512s (~) 11.023s (~) 0.511s 3 1.01x
🐘 Postgres Nitro 10.526s (+0.6%) 11.019s (~) 0.493s 3 1.01x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 11.794s (-0.9%) 13.626s (~) 1.832s 3 1.00x
▲ Vercel Express 11.947s (-0.9%) 14.110s (+3.5%) 2.163s 3 1.01x
▲ Vercel Next.js (Turbopack) 13.066s (+3.1%) 14.571s (-1.1%) 1.505s 3 1.11x

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

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 13.524s (-0.8%) 14.017s (~) 0.492s 5 1.00x
💻 Local Express 13.607s (-0.9%) 14.026s (~) 0.419s 5 1.01x
💻 Local Next.js (Turbopack) 13.631s (~) 14.027s (~) 0.396s 5 1.01x
💻 Local Nitro 13.670s (+0.8%) 14.029s (~) 0.359s 5 1.01x
🐘 Postgres Next.js (Turbopack) 13.735s (+0.6%) 14.020s (~) 0.286s 5 1.02x
🐘 Postgres Nitro 13.796s (+0.9%) 14.020s (~) 0.224s 5 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 16.044s (-4.3%) 18.094s (-1.8%) 2.050s 4 1.00x
▲ Vercel Express 16.112s (-1.9%) 18.175s (-2.9%) 2.063s 4 1.00x
▲ Vercel Next.js (Turbopack) 17.819s (+3.6%) 19.847s (+2.8%) 2.028s 4 1.11x

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

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 12.098s (-3.1%) 12.876s (-1.1%) 0.777s 7 1.00x
🐘 Postgres Nitro 12.173s (~) 13.020s (~) 0.847s 7 1.01x
💻 Local Nitro 12.227s (+1.0%) 13.027s (~) 0.800s 7 1.01x
💻 Local Next.js (Turbopack) 12.274s (+0.8%) 13.025s (~) 0.751s 7 1.01x
🐘 Postgres Next.js (Turbopack) 12.308s (-1.0%) 13.019s (+0.8%) 0.711s 7 1.02x
💻 Local Express 12.334s (+1.3%) 13.026s (~) 0.692s 7 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 17.486s (+0.7%) 19.281s (+1.7%) 1.795s 5 1.00x
▲ Vercel Express 17.648s (~) 19.931s (+3.1%) 2.282s 5 1.01x
▲ Vercel Next.js (Turbopack) 19.805s (~) 21.245s (-2.9%) 1.439s 5 1.13x

🔍 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 🥇 Nitro 1.174s (-2.4%) 2.008s (~) 0.834s 15 1.00x
🐘 Postgres Express 1.190s (+0.6%) 2.008s (~) 0.818s 15 1.01x
🐘 Postgres Next.js (Turbopack) 1.204s (-5.4% 🟢) 2.008s (-1.6%) 0.804s 15 1.03x
💻 Local Nitro 1.372s (-2.0%) 2.006s (~) 0.634s 15 1.17x
💻 Local Express 1.393s (~) 2.007s (~) 0.614s 15 1.19x
💻 Local Next.js (Turbopack) 1.402s (-1.5%) 2.007s (~) 0.605s 15 1.19x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.678s (+35.7% 🔺) 4.426s (+18.6% 🔺) 1.748s 7 1.00x
▲ Vercel Nitro 3.067s (+40.2% 🔺) 4.660s (+22.7% 🔺) 1.592s 7 1.15x
▲ Vercel Next.js (Turbopack) 3.650s (+10.1% 🔺) 5.079s (-0.8%) 1.429s 7 1.36x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.328s (~) 3.008s (+21.3% 🔺) 1.680s 10 1.00x
🐘 Postgres Nitro 1.373s (+3.8%) 2.316s (-18.1% 🟢) 0.943s 13 1.03x
🐘 Postgres Express 1.393s (+2.8%) 2.736s (+18.1% 🔺) 1.343s 11 1.05x
💻 Local Next.js (Turbopack) 2.311s (-15.7% 🟢) 2.918s (-6.1% 🟢) 0.607s 11 1.74x
💻 Local Nitro 2.321s (-7.9% 🟢) 3.009s (-3.2%) 0.688s 10 1.75x
💻 Local Express 2.362s (-8.5% 🟢) 3.008s (~) 0.646s 10 1.78x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.486s (-6.2% 🟢) 3.989s (-0.9%) 1.503s 8 1.00x
▲ Vercel Nitro 2.581s (+8.0% 🔺) 3.828s (~) 1.247s 8 1.04x
▲ Vercel Next.js (Turbopack) 4.039s (+11.3% 🔺) 5.225s (-9.6% 🟢) 1.186s 6 1.62x

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

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.560s (-1.8%) 4.011s (~) 2.451s 8 1.00x
🐘 Postgres Express 1.629s (+2.5%) 4.018s (~) 2.388s 8 1.04x
🐘 Postgres Next.js (Turbopack) 3.087s (+69.6% 🔺) 6.214s (+27.0% 🔺) 3.126s 5 1.98x
💻 Local Next.js (Turbopack) 3.123s (-60.1% 🟢) 4.585s (-42.8% 🟢) 1.462s 7 2.00x
💻 Local Express 3.811s (-42.8% 🟢) 5.014s (-32.4% 🟢) 1.203s 7 2.44x
💻 Local Nitro 4.537s (-26.2% 🟢) 5.180s (-24.0% 🟢) 0.643s 6 2.91x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.990s (+13.1% 🔺) 4.476s (+5.8% 🔺) 1.485s 7 1.00x
▲ Vercel Express 3.258s (+21.5% 🔺) 4.952s (+14.2% 🔺) 1.694s 7 1.09x
▲ Vercel Next.js (Turbopack) 4.456s (+7.4% 🔺) 5.918s (-3.1%) 1.462s 6 1.49x

🔍 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.174s (~) 2.007s (~) 0.833s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.183s (~) 2.008s (~) 0.824s 15 1.01x
🐘 Postgres Express 1.189s (+0.8%) 2.007s (~) 0.818s 15 1.01x
💻 Local Nitro 1.420s (+3.6%) 2.007s (~) 0.587s 15 1.21x
💻 Local Next.js (Turbopack) 1.427s (~) 2.007s (~) 0.580s 15 1.22x
💻 Local Express 1.474s (+2.0%) 2.007s (~) 0.532s 15 1.26x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.056s (+8.6% 🔺) 3.952s (+6.4% 🔺) 1.896s 8 1.00x
▲ Vercel Nitro 2.057s (+7.3% 🔺) 3.513s (-0.6%) 1.456s 9 1.00x
▲ Vercel Next.js (Turbopack) 3.277s (+6.5% 🔺) 4.772s (-3.3%) 1.495s 7 1.59x

🔍 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) 1.328s (-5.5% 🟢) 3.008s (+18.8% 🔺) 1.680s 10 1.00x
🐘 Postgres Express 1.339s (+2.4%) 2.510s (+1.6%) 1.171s 12 1.01x
🐘 Postgres Nitro 1.363s (+3.8%) 2.223s (-14.3% 🟢) 0.860s 14 1.03x
💻 Local Next.js (Turbopack) 2.472s (-7.4% 🟢) 3.009s (-6.3% 🟢) 0.536s 10 1.86x
💻 Local Nitro 2.485s (-9.2% 🟢) 3.009s (-10.0% 🟢) 0.524s 10 1.87x
💻 Local Express 2.672s (+1.3%) 3.109s (+3.3%) 0.436s 10 2.01x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.263s (-2.4%) 3.525s (-6.7% 🟢) 1.262s 9 1.00x
▲ Vercel Express 2.423s (-3.3%) 4.103s (+3.9%) 1.680s 8 1.07x
▲ Vercel Next.js (Turbopack) 3.510s (+3.0%) 4.821s (-8.5% 🟢) 1.311s 7 1.55x

🔍 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.594s (~) 4.136s (~) 2.542s 8 1.00x
🐘 Postgres Nitro 1.629s (-1.0%) 4.584s (+6.6% 🔺) 2.955s 7 1.02x
🐘 Postgres Next.js (Turbopack) 2.991s (+14.7% 🔺) 5.847s (+11.8% 🔺) 2.856s 6 1.88x
💻 Local Next.js (Turbopack) 5.442s (-14.5% 🟢) 6.215s (-13.9% 🟢) 0.773s 5 3.41x
💻 Local Express 5.576s (-12.0% 🟢) 6.216s (-8.8% 🟢) 0.640s 5 3.50x
💻 Local Nitro 5.579s (-13.4% 🟢) 6.214s (-16.2% 🟢) 0.635s 5 3.50x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.574s (-9.0% 🟢) 4.152s (-8.9% 🟢) 1.578s 8 1.00x
▲ Vercel Nitro 2.622s (-7.6% 🟢) 4.005s (-8.7% 🟢) 1.383s 8 1.02x
▲ Vercel Next.js (Turbopack) 4.313s (-1.5%) 6.085s (-1.4%) 1.772s 5 1.68x

🔍 Observability: Express | Nitro | 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.521s (-5.6% 🟢) 1.006s (~) 0.484s 60 1.00x
🐘 Postgres Nitro 0.561s (-0.5%) 1.023s (~) 0.462s 59 1.08x
💻 Local Express 0.563s (+2.0%) 1.005s (~) 0.442s 60 1.08x
🐘 Postgres Next.js (Turbopack) 0.566s (-6.8% 🟢) 1.023s (-2.7%) 0.458s 59 1.09x
💻 Local Nitro 0.602s (~) 1.005s (-3.3%) 0.404s 60 1.15x
💻 Local Next.js (Turbopack) 0.643s (-2.8%) 1.022s (-3.4%) 0.379s 59 1.23x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.418s (-12.1% 🟢) 3.651s (-18.1% 🟢) 1.233s 17 1.00x
▲ Vercel Express 2.464s (-8.5% 🟢) 4.096s (-4.5%) 1.632s 15 1.02x
▲ Vercel Next.js (Turbopack) 3.969s (+9.9% 🔺) 5.836s (+8.5% 🔺) 1.868s 11 1.64x

🔍 Observability: Nitro | Express | 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.214s (-10.2% 🟢) 2.008s (-1.1%) 0.794s 45 1.00x
🐘 Postgres Nitro 1.312s (~) 2.007s (-2.2%) 0.696s 45 1.08x
🐘 Postgres Next.js (Turbopack) 1.335s (-10.3% 🟢) 2.030s (-5.0% 🟢) 0.694s 45 1.10x
💻 Local Express 1.442s (+3.0%) 2.006s (~) 0.564s 45 1.19x
💻 Local Nitro 1.526s (+6.7% 🔺) 2.006s (~) 0.481s 45 1.26x
💻 Local Next.js (Turbopack) 1.624s (+9.1% 🔺) 2.052s (+2.3%) 0.428s 44 1.34x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.657s (-7.8% 🟢) 7.219s (-4.8%) 1.562s 13 1.00x
▲ Vercel Express 5.816s (-5.6% 🟢) 7.550s (-3.8%) 1.733s 12 1.03x
▲ Vercel Next.js (Turbopack) 8.149s (+2.7%) 9.538s (-2.6%) 1.389s 10 1.44x

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

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.506s (-4.7%) 3.086s (~) 0.580s 39 1.00x
🐘 Postgres Nitro 2.603s (~) 3.058s (+0.8%) 0.455s 40 1.04x
🐘 Postgres Next.js (Turbopack) 2.621s (-11.0% 🟢) 3.034s (-12.1% 🟢) 0.413s 40 1.05x
💻 Local Express 3.253s (+8.9% 🔺) 3.977s (+14.8% 🔺) 0.724s 31 1.30x
💻 Local Next.js (Turbopack) 3.335s (+4.2%) 4.009s (~) 0.674s 30 1.33x
💻 Local Nitro 3.345s (+5.3% 🔺) 4.010s (+1.6%) 0.665s 30 1.33x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 11.093s (-5.2% 🟢) 13.189s (-1.5%) 2.096s 10 1.00x
▲ Vercel Nitro 11.197s (-5.5% 🟢) 13.153s (-1.9%) 1.956s 10 1.01x
▲ Vercel Next.js (Turbopack) 16.697s (-1.0%) 18.378s (-1.8%) 1.681s 7 1.51x

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

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.179s (-22.7% 🟢) 1.006s (~) 0.827s 60 1.00x
🐘 Postgres Express 0.203s (-8.6% 🟢) 1.006s (~) 0.803s 60 1.13x
🐘 Postgres Nitro 0.221s (+3.0%) 1.006s (~) 0.785s 60 1.23x
💻 Local Express 0.524s (+16.5% 🔺) 1.005s (~) 0.481s 60 2.93x
💻 Local Nitro 0.569s (+32.5% 🔺) 1.022s (+1.7%) 0.453s 59 3.18x
💻 Local Next.js (Turbopack) 0.626s (~) 1.022s (+1.7%) 0.396s 59 3.50x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.986s (+5.9% 🔺) 2.656s (+7.2% 🔺) 1.670s 23 1.00x
▲ Vercel Nitro 1.055s (+2.9%) 2.431s (~) 1.375s 25 1.07x
▲ Vercel Next.js (Turbopack) 2.556s (+28.9% 🔺) 3.969s (+3.2%) 1.413s 16 2.59x

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

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.280s (-11.9% 🟢) 1.017s (~) 0.737s 89 1.00x
🐘 Postgres Express 0.314s (-5.9% 🟢) 1.006s (~) 0.693s 90 1.12x
🐘 Postgres Nitro 0.327s (-2.8%) 1.006s (~) 0.679s 90 1.17x
💻 Local Nitro 2.524s (+31.2% 🔺) 3.009s (+19.9% 🔺) 0.485s 30 9.01x
💻 Local Express 2.575s (+18.4% 🔺) 3.011s (+8.8% 🔺) 0.436s 30 9.19x
💻 Local Next.js (Turbopack) 2.623s (-10.4% 🟢) 3.075s (-9.0% 🟢) 0.451s 30 9.36x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.478s (+3.8%) 3.069s (+2.1%) 1.591s 30 1.00x
▲ Vercel Nitro 1.728s (+6.8% 🔺) 3.228s (+7.4% 🔺) 1.500s 30 1.17x
▲ Vercel Next.js (Turbopack) 3.007s (+20.6% 🔺) 4.586s (+11.6% 🔺) 1.579s 20 2.03x

🔍 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 🥇 Next.js (Turbopack) 0.509s (+1.9%) 3.059s (+21.6% 🔺) 2.549s 40 1.00x
🐘 Postgres Nitro 0.524s (-4.5%) 1.078s (-4.5%) 0.553s 112 1.03x
🐘 Postgres Express 0.547s (+0.7%) 1.139s (+1.9%) 0.592s 106 1.07x
💻 Local Express 5.586s (-39.6% 🟢) 8.560s (-18.0% 🟢) 2.974s 15 10.96x
💻 Local Nitro 5.919s (-38.7% 🟢) 8.959s (-16.9% 🟢) 3.041s 15 11.62x
💻 Local Next.js (Turbopack) 6.204s (-42.6% 🟢) 8.882s (-24.4% 🟢) 2.678s 14 12.18x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.848s (+10.2% 🔺) 3.531s (+2.3%) 1.683s 34 1.00x
▲ Vercel Express 1.958s (+10.2% 🔺) 3.690s (+0.8%) 1.732s 33 1.06x
▲ Vercel Next.js (Turbopack) 3.964s (-2.4%) 5.503s (-6.2% 🟢) 1.539s 22 2.14x

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

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 1.139s (~) 1.968s (~) 0.013s (+5.0%) 2.020s (~) 0.881s 10 1.00x
🐘 Postgres Express 1.147s (-0.5%) 1.999s (~) 0.001s (-8.3% 🟢) 2.010s (~) 0.863s 10 1.01x
💻 Local Nitro 1.157s (~) 2.005s (~) 0.012s (+13.1% 🔺) 2.019s (~) 0.863s 10 1.02x
💻 Local Express 1.157s (+1.4%) 2.005s (~) 0.010s (-1.9%) 2.018s (~) 0.861s 10 1.02x
🐘 Postgres Nitro 1.159s (-2.4%) 1.997s (~) 0.002s (+25.0% 🔺) 2.011s (~) 0.852s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.161s (-5.0%) 2.000s (+0.6%) 0.001s (+44.4% 🔺) 2.011s (~) 0.850s 10 1.02x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.897s (-6.9% 🟢) 8.703s (+159.5% 🔺) 0.250s (-82.0% 🟢) 9.483s (+81.1% 🔺) 7.585s 10 1.00x
▲ Vercel Nitro 2.332s (+22.0% 🔺) 8.739s (+180.9% 🔺) 0.192s (-88.3% 🟢) 9.389s (+81.7% 🔺) 7.057s 10 1.23x
▲ Vercel Next.js (Turbopack) 3.639s (+13.4% 🔺) 8.388s (+109.9% 🔺) 0.280s (-66.1% 🟢) 10.302s (+68.5% 🔺) 6.663s 10 1.92x

🔍 Observability: Express | Nitro | 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.533s (-3.4%) 2.002s (-1.7%) 0.005s (+5.9% 🔺) 2.027s (-1.6%) 0.494s 30 1.00x
🐘 Postgres Next.js (Turbopack) 1.571s (-16.9% 🟢) 2.009s (-11.3% 🟢) 0.005s (-35.5% 🟢) 2.024s (-12.1% 🟢) 0.453s 30 1.02x
💻 Local Nitro 1.585s (+1.7%) 2.009s (~) 0.012s (-5.6% 🟢) 2.025s (~) 0.439s 30 1.03x
💻 Local Express 1.586s (+3.0%) 2.044s (+1.8%) 0.013s (-2.2%) 2.061s (+1.8%) 0.475s 30 1.03x
💻 Local Next.js (Turbopack) 1.614s (+2.3%) 1.969s (~) 0.013s (+15.3% 🔺) 2.026s (~) 0.411s 30 1.05x
🐘 Postgres Nitro 1.631s (+3.7%) 2.040s (+1.6%) 0.005s (-9.2% 🟢) 2.059s (+1.6%) 0.428s 30 1.06x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.377s (-4.7%) 7.399s (+3.3%) 0.225s (+10.4% 🔺) 8.118s (+2.5%) 2.741s 8 1.00x
▲ Vercel Nitro 5.516s (-2.6%) 7.078s (+1.6%) 0.174s (-38.7% 🟢) 7.692s (~) 2.176s 8 1.03x
▲ Vercel Next.js (Turbopack) 9.618s (+2.0%) 10.632s (-1.1%) 0.157s (-38.7% 🟢) 11.415s (-3.5%) 1.797s 6 1.79x

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

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.772s (-0.9%) 1.045s (-1.5%) 0.000s (+Infinity% 🔺) 1.060s (-1.8%) 0.288s 57 1.00x
🐘 Postgres Nitro 0.821s (+6.6% 🔺) 1.147s (+3.8%) 0.000s (-37.7% 🟢) 1.161s (+3.8%) 0.340s 52 1.06x
🐘 Postgres Next.js (Turbopack) 0.876s (-36.4% 🟢) 1.250s (-36.3% 🟢) 0.000s (NaN%) 1.258s (-37.2% 🟢) 0.382s 48 1.14x
💻 Local Next.js (Turbopack) 1.291s (-6.5% 🟢) 1.976s (~) 0.000s (-30.0% 🟢) 2.015s (~) 0.724s 30 1.67x
💻 Local Express 1.382s (+8.5% 🔺) 1.949s (-3.2%) 0.001s (+29.0% 🔺) 1.952s (-3.1%) 0.571s 31 1.79x
💻 Local Nitro 1.421s (+9.5% 🔺) 1.949s (-3.2%) 0.000s (+93.5% 🔺) 1.952s (-3.2%) 0.531s 31 1.84x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.863s (-98.4% 🟢) 4.437s (-97.6% 🟢) 0.000s (+Infinity% 🔺) 4.867s (-97.4% 🟢) 2.004s 13 1.00x
▲ Vercel Express 2.923s (+1.5%) 4.637s (+7.0% 🔺) 0.000s (NaN%) 5.137s (+6.5% 🔺) 2.214s 12 1.02x
▲ Vercel Next.js (Turbopack) 4.809s (+13.5% 🔺) 5.698s (+4.9%) 0.000s (NaN%) 6.671s (+7.6% 🔺) 1.862s 10 1.68x

🔍 Observability: Nitro | Express | 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.810s (+4.7%) 2.391s (+4.5%) 0.000s (+116.0% 🔺) 2.409s (+4.5%) 0.599s 25 1.00x
🐘 Postgres Nitro 1.832s (-3.1%) 2.477s (+1.8%) 0.000s (~) 2.502s (+2.1%) 0.670s 25 1.01x
🐘 Postgres Next.js (Turbopack) 2.307s (-18.4% 🟢) 2.820s (-16.0% 🟢) 0.000s (NaN%) 2.827s (-16.7% 🟢) 0.520s 22 1.27x
💻 Local Next.js (Turbopack) 3.394s (-2.6%) 4.126s (+3.4%) 0.001s (+13.3% 🔺) 4.163s (+3.2%) 0.769s 15 1.88x
💻 Local Nitro 3.413s (-7.4% 🟢) 4.028s (-6.6% 🟢) 0.001s (-17.0% 🟢) 4.031s (-6.7% 🟢) 0.618s 15 1.89x
💻 Local Express 3.471s (+2.2%) 3.965s (-1.4%) 0.001s (+3.1%) 3.969s (-1.5%) 0.497s 16 1.92x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.089s (-6.0% 🟢) 5.537s (-6.0% 🟢) 0.000s (NaN%) 5.941s (-8.0% 🟢) 1.852s 11 1.00x
▲ Vercel Express 4.265s (-1.3%) 5.981s (+5.3% 🔺) 0.000s (NaN%) 6.476s (+5.4% 🔺) 2.211s 10 1.04x
▲ Vercel Next.js (Turbopack) 6.662s (-4.0%) 7.647s (-3.5%) 0.000s (NaN%) 8.635s (-2.3%) 1.973s 7 1.63x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 18/21
Next.js (Turbopack) 🐘 Postgres 16/21
Nitro 🐘 Postgres 15/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)
  • 🌐 Platformatic: Community world (local development)

📋 View full workflow run

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.

1 participant