Skip to content

Conversation

@ijjk
Copy link
Member

@ijjk ijjk commented Feb 7, 2026

This is a revival of #640 which hooks into a new experimental feature I added in Next.js called deferredEntries and onBeforeDeferredEntries (vercel/next.js#88347).

That feature allows us to bring back lazy discovery as it avoids the race conditions and hacky promise locking in the loader approach we previously tried.

In a follow-up PR we will also update to no longer use esbuild for stepsbundling at all which will fix cases like this #766.

The eager discovery approach is still needed for older Next.js versions that don't have the deferredEntries feature.

x-ref: #523
x-ref: #469
x-ref: #691

@changeset-bot
Copy link

changeset-bot bot commented Feb 7, 2026

🦋 Changeset detected

Latest commit: f651f1b

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

This PR includes changesets to release 14 packages
Name Type
@workflow/builders Patch
@workflow/core Patch
@workflow/next Patch
@workflow/astro Patch
@workflow/cli Patch
@workflow/nest Patch
@workflow/nitro Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite Patch
@workflow/web-shared Patch
workflow Patch
@workflow/world-testing 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

@vercel
Copy link
Contributor

vercel bot commented Feb 7, 2026

@github-actions
Copy link
Contributor

github-actions bot commented Feb 7, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 490 0 38 528
✅ 💻 Local Development 418 0 62 480
✅ 📦 Local Production 418 0 62 480
✅ 🐘 Local Postgres 418 0 62 480
✅ 🪟 Windows 45 0 3 48
❌ 🌍 Community Worlds 106 41 9 156
✅ 📋 Other 123 0 21 144
Total 2018 41 257 2316

❌ Failed Tests

🌍 Community Worlds (41 failed)

turso (41 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • 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
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 44 0 4
✅ example 44 0 4
✅ express 44 0 4
✅ fastify 44 0 4
✅ hono 44 0 4
✅ nextjs-turbopack 47 0 1
✅ nextjs-webpack 47 0 1
✅ nitro 44 0 4
✅ nuxt 44 0 4
✅ sveltekit 44 0 4
✅ vite 44 0 4
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 41 0 7
✅ express-stable 41 0 7
✅ fastify-stable 41 0 7
✅ hono-stable 41 0 7
✅ nextjs-turbopack-stable 45 0 3
✅ nextjs-webpack-stable 45 0 3
✅ nitro-stable 41 0 7
✅ nuxt-stable 41 0 7
✅ sveltekit-stable 41 0 7
✅ vite-stable 41 0 7
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 41 0 7
✅ express-stable 41 0 7
✅ fastify-stable 41 0 7
✅ hono-stable 41 0 7
✅ nextjs-turbopack-stable 45 0 3
✅ nextjs-webpack-stable 45 0 3
✅ nitro-stable 41 0 7
✅ nuxt-stable 41 0 7
✅ sveltekit-stable 41 0 7
✅ vite-stable 41 0 7
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 41 0 7
✅ express-stable 41 0 7
✅ fastify-stable 41 0 7
✅ hono-stable 41 0 7
✅ nextjs-turbopack-stable 45 0 3
✅ nextjs-webpack-stable 45 0 3
✅ nitro-stable 41 0 7
✅ nuxt-stable 41 0 7
✅ sveltekit-stable 41 0 7
✅ vite-stable 41 0 7
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 45 0 3
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 3 0 0
✅ mongodb 45 0 3
✅ redis-dev 3 0 0
✅ redis 45 0 3
✅ starter-dev 3 0 0
✅ turso-dev 3 0 0
❌ turso 4 41 3
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 41 0 7
✅ e2e-local-postgres-nest-stable 41 0 7
✅ e2e-local-prod-nest-stable 41 0 7

📋 View full workflow run

@github-actions
Copy link
Contributor

github-actions bot commented Feb 7, 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.033s (-11.9% 🟢) 1.006s (~) 0.973s 10 1.00x
💻 Local Express 0.034s (+5.2% 🔺) 1.005s (~) 0.971s 10 1.05x
💻 Local Next.js (Turbopack) 0.046s 1.005s 0.959s 10 1.41x
🌐 Redis Next.js (Turbopack) 0.049s 1.005s 0.956s 10 1.49x
🌐 MongoDB Next.js (Turbopack) 0.093s 1.007s 0.914s 10 2.86x
🐘 Postgres Nitro 0.136s (-57.7% 🟢) 1.009s (~) 0.873s 10 4.18x
🐘 Postgres Express 0.159s (+49.4% 🔺) 1.011s (~) 0.851s 10 4.88x
🐘 Postgres Next.js (Turbopack) 0.367s 1.009s 0.642s 10 11.25x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 0.910s (-12.8% 🟢) 2.569s (-9.1% 🟢) 1.659s 10 1.00x
▲ Vercel Nitro 0.943s (+9.1% 🔺) 2.639s (+15.2% 🔺) 1.696s 10 1.04x
▲ Vercel Express 0.959s (+15.4% 🔺) 2.736s (+16.5% 🔺) 1.776s 10 1.05x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.100s 2.006s 0.906s 10 1.00x
💻 Local Nitro 1.105s (~) 2.005s (~) 0.901s 10 1.00x
💻 Local Next.js (Turbopack) 1.106s 2.005s 0.899s 10 1.01x
💻 Local Express 1.112s (~) 2.005s (~) 0.893s 10 1.01x
🌐 MongoDB Next.js (Turbopack) 1.320s 2.008s 0.688s 10 1.20x
🐘 Postgres Next.js (Turbopack) 2.095s 2.713s 0.618s 10 1.90x
🐘 Postgres Express 2.328s (-6.5% 🟢) 3.014s (~) 0.686s 10 2.12x
🐘 Postgres Nitro 2.363s (-2.6%) 3.013s (~) 0.650s 10 2.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.755s (+4.1%) 4.176s (+8.4% 🔺) 1.421s 10 1.00x
▲ Vercel Nitro 2.805s (+1.7%) 3.921s (+4.9%) 1.115s 10 1.02x
▲ Vercel Next.js (Turbopack) 2.817s (~) 4.149s (+3.1%) 1.332s 10 1.02x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 10.707s 11.023s 0.316s 3 1.00x
💻 Local Next.js (Turbopack) 10.749s 11.023s 0.274s 3 1.00x
💻 Local Nitro 10.831s (~) 11.022s (~) 0.191s 3 1.01x
💻 Local Express 10.875s (~) 11.024s (~) 0.149s 3 1.02x
🌐 MongoDB Next.js (Turbopack) 12.278s 13.021s 0.743s 3 1.15x
🐘 Postgres Next.js (Turbopack) 15.382s 16.043s 0.661s 2 1.44x
🐘 Postgres Nitro 20.372s (~) 21.056s (~) 0.684s 2 1.90x
🐘 Postgres Express 20.416s (~) 21.056s (~) 0.640s 2 1.91x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 20.990s (+6.8% 🔺) 22.238s (+5.5% 🔺) 1.248s 2 1.00x
▲ Vercel Nitro 21.200s (+6.3% 🔺) 22.482s (+7.9% 🔺) 1.282s 2 1.01x
▲ Vercel Express 21.593s (+10.1% 🔺) 23.061s (+7.8% 🔺) 1.467s 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
🌐 Redis 🥇 Next.js (Turbopack) 26.897s 27.051s 0.154s 3 1.00x
💻 Local Next.js (Turbopack) 27.222s 28.054s 0.833s 3 1.01x
💻 Local Nitro 27.441s (~) 28.052s (~) 0.611s 3 1.02x
💻 Local Express 27.617s (~) 28.054s (~) 0.437s 3 1.03x
🌐 MongoDB Next.js (Turbopack) 30.499s 31.040s 0.541s 2 1.13x
🐘 Postgres Nitro 38.181s (-24.1% 🟢) 38.592s (-24.5% 🟢) 0.411s 2 1.42x
🐘 Postgres Next.js (Turbopack) 41.733s 42.105s 0.372s 2 1.55x
🐘 Postgres Express 50.181s (~) 51.129s (+1.0%) 0.948s 2 1.87x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 55.943s (+10.2% 🔺) 56.818s (+8.5% 🔺) 0.875s 2 1.00x
▲ Vercel Nitro 58.693s (+14.5% 🔺) 60.851s (+15.8% 🔺) 2.158s 1 1.05x
▲ Vercel Express 59.361s (+21.8% 🔺) 60.562s (+21.8% 🔺) 1.201s 1 1.06x

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

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 54.388s 55.098s 0.711s 2 1.00x
💻 Local Next.js (Turbopack) 56.733s 57.105s 0.372s 2 1.04x
💻 Local Nitro 57.111s (~) 57.601s (+0.9%) 0.490s 2 1.05x
💻 Local Express 57.432s (+0.5%) 58.106s (~) 0.673s 2 1.06x
🌐 MongoDB Next.js (Turbopack) 61.467s 62.084s 0.617s 2 1.13x
🐘 Postgres Nitro 75.350s (-24.8% 🟢) 76.169s (-24.0% 🟢) 0.819s 2 1.39x
🐘 Postgres Next.js (Turbopack) 100.193s 100.232s 0.039s 1 1.84x
🐘 Postgres Express 100.327s (+33.2% 🔺) 101.242s (+32.9% 🔺) 0.915s 1 1.84x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 115.101s (+11.6% 🔺) 116.281s (+11.0% 🔺) 1.180s 1 1.00x
▲ Vercel Express 115.237s (+9.2% 🔺) 117.235s (+9.9% 🔺) 1.998s 1 1.00x
▲ Vercel Next.js (Turbopack) 118.912s (+9.6% 🔺) 119.670s (+8.2% 🔺) 0.758s 1 1.03x

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

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.273s 2.006s 0.733s 15 1.00x
💻 Local Next.js (Turbopack) 1.396s 2.005s 0.610s 15 1.10x
💻 Local Nitro 1.400s (~) 2.005s (~) 0.605s 15 1.10x
💻 Local Express 1.412s (+1.2%) 2.006s (~) 0.594s 15 1.11x
🌐 MongoDB Next.js (Turbopack) 2.167s 3.009s 0.842s 10 1.70x
🐘 Postgres Next.js (Turbopack) 2.312s 3.013s 0.702s 10 1.82x
🐘 Postgres Express 2.363s (+20.3% 🔺) 3.013s (+31.2% 🔺) 0.650s 10 1.86x
🐘 Postgres Nitro 2.375s (+4.5%) 2.921s (-3.1%) 0.546s 11 1.87x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.358s (+19.0% 🔺) 4.902s (+26.6% 🔺) 1.544s 7 1.00x
▲ Vercel Nitro 3.375s (+11.6% 🔺) 4.896s (+15.2% 🔺) 1.521s 7 1.01x
▲ Vercel Next.js (Turbopack) 4.960s (+50.1% 🔺) 6.334s (+35.8% 🔺) 1.373s 5 1.48x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 2.439s 3.009s 0.569s 10 1.00x
🌐 Redis Next.js (Turbopack) 2.485s 3.008s 0.523s 10 1.02x
💻 Local Nitro 2.566s (+3.2%) 3.007s (~) 0.442s 10 1.05x
💻 Local Express 2.611s (+4.2%) 3.009s (~) 0.398s 10 1.07x
🌐 MongoDB Next.js (Turbopack) 4.784s 5.179s 0.395s 6 1.96x
🐘 Postgres Nitro 8.777s (-2.0%) 9.280s (-2.7%) 0.502s 4 3.60x
🐘 Postgres Express 9.033s (-9.1% 🟢) 9.528s (-7.3% 🟢) 0.495s 4 3.70x
🐘 Postgres Next.js (Turbopack) 11.976s 12.370s 0.394s 3 4.91x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.035s (+10.6% 🔺) 6.061s (+27.6% 🔺) 2.026s 5 1.00x
▲ Vercel Next.js (Turbopack) 6.049s (+76.9% 🔺) 7.180s (+45.8% 🔺) 1.131s 5 1.50x
▲ Vercel Nitro 11.916s (-23.0% 🟢) 13.328s (-19.4% 🟢) 1.413s 5 2.95x

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

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 4.047s 4.582s 0.535s 7 1.00x
💻 Local Nitro 7.150s (+2.5%) 8.023s (+6.7% 🔺) 0.873s 4 1.77x
💻 Local Next.js (Turbopack) 7.273s 7.766s 0.493s 4 1.80x
💻 Local Express 7.335s (+1.2%) 8.020s (~) 0.685s 4 1.81x
🌐 MongoDB Next.js (Turbopack) 9.922s 10.351s 0.429s 3 2.45x
🐘 Postgres Express 49.130s (-4.4%) 50.130s (-3.8%) 1.000s 1 12.14x
🐘 Postgres Nitro 51.672s (+12.7% 🔺) 52.142s (+13.0% 🔺) 0.470s 1 12.77x
🐘 Postgres Next.js (Turbopack) 53.529s 54.133s 0.604s 1 13.23x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.102s (+55.6% 🔺) 6.417s (+48.8% 🔺) 1.315s 5 1.00x
▲ Vercel Next.js (Turbopack) 5.971s (+32.8% 🔺) 7.046s (+11.6% 🔺) 1.075s 5 1.17x
▲ Vercel Express 6.645s (+64.8% 🔺) 8.284s (+48.9% 🔺) 1.639s 4 1.30x

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

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.274s 2.006s 0.732s 15 1.00x
💻 Local Next.js (Turbopack) 1.417s 2.005s 0.588s 15 1.11x
💻 Local Nitro 1.424s (-1.4%) 2.005s (~) 0.581s 15 1.12x
💻 Local Express 1.437s (+0.7%) 2.005s (~) 0.568s 15 1.13x
🐘 Postgres Nitro 2.081s (-5.5% 🟢) 2.833s (+12.8% 🔺) 0.752s 11 1.63x
🐘 Postgres Express 2.104s (-1.6%) 2.831s (+12.7% 🔺) 0.726s 11 1.65x
🐘 Postgres Next.js (Turbopack) 2.146s 2.743s 0.597s 11 1.68x
🌐 MongoDB Next.js (Turbopack) 2.147s 3.008s 0.861s 10 1.68x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.288s (+2.7%) 5.009s (+15.8% 🔺) 1.721s 6 1.00x
▲ Vercel Express 5.551s (+74.2% 🔺) 7.000s (+50.4% 🔺) 1.449s 5 1.69x
▲ Vercel Nitro 6.537s (+104.4% 🔺) 8.017s (+79.6% 🔺) 1.480s 4 1.99x

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

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 2.498s 3.008s 0.509s 10 1.00x
💻 Local Nitro 2.662s (+0.9%) 3.007s (~) 0.346s 10 1.07x
💻 Local Next.js (Turbopack) 2.727s 3.110s 0.384s 10 1.09x
💻 Local Express 2.742s (+3.1%) 3.008s (~) 0.266s 10 1.10x
🌐 MongoDB Next.js (Turbopack) 4.785s 5.177s 0.392s 6 1.92x
🐘 Postgres Express 10.405s (-7.5% 🟢) 11.032s (-5.7% 🟢) 0.627s 3 4.16x
🐘 Postgres Nitro 10.466s (-13.4% 🟢) 11.029s (-10.8% 🟢) 0.563s 3 4.19x
🐘 Postgres Next.js (Turbopack) 12.867s 13.369s 0.502s 3 5.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.120s (+2.1%) 4.434s (+3.3%) 1.314s 7 1.00x
▲ Vercel Next.js (Turbopack) 3.188s (-2.3%) 4.402s (-1.6%) 1.213s 7 1.02x
▲ Vercel Express 4.371s (+42.1% 🔺) 6.065s (+40.4% 🔺) 1.695s 5 1.40x

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

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 4.081s 4.726s 0.645s 7 1.00x
💻 Local Nitro 7.864s (+2.4%) 8.019s (~) 0.155s 4 1.93x
💻 Local Next.js (Turbopack) 8.450s 9.021s 0.571s 4 2.07x
💻 Local Express 8.467s (+10.3% 🔺) 9.025s (+12.6% 🔺) 0.558s 4 2.07x
🌐 MongoDB Next.js (Turbopack) 9.945s 10.686s 0.741s 3 2.44x
🐘 Postgres Nitro 51.506s (+1.7%) 52.117s (+1.9%) 0.611s 1 12.62x
🐘 Postgres Next.js (Turbopack) 51.819s 52.123s 0.304s 1 12.70x
🐘 Postgres Express 52.330s (~) 53.118s (~) 0.788s 1 12.82x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.906s (+12.3% 🔺) 5.790s (+18.9% 🔺) 1.884s 6 1.00x
▲ Vercel Nitro 4.247s (-2.4%) 5.769s (~) 1.521s 6 1.09x
▲ Vercel Next.js (Turbopack) 5.724s (+54.5% 🔺) 7.023s (+39.4% 🔺) 1.298s 5 1.47x

🔍 Observability: Express | Nitro | 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
🌐 Redis 🥇 Next.js (Turbopack) 0.143s 1.000s 0.001s 1.007s 0.864s 10 1.00x
💻 Local Next.js (Turbopack) 0.155s 1.000s 0.010s 1.014s 0.859s 10 1.08x
💻 Local Nitro 0.172s (+2.8%) 1.003s (~) 0.010s (+1.0%) 1.015s (~) 0.843s 10 1.20x
💻 Local Express 0.180s (+4.2%) 1.003s (~) 0.010s (-3.8%) 1.016s (~) 0.836s 10 1.26x
🌐 MongoDB Next.js (Turbopack) 0.506s 0.945s 0.001s 1.009s 0.503s 10 3.53x
🐘 Postgres Next.js (Turbopack) 1.321s 1.723s 0.001s 2.012s 0.691s 10 9.22x
🐘 Postgres Nitro 1.401s (-39.9% 🟢) 1.639s (-39.5% 🟢) 0.001s (~) 2.013s (-33.2% 🟢) 0.612s 10 9.78x
🐘 Postgres Express 2.434s (+67.3% 🔺) 2.607s (+56.8% 🔺) 0.001s (~) 3.013s (+49.8% 🔺) 0.579s 10 17.00x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.106s (+15.8% 🔺) 3.562s (+9.4% 🔺) 0.297s (+11.5% 🔺) 4.689s (+8.1% 🔺) 1.582s 10 1.00x
▲ Vercel Nitro 3.368s (+27.1% 🔺) 4.238s (+36.8% 🔺) 0.290s (+72.7% 🔺) 5.515s (+35.3% 🔺) 2.147s 10 1.08x
▲ Vercel Express 3.522s (+15.4% 🔺) 4.198s (+16.3% 🔺) 0.311s (+95.0% 🔺) 5.505s (+22.9% 🔺) 1.983s 10 1.13x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Next.js (Turbopack) 7/12
🐘 Postgres Nitro 6/12
▲ Vercel Next.js (Turbopack) 5/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 💻 Local 10/12
Next.js (Turbopack) 🌐 Redis 10/12
Nitro 💻 Local 10/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
  • 🌐 Starter: Community world (local development)
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run

@ijjk ijjk force-pushed the ijjk/lazy-deferred-entries branch from c2f801c to 569c87b Compare February 7, 2026 21:24
@ijjk ijjk merged commit a5935ab into main Feb 10, 2026
94 of 96 checks passed
@ijjk ijjk deleted the ijjk/lazy-deferred-entries branch February 10, 2026 20:04
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.

3 participants