Skip to content

fix(core): add world-init side-effect module to fix cold-start MODULE_NOT_FOUND#1951

Merged
VaguelySerious merged 5 commits intomainfrom
peter/fix-cold-start-world-init
May 9, 2026
Merged

fix(core): add world-init side-effect module to fix cold-start MODULE_NOT_FOUND#1951
VaguelySerious merged 5 commits intomainfrom
peter/fix-cold-start-world-init

Conversation

@VaguelySerious
Copy link
Copy Markdown
Member

Summary

Fixes a v2-flow cold-start regression where the first server request through start() on a fresh function instance throws:

POST /api/review/submit -> 500
{"status":"error","message":"Failed to start PR workflow",
 "error":"Cannot find module './world.js'"}
  at .next/server/app/api/review/submit/route.js:25:11
  at async getWorldLazy (.../runtime/get-world-lazy.js:42:26)

Reproduced in vade-review against the latest workflow tarballs.

Why it happens

getWorldLazy() was designed around two paths: the globalThis cache (populated by world.ts's module-load side effect) or a runtime-built dynamic import('./world.js') as a last resort.

Both fail on a cold serverless invocation when the consumer only uses start:

  1. Tree-shaking drops world.ts. Webpack/Turbopack walk workflow/api → @workflow/core/runtime → start.ts. The named import { getWorld } from './runtime/world.js' in runtime.ts is unused after tree-shaking the re-export, so the bundler removes the entire import — taking world.ts's module evaluation with it. The globalThis[GetWorldFnKey] ??= getWorld registration never fires.

  2. The dynamic-import fallback can't survive bundling. The specifier ./world.js is built at runtime to evade bundler tracing, but webpack inlines get-world-lazy.js into the bundled route file. At runtime the relative specifier resolves against /var/task/<app>/.next/server/app/<route>/route.js, where no sibling world.js exists. Node throws MODULE_NOT_FOUND.

The symptom is flake-shaped: once any other code path (queue-driven /flow, an admin route that uses getWorld directly, …) has loaded world.ts, subsequent calls succeed for the rest of the process lifetime — so dev environments where everything tends to be warmed don't reproduce, but first prod traffic into a fresh function does.

Fix

A new server-only side-effect module @workflow/core/runtime/world-init:

// packages/core/src/runtime/world-init.ts
import './world.js';

Imported once from packages/workflow/src/api.ts (the host file behind workflow/api's default condition):

// Side-effect import: ensure `world.ts` is loaded so its module-load
// `globalThis[GetWorldFnKey] ??= getWorld` registration fires before any
// host route reaches `getWorldLazy()`. […]
import '@workflow/core/runtime/world-init';

VM and step bundles continue to skip world.ts: the export is resolved via the workflow condition to dist/workflow/world-init-stub.js, an empty module. The matching api-workflow.ts (the workflow condition entry for workflow/api) does not import world-init at all, so it stays out of the sandbox bundle entirely.

Why a separate module instead of importing ./world.js directly

world.ts is internal to @workflow/core and not part of the public exports surface. A dedicated public init entry:

  • Keeps the side-effect intent obvious to anyone reading workflow/api.
  • Lets the workflow export condition route to a stub for VM/step bundles.
  • Gives us a single place to anchor a regression test (world-init.test.ts) against the cross-module global handshake.

Reverification (end-to-end against vade-review)

Built the change into local tarballs via tarballs/scripts/pack.ts, served them locally, switched vade-review to point at them, then:

Bundle createLocalWorld createVercelWorld GetWorldFnKey
@workflow/core vendor chunk in route bundle (server) 0 → 1 0 → 1 0 → 3
flow/route.js (workflow VM) 0 (unchanged) 0 (unchanged) 0 (unchanged)
__step_registrations.js (step bundle) 0 (unchanged) 0 (unchanged) 0 (unchanged)

And the runtime check:

POST /api/review/submit (cold) -> 200
{"status":"success","runId":"wrun_01KQY45YFR91032VQF3Y3XN6WB", …}

(Same request before the fix returns 500 with Cannot find module './world.js'.)

Tests

packages/core/src/runtime/world-init.test.ts covers:

  1. Importing the module registers getWorld on globalThis.
  2. getWorldLazy() resolves through the registered global (sentinel-based, so a real getWorld() from world.ts can't accidentally satisfy the assertion).
  3. The ??= assignment is idempotent — re-importing does not clobber a prior registration.

pnpm --filter @workflow/core test passes 944/944 unit tests.

The dynamic-import fallback in get-world-lazy.ts is preserved as defense-in-depth for environments outside the documented configurations (CJS test runners, scripts that import deeply into @workflow/core without going through workflow/api, future bundlers with stricter tree-shaking). The docstring on get-world-lazy.ts now spells out the resolution-priority order so future readers understand why all three branches exist.

Maintenance considerations

The fix relies on a precise contract: any host-side entry point that ends up using getWorldLazy() needs to either import @workflow/core/runtime/world-init itself or transitively reach world.ts through a non-tree-shakeable path. The host-side workflow/api covers the common case (every consumer that uses start, getRun, resumeHook, …). A maintenance note in world-init.ts calls this out, and world-init.test.ts is the natural place to add a regression test if a new entry point is added.

Documented in docs/content/docs/changelog/eager-processing.mdx under the new "Cold-Start MODULE_NOT_FOUND: './world.js'" section.

Test plan

  • pnpm --filter @workflow/core test (944/944 pass)
  • pnpm --filter @workflow/core --filter workflow build clean
  • pnpm --filter @workflow/core --filter workflow typecheck clean
  • pnpm biome check (lint clean on changed files)
  • End-to-end smoke against vade-review with local tarballs: cold-start POST /api/review/submit returns 200, workflow runs through inline step executor as expected
  • Static check: workflow VM and step bundles unchanged (no world-init, no world.ts references)
  • CI green
  • e2e suite against deployed tarball preview

🤖 Generated with Claude Code

…_NOT_FOUND

Webpack/Turbopack tree-shake `runtime/world.ts` out of server routes that
only consume `start` (or other `getWorldLazy`-using helpers) from
`workflow/api`. The module-load side effect that registers `getWorld` on
`globalThis[GetWorldFnKey]` never fires, and `getWorldLazy()`'s dynamic
`import('./world.js')` fallback can't recover: the bundler inlined
`get-world-lazy.js` into the route file, so the relative specifier
resolves against `/var/task/<app>/.next/server/app/<route>/route.js`
where no sibling `world.js` exists. Node throws `MODULE_NOT_FOUND`.

The symptom is a cold-start regression: the very first user request
through `start()` on a fresh function instance fails. Once any other
code path (queue-driven `/flow`, an internal admin route that hits
`getWorld` directly, …) has loaded `world.ts`, the rest of the process
lifetime works fine — making this hard to catch in dev but reliable on
first prod traffic.

Reproduced in vade-review against the latest workflow tarballs:

  POST /api/review/submit -> 500
  {"status":"error","message":"Failed to start PR workflow",
   "error":"Cannot find module './world.js'"}
    at .next/server/app/api/review/submit/route.js:25:11
    at async getWorldLazy (.../runtime/get-world-lazy.js:42:26)

# Fix

A new server-only side-effect module `@workflow/core/runtime/world-init`
imports `./world.js` purely to fire its globalThis registration. It is
imported by `packages/workflow/src/api.ts` (the host file behind
`workflow/api`'s `default` condition) so every server bundle that
touches `workflow/api` loads `world.ts` regardless of which named
exports the consumer actually uses.

VM and step bundles continue to skip `world.ts`: the
`@workflow/core/runtime/world-init` export resolves via the `workflow`
condition to `dist/workflow/world-init-stub.js`, an empty module. The
matching `api-workflow.ts` (workflow/api's `workflow` condition entry)
does not import it.

Reverified end-to-end against vade-review with locally-packed tarballs:

- The `@workflow/core` vendor chunk in the host route bundle now
  includes `createLocalWorld`, `createVercelWorld`, and `GetWorldFnKey`
  (all 0 occurrences before this fix).
- The workflow VM bundle (`flow/route.js`) and step registrations
  bundle (`__step_registrations.js`) have 0 references to `world-init`,
  `world.ts`, `createLocalWorld`, or `createVercelWorld` — i.e. no
  regression on the sandbox-bundle hygiene side.
- Cold-start `POST /api/review/submit` succeeds on the first request
  after a fresh server boot (`runId: wrun_…` returned, workflow
  executes inline through the step executor as expected). Same request
  on `main` returns 500 with the MODULE_NOT_FOUND trace above.

# Tests

`world-init.test.ts` covers three contracts:
1. Importing the module registers `getWorld` on `globalThis`.
2. `getWorldLazy()` resolves through the registered global rather than
   falling through to the dynamic-import branch (sentinel-based proof).
3. The `??=` assignment is idempotent — re-importing does not clobber
   a prior registration.

The `getWorldLazy` dynamic-import fallback is preserved as
defense-in-depth for environments outside the documented configurations
(CJS test runners, scripts that import deeply into `@workflow/core`
without going through `workflow/api`).

Documented in `docs/content/docs/changelog/eager-processing.mdx` under
the "Cold-Start `MODULE_NOT_FOUND: './world.js'`" section, with a
maintenance note in `world-init.ts` for anyone adding new
`getWorldLazy` consumers reachable from a host route.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 6, 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 8, 2026 9:51am
example-nextjs-workflow-webpack Ready Ready Preview, Comment May 8, 2026 9:51am
example-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-astro-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-express-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-fastify-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-hono-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-nitro-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-nuxt-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-sveltekit-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-tanstack-start-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workbench-vite-workflow Ready Ready Preview, Comment May 8, 2026 9:51am
workflow-docs Ready Ready Preview, Comment, Open in v0 May 8, 2026 9:51am
workflow-swc-playground Ready Ready Preview, Comment May 8, 2026 9:51am
workflow-tarballs Ready Ready Preview, Comment May 8, 2026 9:51am
workflow-web Ready Ready Preview, Comment May 8, 2026 9:51am

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 6, 2026

🦋 Changeset detected

Latest commit: 30cc3a9

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

This PR includes changesets to release 18 packages
Name Type
@workflow/core Patch
workflow Patch
@workflow/builders Patch
@workflow/cli Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/vitest Patch
@workflow/web-shared Patch
@workflow/web Patch
@workflow/world-testing Patch
tarballs Patch
@workflow/ai 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
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 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.032s (-26.9% 🟢) 1.005s (~) 0.974s 10 1.00x
💻 Local Express 0.033s (-25.5% 🟢) 1.006s (~) 0.973s 10 1.05x
🐘 Postgres Nitro 0.043s (-54.3% 🟢) 1.011s (-3.1%) 0.968s 10 1.38x
🐘 Postgres Express 0.046s (-20.0% 🟢) 1.011s (~) 0.965s 10 1.47x
💻 Local Next.js (Turbopack) 0.047s 1.006s 0.959s 10 1.50x
🌐 Redis Next.js (Turbopack) 0.053s 1.005s 0.951s 10 1.70x
🐘 Postgres Next.js (Turbopack) 0.057s 1.011s 0.954s 10 1.80x
🌐 MongoDB Next.js (Turbopack) 0.074s 1.007s 0.933s 10 2.34x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.266s (-35.1% 🟢) 2.145s (-14.5% 🟢) 1.879s 10 1.00x
▲ Vercel Express 0.317s (+34.6% 🔺) 2.180s (+2.1%) 1.863s 10 1.19x
▲ Vercel Next.js (Turbopack) 0.677s (+169.3% 🔺) 2.406s (+3.1%) 1.728s 10 2.55x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.069s (-5.5% 🟢) 2.007s (~) 0.938s 10 1.00x
💻 Local Express 1.072s (-4.8%) 2.007s (~) 0.935s 10 1.00x
🐘 Postgres Nitro 1.081s (-5.2% 🟢) 2.009s (~) 0.928s 10 1.01x
🐘 Postgres Express 1.082s (-5.6% 🟢) 2.009s (~) 0.926s 10 1.01x
🌐 Redis Next.js (Turbopack) 1.113s 2.007s 0.894s 10 1.04x
💻 Local Next.js (Turbopack) 1.114s 2.006s 0.892s 10 1.04x
🐘 Postgres Next.js (Turbopack) 1.123s 2.012s 0.888s 10 1.05x
🌐 MongoDB Next.js (Turbopack) 1.167s 2.008s 0.841s 10 1.09x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.611s (-58.6% 🟢) 3.401s (-42.4% 🟢) 1.790s 10 1.00x
▲ Vercel Express 1.656s (-11.7% 🟢) 3.246s (-14.7% 🟢) 1.590s 10 1.03x
▲ Vercel Next.js (Turbopack) 3.655s (+79.6% 🔺) 5.054s (+31.9% 🔺) 1.400s 10 2.27x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 10.413s (-4.9%) 11.023s (~) 0.610s 3 1.00x
💻 Local Express 10.419s (-4.6%) 11.023s (~) 0.604s 3 1.00x
🐘 Postgres Express 10.438s (-4.8%) 11.019s (~) 0.582s 3 1.00x
🐘 Postgres Nitro 10.459s (-3.8%) 11.015s (~) 0.557s 3 1.00x
🌐 Redis Next.js (Turbopack) 10.682s 11.024s 0.342s 3 1.03x
💻 Local Next.js (Turbopack) 10.702s 11.021s 0.319s 3 1.03x
🐘 Postgres Next.js (Turbopack) 10.735s 11.019s 0.284s 3 1.03x
🌐 MongoDB Next.js (Turbopack) 10.769s 11.014s 0.245s 3 1.03x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 13.877s (-18.3% 🟢) 15.208s (-24.0% 🟢) 1.331s 2 1.00x
▲ Vercel Nitro 14.077s (-40.7% 🟢) 15.832s (-37.0% 🟢) 1.755s 2 1.01x
▲ Vercel Next.js (Turbopack) 14.957s (-13.6% 🟢) 16.922s (-12.8% 🟢) 1.965s 2 1.08x

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

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 13.472s (-7.6% 🟢) 14.018s (-6.7% 🟢) 0.546s 5 1.00x
🐘 Postgres Nitro 13.475s (-7.7% 🟢) 14.020s (-6.7% 🟢) 0.545s 5 1.00x
💻 Local Express 13.490s (-9.9% 🟢) 14.027s (-6.7% 🟢) 0.537s 5 1.00x
💻 Local Nitro 13.531s (-10.2% 🟢) 14.027s (-12.5% 🟢) 0.497s 5 1.00x
💻 Local Next.js (Turbopack) 14.058s 14.828s 0.770s 5 1.04x
🌐 Redis Next.js (Turbopack) 14.065s 14.830s 0.766s 5 1.04x
🐘 Postgres Next.js (Turbopack) 14.149s 15.015s 0.867s 4 1.05x
🌐 MongoDB Next.js (Turbopack) 14.242s 15.016s 0.774s 4 1.06x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 22.117s (-65.7% 🟢) 23.964s (-64.0% 🟢) 1.848s 3 1.00x
▲ Vercel Express 22.826s (-54.6% 🟢) 24.289s (-53.8% 🟢) 1.463s 3 1.03x
▲ Vercel Next.js (Turbopack) 24.619s (-53.2% 🟢) 26.557s (-51.4% 🟢) 1.938s 3 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
💻 Local 🥇 Express 11.916s (-28.2% 🟢) 12.148s (-28.7% 🟢) 0.231s 8 1.00x
💻 Local Nitro 11.943s (-28.8% 🟢) 12.147s (-28.7% 🟢) 0.205s 8 1.00x
🐘 Postgres Express 11.956s (-14.6% 🟢) 12.265s (-16.0% 🟢) 0.309s 8 1.00x
🐘 Postgres Nitro 12.131s (-13.1% 🟢) 13.019s (-9.0% 🟢) 0.888s 7 1.02x
🌐 Redis Next.js (Turbopack) 12.966s 13.025s 0.060s 7 1.09x
💻 Local Next.js (Turbopack) 13.011s 13.452s 0.441s 7 1.09x
🌐 MongoDB Next.js (Turbopack) 13.295s 14.020s 0.725s 7 1.12x
🐘 Postgres Next.js (Turbopack) 13.539s 14.163s 0.623s 7 1.14x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 35.899s (-70.4% 🟢) 37.180s (-69.9% 🟢) 1.281s 3 1.00x
▲ Vercel Next.js (Turbopack) 40.497s (-89.7% 🟢) 42.444s (-89.3% 🟢) 1.947s 3 1.13x
▲ Vercel Nitro 140.018s (-66.9% 🟢) 141.964s (-66.6% 🟢) 1.946s 3 3.90x

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

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.139s (-10.6% 🟢) 2.007s (~) 0.867s 15 1.00x
🐘 Postgres Express 1.153s (-8.5% 🟢) 2.007s (~) 0.854s 15 1.01x
💻 Local Nitro 1.185s (-27.3% 🟢) 2.006s (-3.3%) 0.820s 15 1.04x
💻 Local Express 1.188s (-20.2% 🟢) 2.005s (~) 0.817s 15 1.04x
🐘 Postgres Next.js (Turbopack) 1.219s 2.007s 0.788s 15 1.07x
🌐 Redis Next.js (Turbopack) 1.267s 2.007s 0.740s 15 1.11x
💻 Local Next.js (Turbopack) 1.281s 2.006s 0.725s 15 1.12x
🌐 MongoDB Next.js (Turbopack) 2.032s 2.828s 0.796s 11 1.78x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.322s (+17.9% 🔺) 4.914s (+13.7% 🔺) 1.592s 7 1.00x
▲ Vercel Express 3.644s (+27.4% 🔺) 5.163s (+11.7% 🔺) 1.520s 6 1.10x
▲ Vercel Next.js (Turbopack) 4.514s (+32.9% 🔺) 5.709s (+15.7% 🔺) 1.195s 6 1.36x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.202s (-48.9% 🟢) 2.007s (-33.3% 🟢) 0.805s 15 1.00x
🐘 Postgres Express 1.224s (-48.1% 🟢) 2.006s (-33.3% 🟢) 0.782s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.368s 2.007s 0.639s 15 1.14x
💻 Local Express 1.794s (-39.2% 🟢) 2.006s (-41.9% 🟢) 0.212s 15 1.49x
💻 Local Next.js (Turbopack) 1.811s 2.221s 0.411s 14 1.51x
💻 Local Nitro 1.920s (-38.9% 🟢) 2.221s (-42.8% 🟢) 0.301s 14 1.60x
🌐 Redis Next.js (Turbopack) 2.369s 3.009s 0.640s 10 1.97x
🌐 MongoDB Next.js (Turbopack) 3.584s 4.009s 0.425s 8 2.98x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.912s (-3.5%) 5.129s (-13.4% 🟢) 1.218s 6 1.00x
▲ Vercel Express 3.923s (+8.4% 🔺) 5.557s (+8.7% 🔺) 1.634s 6 1.00x
▲ Vercel Next.js (Turbopack) 5.320s (-25.1% 🟢) 6.959s (-21.9% 🟢) 1.639s 5 1.36x

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

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.312s (-62.3% 🟢) 2.007s (-49.9% 🟢) 0.694s 15 1.00x
🐘 Postgres Express 1.390s (-60.1% 🟢) 2.008s (-49.9% 🟢) 0.618s 15 1.06x
🐘 Postgres Next.js (Turbopack) 1.708s 2.074s 0.366s 15 1.30x
🌐 Redis Next.js (Turbopack) 3.669s 4.010s 0.341s 8 2.80x
💻 Local Next.js (Turbopack) 4.767s 5.178s 0.411s 6 3.63x
💻 Local Express 5.266s (-36.8% 🟢) 5.846s (-35.2% 🟢) 0.580s 6 4.01x
💻 Local Nitro 5.650s (-32.3% 🟢) 6.215s (-31.1% 🟢) 0.565s 5 4.31x
🌐 MongoDB Next.js (Turbopack) 6.295s 7.012s 0.717s 5 4.80x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.889s (+67.0% 🔺) 7.776s (+40.5% 🔺) 1.887s 4 1.00x
▲ Vercel Express 6.990s (+64.9% 🔺) 8.966s (+46.3% 🔺) 1.976s 4 1.19x
▲ Vercel Next.js (Turbopack) 7.420s (-16.8% 🟢) 9.108s (-16.9% 🟢) 1.689s 4 1.26x

🔍 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.143s (-9.0% 🟢) 2.009s (~) 0.866s 15 1.00x
🐘 Postgres Express 1.158s (-7.9% 🟢) 2.008s (~) 0.850s 15 1.01x
🐘 Postgres Next.js (Turbopack) 1.234s 2.007s 0.773s 15 1.08x
🌐 Redis Next.js (Turbopack) 1.245s 2.007s 0.762s 15 1.09x
💻 Local Next.js (Turbopack) 1.320s 2.006s 0.685s 15 1.15x
💻 Local Nitro 1.397s (-25.1% 🟢) 2.007s (-14.3% 🟢) 0.610s 15 1.22x
💻 Local Express 1.425s (-24.8% 🟢) 2.006s (-15.1% 🟢) 0.581s 15 1.25x
🌐 MongoDB Next.js (Turbopack) 2.025s 2.676s 0.651s 12 1.77x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.602s (+5.8% 🔺) 4.496s (+7.8% 🔺) 1.893s 7 1.00x
▲ Vercel Express 2.634s (+2.0%) 4.165s (-4.2%) 1.531s 8 1.01x
▲ Vercel Next.js (Turbopack) 5.269s (+79.7% 🔺) 6.926s (+49.2% 🔺) 1.657s 5 2.02x

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

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.220s (-47.8% 🟢) 2.009s (-33.3% 🟢) 0.789s 15 1.00x
🐘 Postgres Express 1.239s (-47.1% 🟢) 2.008s (-33.3% 🟢) 0.768s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.373s 2.009s 0.636s 15 1.13x
💻 Local Nitro 1.954s (-36.3% 🟢) 2.508s (-35.5% 🟢) 0.555s 12 1.60x
💻 Local Next.js (Turbopack) 2.086s 2.826s 0.741s 11 1.71x
💻 Local Express 2.089s (-33.3% 🟢) 2.591s (-31.1% 🟢) 0.502s 12 1.71x
🌐 Redis Next.js (Turbopack) 2.369s 3.008s 0.639s 10 1.94x
🌐 MongoDB Next.js (Turbopack) 3.569s 4.009s 0.440s 8 2.92x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.915s (+21.1% 🔺) 5.664s (+11.6% 🔺) 1.748s 6 1.00x
▲ Vercel Express 4.161s (+30.3% 🔺) 5.615s (+17.2% 🔺) 1.454s 6 1.06x
▲ Vercel Next.js (Turbopack) 5.249s (+67.0% 🔺) 7.069s (+56.3% 🔺) 1.820s 5 1.34x

🔍 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 🥇 Nitro 1.323s (-62.0% 🟢) 2.008s (-49.9% 🟢) 0.685s 15 1.00x
🐘 Postgres Express 1.367s (-60.9% 🟢) 2.008s (-49.9% 🟢) 0.640s 15 1.03x
🐘 Postgres Next.js (Turbopack) 1.663s 2.076s 0.413s 15 1.26x
🌐 Redis Next.js (Turbopack) 3.631s 4.010s 0.380s 8 2.74x
💻 Local Next.js (Turbopack) 5.333s 5.847s 0.514s 6 4.03x
💻 Local Nitro 5.595s (-38.8% 🟢) 6.213s (-38.0% 🟢) 0.619s 5 4.23x
💻 Local Express 6.142s (-30.2% 🟢) 6.615s (-28.7% 🟢) 0.473s 5 4.64x
🌐 MongoDB Next.js (Turbopack) 6.267s 7.013s 0.746s 5 4.74x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.994s (-6.6% 🟢) 7.526s (-8.0% 🟢) 1.532s 4 1.00x
▲ Vercel Nitro 6.261s (+22.9% 🔺) 7.602s (+11.5% 🔺) 1.342s 4 1.04x
▲ Vercel Next.js (Turbopack) 8.409s (+24.4% 🔺) 10.464s (+22.5% 🔺) 2.055s 4 1.40x

🔍 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 🥇 Nitro 0.443s (-46.1% 🟢) 1.006s (~) 0.563s 60 1.00x
💻 Local Nitro 0.472s (-51.9% 🟢) 1.004s (-8.2% 🟢) 0.532s 60 1.07x
🐘 Postgres Express 0.479s (-42.9% 🟢) 1.023s (~) 0.544s 59 1.08x
💻 Local Express 0.487s (-50.5% 🟢) 1.004s (-6.7% 🟢) 0.517s 60 1.10x
🌐 Redis Next.js (Turbopack) 0.628s 1.004s 0.376s 60 1.42x
🐘 Postgres Next.js (Turbopack) 0.682s 1.006s 0.325s 60 1.54x
💻 Local Next.js (Turbopack) 0.733s 1.004s 0.271s 60 1.66x
🌐 MongoDB Next.js (Turbopack) 0.740s 1.005s 0.265s 60 1.67x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.410s (-75.5% 🟢) 6.962s (-71.0% 🟢) 1.553s 9 1.00x
▲ Vercel Express 5.520s (-71.0% 🟢) 6.916s (-67.6% 🟢) 1.397s 9 1.02x
▲ Vercel Next.js (Turbopack) 7.888s (-45.6% 🟢) 9.952s (-38.1% 🟢) 2.063s 7 1.46x

🔍 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.036s (-47.6% 🟢) 1.738s (-23.0% 🟢) 0.701s 52 1.00x
🐘 Postgres Nitro 1.064s (-44.8% 🟢) 1.756s (-16.4% 🟢) 0.692s 52 1.03x
💻 Local Nitro 1.198s (-60.5% 🟢) 2.006s (-46.6% 🟢) 0.808s 45 1.16x
💻 Local Express 1.209s (-59.9% 🟢) 2.006s (-44.1% 🟢) 0.796s 45 1.17x
🌐 Redis Next.js (Turbopack) 1.528s 2.006s 0.478s 45 1.47x
🐘 Postgres Next.js (Turbopack) 1.613s 2.008s 0.395s 45 1.56x
💻 Local Next.js (Turbopack) 1.787s 2.006s 0.219s 45 1.72x
🌐 MongoDB Next.js (Turbopack) 1.846s 2.007s 0.161s 45 1.78x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 13.831s (-65.0% 🟢) 15.350s (-62.8% 🟢) 1.519s 6 1.00x
▲ Vercel Express 14.853s (-57.0% 🟢) 16.219s (-55.9% 🟢) 1.366s 6 1.07x
▲ Vercel Next.js (Turbopack) 18.299s (-63.3% 🟢) 20.444s (-60.5% 🟢) 2.145s 5 1.32x

🔍 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 🥇 Nitro 2.014s (-50.9% 🟢) 2.455s (-46.7% 🟢) 0.441s 49 1.00x
🐘 Postgres Express 2.091s (-47.6% 🟢) 2.638s (-39.6% 🟢) 0.547s 46 1.04x
💻 Local Express 2.705s (-70.6% 🟢) 3.032s (-69.7% 🟢) 0.327s 40 1.34x
💻 Local Nitro 2.734s (-70.6% 🟢) 3.058s (-69.5% 🟢) 0.323s 40 1.36x
🌐 Redis Next.js (Turbopack) 3.045s 3.596s 0.551s 34 1.51x
🐘 Postgres Next.js (Turbopack) 3.190s 4.009s 0.818s 30 1.58x
💻 Local Next.js (Turbopack) 3.829s 4.041s 0.212s 30 1.90x
🌐 MongoDB Next.js (Turbopack) 4.198s 5.011s 0.813s 24 2.08x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 43.602s (-66.5% 🟢) 45.647s (-65.5% 🟢) 2.045s 3 1.00x
▲ Vercel Nitro 44.236s (-54.4% 🟢) 45.638s (-53.6% 🟢) 1.402s 3 1.01x
▲ Vercel Next.js (Turbopack) 51.555s (-51.9% 🟢) 53.422s (-51.0% 🟢) 1.868s 3 1.18x

🔍 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 🥇 Nitro 0.173s (-39.0% 🟢) 1.006s (~) 0.833s 60 1.00x
🐘 Postgres Express 0.182s (-35.6% 🟢) 1.006s (~) 0.824s 60 1.05x
🐘 Postgres Next.js (Turbopack) 0.240s 1.006s 0.766s 60 1.39x
🌐 Redis Next.js (Turbopack) 0.268s 1.004s 0.736s 60 1.55x
💻 Local Express 0.458s (-18.2% 🟢) 1.004s (~) 0.546s 60 2.65x
💻 Local Nitro 0.463s (-23.5% 🟢) 1.004s (-1.7%) 0.542s 60 2.68x
💻 Local Next.js (Turbopack) 0.573s 1.021s 0.449s 59 3.32x
🌐 MongoDB Next.js (Turbopack) 1.034s 1.855s 0.821s 33 5.99x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.687s (+37.5% 🔺) 3.899s (+7.2% 🔺) 1.212s 16 1.00x
▲ Vercel Nitro 3.031s (+82.5% 🔺) 4.492s (+34.1% 🔺) 1.461s 14 1.13x
▲ Vercel Next.js (Turbopack) 4.229s (+109.1% 🔺) 5.850s (+54.2% 🔺) 1.620s 11 1.57x

🔍 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 🥇 Nitro 0.286s (-42.5% 🟢) 1.005s (~) 0.720s 90 1.00x
🐘 Postgres Express 0.315s (-38.2% 🟢) 1.006s (~) 0.691s 90 1.10x
🌐 Redis Next.js (Turbopack) 0.429s 1.004s 0.575s 90 1.50x
🐘 Postgres Next.js (Turbopack) 0.469s 1.006s 0.538s 90 1.64x
💻 Local Express 2.196s (-12.6% 🟢) 2.944s (-2.2%) 0.748s 31 7.69x
💻 Local Nitro 2.297s (-9.5% 🟢) 2.944s (-2.2%) 0.647s 31 8.04x
💻 Local Next.js (Turbopack) 2.330s 3.043s 0.713s 30 8.16x
🌐 MongoDB Next.js (Turbopack) 2.601s 3.007s 0.407s 30 9.11x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 12.072s (+274.2% 🔺) 13.573s (+181.5% 🔺) 1.501s 7 1.00x
▲ Vercel Express 13.078s (+329.3% 🔺) 14.715s (+206.1% 🔺) 1.637s 7 1.08x
▲ Vercel Next.js (Turbopack) 13.433s (+280.0% 🔺) 15.129s (+191.3% 🔺) 1.696s 6 1.11x

🔍 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 🥇 Nitro 0.575s (-27.2% 🟢) 1.005s (~) 0.430s 120 1.00x
🐘 Postgres Express 0.640s (-21.9% 🟢) 1.006s (-1.1%) 0.366s 120 1.11x
🌐 Redis Next.js (Turbopack) 0.779s 1.004s 0.225s 120 1.35x
🐘 Postgres Next.js (Turbopack) 0.956s 1.323s 0.367s 92 1.66x
🌐 MongoDB Next.js (Turbopack) 5.396s 6.013s 0.617s 20 9.38x
💻 Local Express 10.345s (-7.6% 🟢) 10.862s (-9.0% 🟢) 0.517s 12 17.98x
💻 Local Nitro 10.566s (-5.6% 🟢) 11.116s (-4.7%) 0.550s 11 18.36x
💻 Local Next.js (Turbopack) 11.432s 12.031s 0.600s 10 19.87x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 28.880s (+274.0% 🔺) 30.576s (+225.3% 🔺) 1.697s 5 1.00x
▲ Vercel Express 31.171s (+320.1% 🔺) 32.678s (+253.5% 🔺) 1.507s 4 1.08x
▲ Vercel Next.js (Turbopack) 44.930s (+335.0% 🔺) 47.142s (+283.7% 🔺) 2.211s 3 1.56x

🔍 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
🐘 Postgres 🥇 Nitro 1.132s (+452.0% 🔺) 2.002s (+100.3% 🔺) 0.001s (-6.7% 🟢) 2.010s (+98.8% 🔺) 0.879s 10 1.00x
💻 Local Express 1.132s (+468.5% 🔺) 2.005s (+99.6% 🔺) 0.012s (+0.8%) 2.019s (+98.3% 🔺) 0.887s 10 1.00x
🐘 Postgres Express 1.134s (+452.8% 🔺) 1.997s (+100.0% 🔺) 0.002s (-6.3% 🟢) 2.010s (+98.7% 🔺) 0.876s 10 1.00x
💻 Local Nitro 1.136s (+431.6% 🔺) 2.005s (+99.6% 🔺) 0.013s (+4.0%) 2.020s (+98.3% 🔺) 0.884s 10 1.00x
💻 Local Next.js (Turbopack) 1.174s 2.003s 0.010s 2.017s 0.843s 10 1.04x
🐘 Postgres Next.js (Turbopack) 1.216s 2.001s 0.001s 2.011s 0.794s 10 1.08x
🌐 MongoDB Next.js (Turbopack) ⚠️ missing - - - - -
🌐 Redis Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.351s (-6.2% 🟢) 3.005s (-26.5% 🟢) 2.600s (+170.7% 🔺) 6.002s (+7.4% 🔺) 3.651s 10 1.00x
▲ Vercel Nitro 2.379s (-37.9% 🟢) 3.086s (-41.5% 🟢) 2.537s (+241.8% 🔺) 6.025s (-7.1% 🟢) 3.646s 10 1.01x
▲ Vercel Next.js (Turbopack) 4.843s (-29.3% 🟢) 4.700s (-45.7% 🟢) 2.080s (+229.2% 🔺) 8.719s (-10.9% 🟢) 3.876s 10 2.06x

🔍 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 🥇 Nitro 1.489s (+138.6% 🔺) 2.006s (+99.3% 🔺) 0.003s (-16.2% 🟢) 2.023s (+97.8% 🔺) 0.534s 30 1.00x
💻 Local Nitro 1.521s (+81.3% 🔺) 2.012s (+98.8% 🔺) 0.010s (+1.7%) 2.024s (+81.4% 🔺) 0.503s 30 1.02x
🐘 Postgres Express 1.526s (+142.2% 🔺) 2.004s (+99.1% 🔺) 0.004s (-3.4%) 2.027s (+98.2% 🔺) 0.501s 30 1.02x
🐘 Postgres Next.js (Turbopack) 1.674s 2.009s 0.004s 2.026s 0.352s 30 1.12x
💻 Local Next.js (Turbopack) 1.842s 2.010s 0.010s 2.202s 0.360s 28 1.24x
💻 Local Express 1.936s (+155.7% 🔺) 2.011s (+95.5% 🔺) 0.008s (-13.7% 🟢) 2.422s (+132.9% 🔺) 0.486s 25 1.30x
🌐 MongoDB Next.js (Turbopack) ⚠️ missing - - - - -
🌐 Redis Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 6.492s (-77.9% 🟢) 7.760s (-74.8% 🟢) 0.218s (+94.6% 🔺) 8.408s (-73.5% 🟢) 1.916s 8 1.00x
▲ Vercel Express 6.575s (+1.1%) 7.541s (-5.9% 🟢) 0.219s (-46.5% 🟢) 8.125s (-8.0% 🟢) 1.549s 8 1.01x
▲ Vercel Next.js (Turbopack) 13.229s (-21.8% 🟢) 14.306s (-21.6% 🟢) 0.259s (+22.6% 🔺) 15.417s (-18.6% 🟢) 2.188s 4 2.04x

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

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.641s (-33.8% 🟢) 1.033s (-17.2% 🟢) 0.000s (-100.0% 🟢) 1.044s (-17.0% 🟢) 0.403s 58 1.00x
🐘 Postgres Express 0.690s (-28.2% 🟢) 1.049s (-17.9% 🟢) 0.000s (-19.3% 🟢) 1.060s (-18.9% 🟢) 0.370s 57 1.08x
🐘 Postgres Next.js (Turbopack) 0.803s 1.053s 0.000s 1.060s 0.257s 57 1.25x
💻 Local Nitro 1.332s (+9.0% 🔺) 2.015s (~) 0.000s (+33.3% 🔺) 2.017s (~) 0.685s 30 2.08x
💻 Local Express 1.351s (+10.3% 🔺) 2.015s (~) 0.000s (-60.0% 🟢) 2.017s (~) 0.666s 30 2.11x
💻 Local Next.js (Turbopack) 1.465s 2.013s 0.000s 2.016s 0.551s 30 2.29x
🌐 MongoDB Next.js (Turbopack) ⚠️ missing - - - - -
🌐 Redis Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.810s (+24.9% 🔺) 5.125s (+16.7% 🔺) 0.000s (+18.2% 🔺) 5.538s (+15.2% 🔺) 1.727s 11 1.00x
▲ Vercel Express 4.031s (+7.8% 🔺) 5.123s (~) 0.000s (-50.0% 🟢) 5.483s (-0.8%) 1.453s 11 1.06x
▲ Vercel Next.js (Turbopack) 6.020s (-40.9% 🟢) 6.420s (-44.3% 🟢) 0.004s (+Infinity% 🔺) 7.666s (-36.4% 🟢) 1.647s 8 1.58x

🔍 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 🥇 Nitro 1.262s (-29.5% 🟢) 2.033s (-5.0% 🟢) 0.000s (-6.7% 🟢) 2.057s (-5.4% 🟢) 0.794s 30 1.00x
🐘 Postgres Express 1.401s (-21.0% 🟢) 2.143s (-1.6%) 0.000s (NaN%) 2.154s (-2.0%) 0.753s 28 1.11x
🐘 Postgres Next.js (Turbopack) 1.825s 2.349s 0.000s 2.357s 0.532s 26 1.45x
💻 Local Next.js (Turbopack) 3.011s 3.473s 0.000s 3.476s 0.465s 18 2.38x
💻 Local Nitro 3.048s (-10.0% 🟢) 3.841s (-4.7%) 0.001s (+17.2% 🔺) 3.844s (-4.8%) 0.796s 16 2.41x
💻 Local Express 3.088s (-10.9% 🟢) 3.900s (-3.3%) 0.000s (-60.9% 🟢) 3.905s (-3.3%) 0.817s 16 2.45x
🌐 MongoDB Next.js (Turbopack) ⚠️ missing - - - - -
🌐 Redis Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.890s (+28.4% 🔺) 6.903s (+14.6% 🔺) 0.000s (NaN%) 7.241s (+12.1% 🔺) 1.351s 9 1.00x
▲ Vercel Nitro 6.026s (+47.2% 🔺) 7.307s (+36.0% 🔺) 0.000s (-100.0% 🟢) 7.681s (+32.6% 🔺) 1.655s 8 1.02x
▲ Vercel Next.js (Turbopack) 8.575s (+52.7% 🔺) 9.805s (+40.4% 🔺) 0.000s (-100.0% 🟢) 10.565s (+40.1% 🔺) 1.990s 6 1.46x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Nitro 9/21
🐘 Postgres Nitro 17/21
▲ Vercel Nitro 14/21
Fastest World by Framework

Winner determined by most benchmark wins

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

📋 View full workflow run

Comment thread .changeset/world-init-cold-start.md Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

🧪 E2E Test Results

All tests passed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 1200 0 219 1419
✅ 💻 Local Development 1587 0 219 1806
✅ 📦 Local Production 1587 0 219 1806
✅ 🐘 Local Postgres 1587 0 219 1806
✅ 🪟 Windows 129 0 0 129
✅ 📋 Other 727 0 176 903
Total 6817 0 1052 7869

Details by Category

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

📋 View full workflow run

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Peter Wielander <mittgfu@gmail.com>
@VaguelySerious VaguelySerious merged commit 72911f7 into main May 9, 2026
186 of 189 checks passed
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