Skip to content

Remove lazy discovery from workflow/next#2545

Draft
ijjk wants to merge 1 commit into
mainfrom
ijjk/remove-next-lazy-discovery
Draft

Remove lazy discovery from workflow/next#2545
ijjk wants to merge 1 commit into
mainfrom
ijjk/remove-next-lazy-discovery

Conversation

@ijjk

@ijjk ijjk commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

Remove lazy discovery from workflow/next so the integration has one build mode to optimize and maintain.

The remaining eager build path does not depend on Next.js deferred entries, which means workflow/next no longer needs a minimum Next.js version for lazy discovery support.

Changes

  • Remove the deferred/lazy discovery builder path.
  • Remove workflows.lazyDiscovery and WORKFLOW_NEXT_LAZY_DISCOVERY handling.
  • Remove socket-based loader discovery plumbing.
  • Update tests, CI matrix wiring, and docs for the single build mode.

Testing

  • pnpm --filter @workflow/next build
  • pnpm vitest run packages/core/e2e/utils.test.ts packages/next/src/index.test.ts
  • node scripts/create-test-matrix.mjs > /tmp/workflow-test-matrix.json

@changeset-bot

changeset-bot Bot commented Jun 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 0984752

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

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

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

@vercel

vercel Bot commented Jun 20, 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 21, 2026 2:59am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jun 21, 2026 2:59am
example-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-astro-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-express-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-fastify-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-hono-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-nitro-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-nuxt-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-sveltekit-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workbench-vite-workflow Ready Ready Preview, Comment Jun 21, 2026 2:59am
workflow-docs Building Building Preview, Comment, Open in v0 Jun 21, 2026 2:59am
workflow-swc-playground Ready Ready Preview, Comment Jun 21, 2026 2:59am
workflow-tarballs Ready Ready Preview, Comment Jun 21, 2026 2:59am
workflow-web Ready Ready Preview, Comment Jun 21, 2026 2:59am

@github-actions

github-actions Bot commented Jun 20, 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.031s (-23.8% 🟢) 1.005s (~) 0.973s 10 1.00x
💻 Local Nitro 0.042s (+3.2%) 1.007s (~) 0.964s 10 1.35x
💻 Local Next.js (Turbopack) 0.046s (-3.3%) 1.006s (~) 0.959s 10 1.48x
🐘 Postgres Next.js (Turbopack) 0.053s (-7.9% 🟢) 1.012s (~) 0.959s 10 1.70x
🐘 Postgres Express 0.058s (-6.8% 🟢) 1.012s (~) 0.954s 10 1.83x
🐘 Postgres Nitro 0.061s (-3.9%) 1.011s (~) 0.951s 10 1.94x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.290s (-27.0% 🟢) 2.711s (+11.2% 🔺) 2.421s 10 1.00x
▲ Vercel Nitro 0.340s (-12.8% 🟢) 2.699s (+6.8% 🔺) 2.359s 10 1.17x
▲ Vercel Next.js (Turbopack) 0.373s (+15.2% 🔺) 2.800s (~) 2.428s 10 1.28x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.083s (-1.6%) 2.006s (~) 0.923s 10 1.00x
💻 Local Next.js (Turbopack) 1.087s (~) 2.006s (~) 0.919s 10 1.00x
💻 Local Nitro 1.091s (~) 2.006s (~) 0.915s 10 1.01x
🐘 Postgres Next.js (Turbopack) 1.099s (~) 2.010s (~) 0.911s 10 1.02x
🐘 Postgres Nitro 1.106s (~) 2.010s (~) 0.904s 10 1.02x
🐘 Postgres Express 1.107s (~) 2.010s (~) 0.903s 10 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.669s (+9.7% 🔺) 3.386s (-5.1% 🟢) 1.717s 10 1.00x
▲ Vercel Next.js (Turbopack) 1.781s (+12.8% 🔺) 3.900s (+5.0%) 2.119s 10 1.07x
▲ Vercel Nitro 1.904s (+23.6% 🔺) 3.856s (+9.8% 🔺) 1.952s 10 1.14x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 10.403s (-1.1%) 11.021s (~) 0.618s 3 1.00x
💻 Local Next.js (Turbopack) 10.506s (~) 11.022s (~) 0.517s 3 1.01x
💻 Local Nitro 10.515s (~) 11.023s (~) 0.508s 3 1.01x
🐘 Postgres Nitro 10.524s (~) 11.020s (~) 0.496s 3 1.01x
🐘 Postgres Next.js (Turbopack) 10.528s (~) 11.017s (~) 0.489s 3 1.01x
🐘 Postgres Express 10.557s (~) 11.019s (~) 0.462s 3 1.01x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 14.212s (+7.8% 🔺) 16.056s (+4.4%) 1.844s 2 1.00x
▲ Vercel Nitro 14.501s (+13.0% 🔺) 16.588s (+8.7% 🔺) 2.087s 2 1.02x
▲ Vercel Express 14.664s (+12.0% 🔺) 16.394s (+7.8% 🔺) 1.730s 2 1.03x

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

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 13.524s (-3.4%) 14.027s (-1.4%) 0.503s 5 1.00x
💻 Local Next.js (Turbopack) 13.708s (~) 14.027s (~) 0.319s 5 1.01x
💻 Local Nitro 13.726s (~) 14.027s (~) 0.301s 5 1.01x
🐘 Postgres Nitro 13.799s (-0.8%) 14.021s (~) 0.221s 5 1.02x
🐘 Postgres Next.js (Turbopack) 13.859s (~) 14.019s (~) 0.160s 5 1.02x
🐘 Postgres Express 13.911s (+0.9%) 14.020s (~) 0.109s 5 1.03x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 23.106s (+7.5% 🔺) 25.551s (+8.8% 🔺) 2.445s 3 1.00x
▲ Vercel Express 23.222s (+15.2% 🔺) 25.508s (+13.8% 🔺) 2.286s 3 1.01x
▲ Vercel Next.js (Turbopack) 23.433s (+17.5% 🔺) 25.535s (+15.0% 🔺) 2.101s 3 1.01x

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

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 11.815s (-6.2% 🟢) 12.021s (-7.7% 🟢) 0.206s 8 1.00x
💻 Local Next.js (Turbopack) 12.262s (-1.6%) 13.025s (~) 0.763s 7 1.04x
💻 Local Nitro 12.322s (~) 13.024s (~) 0.703s 7 1.04x
🐘 Postgres Nitro 12.426s (~) 13.019s (~) 0.592s 7 1.05x
🐘 Postgres Next.js (Turbopack) 12.515s (~) 13.016s (~) 0.501s 7 1.06x
🐘 Postgres Express 12.542s (+0.7%) 13.305s (+2.2%) 0.762s 7 1.06x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 28.923s (+25.7% 🔺) 31.583s (+25.5% 🔺) 2.660s 3 1.00x
▲ Vercel Next.js (Turbopack) 28.975s (+15.2% 🔺) 31.599s (+15.1% 🔺) 2.624s 3 1.00x
▲ Vercel Nitro 30.866s (+24.8% 🔺) 33.336s (+24.9% 🔺) 2.470s 3 1.07x

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

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.166s (-5.2% 🟢) 2.005s (~) 0.839s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.173s (+1.3%) 2.009s (~) 0.836s 15 1.01x
🐘 Postgres Express 1.187s (-0.7%) 2.007s (~) 0.821s 15 1.02x
🐘 Postgres Nitro 1.189s (~) 2.009s (~) 0.820s 15 1.02x
💻 Local Next.js (Turbopack) 1.243s (-9.6% 🟢) 2.006s (~) 0.763s 15 1.07x
💻 Local Nitro 1.244s (+3.5%) 2.006s (~) 0.762s 15 1.07x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.020s (+16.5% 🔺) 4.847s (+9.5% 🔺) 1.827s 7 1.00x
▲ Vercel Express 3.275s (+21.6% 🔺) 5.067s (+13.7% 🔺) 1.792s 6 1.08x
▲ Vercel Nitro 4.314s (+63.0% 🔺) 6.258s (+40.5% 🔺) 1.943s 5 1.43x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.259s (+0.6%) 2.074s (+3.4%) 0.816s 15 1.00x
🐘 Postgres Express 1.265s (-3.3%) 2.007s (-3.3%) 0.742s 15 1.01x
🐘 Postgres Nitro 1.308s (+3.1%) 2.008s (~) 0.700s 15 1.04x
💻 Local Express 1.796s (-11.7% 🟢) 2.314s (-7.7% 🟢) 0.517s 13 1.43x
💻 Local Next.js (Turbopack) 2.014s (-14.1% 🟢) 2.469s (-15.4% 🟢) 0.455s 13 1.60x
💻 Local Nitro 2.058s (+2.1%) 2.591s (+3.4%) 0.534s 12 1.63x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.921s (+23.1% 🔺) 5.887s (+14.8% 🔺) 1.966s 6 1.00x
▲ Vercel Nitro 4.109s (+65.2% 🔺) 5.700s (+40.5% 🔺) 1.591s 6 1.05x
▲ Vercel Express 4.425s (+56.1% 🔺) 6.297s (+37.1% 🔺) 1.872s 5 1.13x

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

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.405s (-15.2% 🟢) 3.454s (-8.2% 🟢) 2.049s 9 1.00x
🐘 Postgres Nitro 1.446s (~) 3.568s (-3.0%) 2.122s 9 1.03x
🐘 Postgres Next.js (Turbopack) 1.467s (-1.0%) 3.760s (-3.2%) 2.293s 8 1.04x
💻 Local Express 4.382s (-24.1% 🟢) 5.013s (-21.9% 🟢) 0.630s 6 3.12x
💻 Local Nitro 5.669s (+26.5% 🔺) 6.015s (+20.0% 🔺) 0.345s 5 4.03x
💻 Local Next.js (Turbopack) 5.837s (-12.7% 🟢) 6.614s (-10.8% 🟢) 0.777s 5 4.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.719s (+53.6% 🔺) 7.181s (+45.6% 🔺) 2.463s 5 1.00x
▲ Vercel Nitro 4.884s (+58.9% 🔺) 6.856s (+39.5% 🔺) 1.972s 5 1.04x
▲ Vercel Next.js (Turbopack) 5.796s (+65.5% 🔺) 8.234s (+51.5% 🔺) 2.438s 4 1.23x

🔍 Observability: Express | Nitro | 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.163s (-0.9%) 2.007s (~) 0.845s 15 1.00x
🐘 Postgres Express 1.191s (~) 2.008s (~) 0.816s 15 1.02x
💻 Local Express 1.198s (-2.6%) 2.005s (~) 0.807s 15 1.03x
🐘 Postgres Nitro 1.209s (+0.8%) 2.008s (~) 0.799s 15 1.04x
💻 Local Nitro 1.223s (-0.5%) 2.006s (~) 0.783s 15 1.05x
💻 Local Next.js (Turbopack) 1.313s (-2.8%) 2.006s (~) 0.692s 15 1.13x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.813s (+39.0% 🔺) 4.802s (+23.0% 🔺) 1.989s 7 1.00x
▲ Vercel Nitro 2.887s (+33.2% 🔺) 4.537s (+17.0% 🔺) 1.650s 7 1.03x
▲ Vercel Next.js (Turbopack) 3.010s (+40.7% 🔺) 4.819s (+18.8% 🔺) 1.809s 7 1.07x

🔍 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.250s (-1.1%) 2.151s (+3.7%) 0.900s 14 1.00x
🐘 Postgres Express 1.268s (-2.1%) 2.008s (~) 0.740s 15 1.01x
🐘 Postgres Nitro 1.293s (+1.4%) 2.009s (~) 0.716s 15 1.03x
💻 Local Express 1.870s (-8.2% 🟢) 2.314s (-15.5% 🟢) 0.444s 13 1.50x
💻 Local Nitro 1.975s (-1.8%) 2.507s (+8.3% 🔺) 0.533s 12 1.58x
💻 Local Next.js (Turbopack) 2.395s (-1.0%) 2.917s (~) 0.522s 11 1.92x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.741s (+36.4% 🔺) 5.523s (+28.6% 🔺) 1.782s 6 1.00x
▲ Vercel Next.js (Turbopack) 3.906s (+46.6% 🔺) 6.065s (+45.7% 🔺) 2.160s 5 1.04x
▲ Vercel Express 3.995s (+54.8% 🔺) 5.596s (+28.7% 🔺) 1.600s 6 1.07x

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

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.456s (+1.8%) 3.761s (~) 2.304s 8 1.00x
🐘 Postgres Next.js (Turbopack) 1.457s (-0.8%) 3.885s (~) 2.428s 8 1.00x
🐘 Postgres Nitro 1.474s (+1.2%) 4.012s (+6.7% 🔺) 2.538s 8 1.01x
💻 Local Express 4.406s (-26.1% 🟢) 5.012s (-26.4% 🟢) 0.607s 6 3.02x
💻 Local Nitro 5.626s (+13.8% 🔺) 6.016s (+9.1% 🔺) 0.390s 5 3.86x
💻 Local Next.js (Turbopack) 5.780s (-14.9% 🟢) 6.416s (-14.6% 🟢) 0.636s 5 3.97x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.355s (-1.1%) 6.703s (+2.0%) 2.348s 5 1.00x
▲ Vercel Next.js (Turbopack) 4.383s (+32.6% 🔺) 6.950s (+32.2% 🔺) 2.568s 5 1.01x
▲ Vercel Express 4.440s (+4.4%) 6.274s (+3.0%) 1.834s 5 1.02x

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

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.450s (-26.3% 🟢) 1.004s (~) 0.554s 60 1.00x
🐘 Postgres Express 0.525s (-8.9% 🟢) 1.006s (-1.7%) 0.481s 60 1.17x
🐘 Postgres Next.js (Turbopack) 0.533s (-5.7% 🟢) 1.023s (~) 0.490s 59 1.19x
💻 Local Next.js (Turbopack) 0.568s (-7.1% 🟢) 1.005s (-1.7%) 0.437s 60 1.26x
💻 Local Nitro 0.578s (+1.3%) 1.022s (~) 0.444s 59 1.28x
🐘 Postgres Nitro 0.601s (+7.0% 🔺) 1.023s (~) 0.422s 59 1.34x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.639s (+20.8% 🔺) 5.508s (+9.1% 🔺) 1.868s 11 1.00x
▲ Vercel Express 4.121s (+20.1% 🔺) 6.085s (+12.1% 🔺) 1.964s 11 1.13x
▲ Vercel Next.js (Turbopack) 4.246s (+2.8%) 5.798s (-7.1% 🟢) 1.551s 11 1.17x

🔍 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
💻 Local 🥇 Express 1.213s (-22.2% 🟢) 2.007s (-1.1%) 0.794s 45 1.00x
🐘 Postgres Express 1.219s (-8.0% 🟢) 2.007s (~) 0.788s 45 1.01x
🐘 Postgres Next.js (Turbopack) 1.257s (-1.4%) 2.007s (~) 0.750s 45 1.04x
🐘 Postgres Nitro 1.368s (+7.3% 🔺) 2.030s (+1.1%) 0.662s 45 1.13x
💻 Local Next.js (Turbopack) 1.427s (-3.3%) 2.006s (~) 0.579s 45 1.18x
💻 Local Nitro 1.451s (+4.9%) 2.006s (~) 0.554s 45 1.20x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 8.825s (+2.9%) 10.801s (+3.6%) 1.976s 9 1.00x
▲ Vercel Nitro 9.255s (+21.3% 🔺) 11.296s (+18.9% 🔺) 2.040s 9 1.05x
▲ Vercel Next.js (Turbopack) 9.495s (+16.0% 🔺) 11.458s (+14.6% 🔺) 1.963s 8 1.08x

🔍 Observability: Express | Nitro | 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.456s (-6.8% 🟢) 3.059s (~) 0.602s 40 1.00x
🐘 Postgres Next.js (Turbopack) 2.511s (-1.5%) 3.008s (~) 0.497s 40 1.02x
💻 Local Express 2.580s (-20.7% 🟢) 3.007s (-25.0% 🟢) 0.427s 40 1.05x
🐘 Postgres Nitro 2.682s (+1.1%) 3.059s (-2.5%) 0.377s 40 1.09x
💻 Local Nitro 3.146s (+4.9%) 3.913s (+13.8% 🔺) 0.767s 31 1.28x
💻 Local Next.js (Turbopack) 3.181s (-0.7%) 3.821s (-3.9%) 0.640s 32 1.30x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 18.298s (+9.6% 🔺) 20.700s (+8.8% 🔺) 2.402s 6 1.00x
▲ Vercel Express 18.547s (+23.3% 🔺) 20.731s (+20.4% 🔺) 2.183s 6 1.01x
▲ Vercel Next.js (Turbopack) 21.415s (+32.2% 🔺) 24.113s (+31.0% 🔺) 2.698s 5 1.17x

🔍 Observability: Nitro | Express | 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.165s (-8.1% 🟢) 1.006s (~) 0.841s 60 1.00x
🐘 Postgres Express 0.205s (-6.5% 🟢) 1.006s (~) 0.801s 60 1.24x
🐘 Postgres Nitro 0.220s (+3.7%) 1.006s (~) 0.787s 60 1.34x
💻 Local Express 0.295s (-13.6% 🟢) 1.004s (~) 0.709s 60 1.79x
💻 Local Nitro 0.332s (-1.5%) 1.004s (~) 0.672s 60 2.02x
💻 Local Next.js (Turbopack) 0.600s (-0.9%) 1.005s (~) 0.405s 60 3.65x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.468s (+16.0% 🔺) 3.359s (+13.6% 🔺) 1.891s 18 1.00x
▲ Vercel Next.js (Turbopack) 1.658s (+26.0% 🔺) 3.432s (+15.4% 🔺) 1.774s 18 1.13x
▲ Vercel Nitro 1.727s (+26.3% 🔺) 3.547s (+13.7% 🔺) 1.820s 17 1.18x

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

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.264s (-1.5%) 1.017s (+1.1%) 0.753s 89 1.00x
🐘 Postgres Express 0.306s (-4.8%) 1.006s (~) 0.700s 90 1.16x
🐘 Postgres Nitro 0.353s (+9.4% 🔺) 1.018s (+1.2%) 0.665s 89 1.34x
💻 Local Express 1.565s (-20.0% 🟢) 2.052s (-16.9% 🟢) 0.487s 44 5.93x
💻 Local Nitro 1.940s (-4.2%) 2.377s (-3.7%) 0.437s 38 7.35x
💻 Local Next.js (Turbopack) 2.602s (-2.4%) 3.182s (+3.5%) 0.580s 29 9.86x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.670s (+57.5% 🔺) 4.768s (+32.8% 🔺) 2.098s 19 1.00x
▲ Vercel Express 2.934s (+72.9% 🔺) 4.752s (+34.4% 🔺) 1.818s 20 1.10x
▲ Vercel Next.js (Turbopack) 3.500s (+56.1% 🔺) 5.412s (+29.2% 🔺) 1.912s 17 1.31x

🔍 Observability: Nitro | Express | 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.480s (~) 3.087s (+1.7%) 2.607s 39 1.00x
🐘 Postgres Express 0.531s (+7.7% 🔺) 1.078s (+6.3% 🔺) 0.547s 112 1.11x
🐘 Postgres Nitro 0.536s (+2.2%) 1.050s (~) 0.514s 115 1.12x
💻 Local Express 7.925s (-19.0% 🟢) 8.491s (-20.0% 🟢) 0.567s 15 16.52x
💻 Local Next.js (Turbopack) 9.793s (-2.7%) 10.863s (-2.3%) 1.071s 12 20.41x
💻 Local Nitro 10.117s (+8.1% 🔺) 10.697s (+5.8% 🔺) 0.581s 12 21.09x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.208s (+45.6% 🔺) 5.334s (+29.8% 🔺) 2.126s 23 1.00x
▲ Vercel Express 3.762s (+55.1% 🔺) 6.147s (+40.5% 🔺) 2.385s 20 1.17x
▲ Vercel Next.js (Turbopack) 5.437s (+53.4% 🔺) 7.705s (+42.2% 🔺) 2.268s 16 1.69x

🔍 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 🥇 Express 1.131s (-3.6%) 2.003s (~) 0.008s (-31.7% 🟢) 2.014s (~) 0.883s 10 1.00x
💻 Local Next.js (Turbopack) 1.142s (-1.0%) 2.003s (~) 0.010s (-16.9% 🟢) 2.017s (~) 0.875s 10 1.01x
🐘 Postgres Next.js (Turbopack) 1.151s (-1.7%) 2.000s (~) 0.001s (-16.7% 🟢) 2.010s (~) 0.859s 10 1.02x
🐘 Postgres Express 1.158s (-1.7%) 2.000s (~) 0.001s (-28.6% 🟢) 2.010s (~) 0.852s 10 1.02x
💻 Local Nitro 1.168s (+1.6%) 2.005s (~) 0.012s (+33.7% 🔺) 2.019s (~) 0.852s 10 1.03x
🐘 Postgres Nitro 1.168s (~) 1.995s (~) 0.002s (-15.8% 🟢) 2.011s (~) 0.843s 10 1.03x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.276s (+7.9% 🔺) 3.426s (+1.3%) 2.068s (+24.6% 🔺) 5.982s (+8.0% 🔺) 3.706s 10 1.00x
▲ Vercel Express 2.372s (+5.0% 🔺) 3.631s (+6.5% 🔺) 2.161s (-20.2% 🟢) 6.302s (-7.5% 🟢) 3.930s 10 1.04x
▲ Vercel Nitro 2.420s (+12.3% 🔺) 3.510s (+2.9%) 3.165s (+98.9% 🔺) 7.139s (+27.9% 🔺) 4.719s 10 1.06x

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

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.459s (-7.9% 🟢) 2.007s (~) 0.011s (-13.7% 🟢) 2.020s (~) 0.560s 30 1.00x
💻 Local Nitro 1.582s (~) 2.010s (~) 0.011s (-9.6% 🟢) 2.025s (~) 0.443s 30 1.08x
🐘 Postgres Next.js (Turbopack) 1.593s (~) 2.013s (~) 0.005s (+8.1% 🔺) 2.028s (~) 0.435s 30 1.09x
💻 Local Next.js (Turbopack) 1.595s (-1.5%) 2.009s (~) 0.012s (-2.9%) 2.026s (~) 0.432s 30 1.09x
🐘 Postgres Express 1.611s (+1.6%) 2.005s (~) 0.005s (+6.0% 🔺) 2.028s (~) 0.417s 30 1.10x
🐘 Postgres Nitro 1.655s (+0.8%) 2.005s (-1.6%) 0.005s (+4.7%) 2.028s (-1.5%) 0.373s 30 1.13x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 6.263s (+2.1%) 7.880s (~) 0.262s (-7.7% 🟢) 8.596s (-0.9%) 2.333s 8 1.00x
▲ Vercel Nitro 6.325s (+10.5% 🔺) 7.847s (+3.6%) 0.214s (-30.8% 🟢) 8.567s (+1.7%) 2.242s 8 1.01x
▲ Vercel Next.js (Turbopack) 6.740s (+13.5% 🔺) 8.110s (+6.7% 🔺) 0.308s (-6.6% 🟢) 8.894s (+5.1% 🔺) 2.154s 7 1.08x

🔍 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.725s (-5.1% 🟢) 1.009s (-5.1% 🟢) 0.000s (+Infinity% 🔺) 1.037s (-3.9%) 0.313s 59 1.00x
🐘 Postgres Next.js (Turbopack) 0.788s (+3.5%) 1.111s (+2.1%) 0.000s (+322.2% 🔺) 1.127s (+2.8%) 0.339s 54 1.09x
🐘 Postgres Nitro 0.793s (+3.2%) 1.104s (~) 0.000s (~) 1.119s (~) 0.326s 54 1.09x
💻 Local Express 1.127s (-14.8% 🟢) 1.859s (-7.6% 🟢) 0.000s (-66.9% 🟢) 1.862s (-7.6% 🟢) 0.735s 33 1.56x
💻 Local Nitro 1.346s (-1.4%) 2.013s (~) 0.001s (+25.0% 🔺) 2.016s (~) 0.669s 30 1.86x
💻 Local Next.js (Turbopack) 1.497s (+3.4%) 2.013s (~) 0.000s (-33.3% 🟢) 2.017s (~) 0.520s 30 2.07x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.755s (-21.0% 🟢) 5.013s (-24.0% 🟢) 0.000s (NaN%) 5.479s (-23.1% 🟢) 1.725s 12 1.00x
▲ Vercel Next.js (Turbopack) 3.952s (-6.6% 🟢) 5.373s (-13.5% 🟢) 0.000s (-90.4% 🟢) 5.881s (-13.6% 🟢) 1.929s 11 1.05x
▲ Vercel Express 3.994s (+18.3% 🔺) 5.243s (+3.9%) 0.007s (+3850.0% 🔺) 5.806s (+4.4%) 1.812s 11 1.06x

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

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.611s (+5.3% 🔺) 2.175s (+3.5%) 0.000s (-100.0% 🟢) 2.189s (+1.7%) 0.578s 28 1.00x
🐘 Postgres Next.js (Turbopack) 1.834s (-3.9%) 2.440s (-4.1%) 0.000s (+Infinity% 🔺) 2.448s (-4.0%) 0.615s 25 1.14x
🐘 Postgres Nitro 1.886s (+14.0% 🔺) 2.381s (+7.5% 🔺) 0.000s (+107.7% 🔺) 2.396s (+7.4% 🔺) 0.509s 26 1.17x
💻 Local Express 2.611s (-28.3% 🟢) 3.024s (-28.5% 🟢) 0.001s (-25.0% 🟢) 3.030s (-28.4% 🟢) 0.419s 20 1.62x
💻 Local Nitro 3.451s (-1.4%) 4.162s (+5.1% 🔺) 0.001s (-11.1% 🟢) 4.166s (+4.8%) 0.715s 15 2.14x
💻 Local Next.js (Turbopack) 4.281s (+3.9%) 4.721s (+2.6%) 0.001s (-40.2% 🟢) 4.725s (+2.5%) 0.445s 13 2.66x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.794s (-15.8% 🟢) 6.293s (-11.9% 🟢) 0.000s (-100.0% 🟢) 6.815s (-11.7% 🟢) 2.021s 9 1.00x
▲ Vercel Next.js (Turbopack) 5.566s (+5.1% 🔺) 7.160s (+5.5% 🔺) 0.000s (NaN%) 7.700s (+5.2% 🔺) 2.134s 8 1.16x
▲ Vercel Express ⚠️ missing - - - - -

🔍 Observability: Nitro | Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Express 21/21
🐘 Postgres Next.js (Turbopack) 11/21
▲ Vercel Nitro 9/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 11/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

@github-actions

github-actions Bot commented Jun 20, 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

@ijjk ijjk force-pushed the ijjk/remove-next-lazy-discovery branch from 36ae8a0 to 2577057 Compare June 20, 2026 17:49
@ijjk ijjk force-pushed the ijjk/remove-next-lazy-discovery branch from 849f57a to a3a7c62 Compare June 20, 2026 18:30
@ijjk ijjk force-pushed the ijjk/remove-next-lazy-discovery branch from a3a7c62 to cee9416 Compare June 20, 2026 19:07
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