Skip to content

fix(world-local): skip Nov 2025 ghost versions on npm#2168

Merged
TooTallNate merged 2 commits into
mainfrom
allenzhou/skip-world-local-nov-ghosts
May 29, 2026
Merged

fix(world-local): skip Nov 2025 ghost versions on npm#2168
TooTallNate merged 2 commits into
mainfrom
allenzhou/skip-world-local-nov-ghosts

Conversation

@allenzhou101
Copy link
Copy Markdown
Contributor

Why

`@workflow/world-local@5.0.0-beta.9` (latest published, May 29 2026) is broken: it imports `createLocalWorld` from `@workflow/world-local`, but `@workflow/world-local@5.0.0-beta.8` (the pinned version) is a November 2025 ghost that exports the old `createEmbeddedWorld` name and uses 4.x dependencies.

Downstream consumers (e.g. Ash) hit:

```
[MISSING_EXPORT] "createLocalWorld" is not exported by ".../@workflow/world-local@5.0.0-beta.8/.../dist/index.js"
[MISSING_EXPORT] "WorkflowAPIError" is not exported by ".../@workflow/errors@5.0.0-beta.5/.../dist/index.js"
```

(The `WorkflowAPIError` failure is a downstream symptom: `world-local@beta.8` pins `@workflow/errors@5.0.0-beta.4`, which predates `WorkflowAPIError`.)

Root cause: npm version-slot contamination

`@workflow/world-local` has two non-overlapping release trains sharing the `5.0.0-beta.N` namespace:

Slot Published Source Exports
`5.0.0-beta.0` – `5.0.0-beta.7` Apr–May 2026 current `main` `createLocalWorld`
`5.0.0-beta.8` – `5.0.0-beta.10` Nov 2025 (ghost) abandoned 5.x attempt `createEmbeddedWorld`, 4.x deps

PR #2147 (last night's Version Packages) bumped `packages/world-local/package.json` from `beta.7` → `beta.8`. The actual publish to npm either silently failed or 409'd because the slot was occupied — but `@workflow/core` had already been published as `beta.9` with the new pin baked in via `workspace:*` rewriting:

```json
// @workflow/core@5.0.0-beta.9 package.json
"@workflow/world-local": "5.0.0-beta.8" // ← ghost
```

So every consumer of `core@beta.9` resolves to the November `world-local`.

Evidence

Fix

Bump `packages/world-local/package.json` from `5.0.0-beta.8` → `5.0.0-beta.10` (the highest contaminated slot). The next "Version Packages (beta)" PR (#2162) will compute the next pre-release after `beta.10` = `5.0.0-beta.11`, which is free on npm.

That cascade-bumps consumers via `updateInternalDependencies: patch` + `workspace:*` rewriting:

  • `@workflow/world-local`: `beta.8` → `beta.11`
  • `@workflow/core`: `beta.9` → `beta.10` (cascaded patch, fixed-with workflow)
  • `workflow`: `beta.9` → `beta.10` (fixed with core)
  • ...any other workspace consumers of `world-local`

The intermediate workspace marker `beta.10` is never published — `changeset publish` queries npm and skips occupied slots, and only `beta.11` (computed by the Version Packages PR) is in `package.json` by the time `pnpm ci:publish` runs.

Validation

  • `pnpm install` clean (lockfile unchanged — `workspace:*` resolves locally)
  • Bump only affects an unconsumed version number; no code/API changes
  • After merge: confirm Version Packages PR Version Packages (beta) #2162 picks up the bump and proposes `world-local@5.0.0-beta.11`
  • After Version Packages merge: confirm `world-local@5.0.0-beta.11` and `core@5.0.0-beta.10` are published; `@workflow/core@5.0.0-beta.10`'s `package.json` shows `"@workflow/world-local": "5.0.0-beta.11"`

Why not `unpublish` the ghosts?

npm publishes are immutable; unpublish has a 72-hour window only, and the ghost versions are 6 months old. Skipping past them is the only path forward.

Follow-up

Once this lands, downstream Ash work blocked on PR #2157 (step-side `experimental_setAttributes`) can resume by bumping to the cascaded `@workflow/core@5.0.0-beta.10`.

`@workflow/world-local` versions 5.0.0-beta.8, beta.9, and beta.10 are
published on npm from an abandoned November 2025 release train (see "About
this version" timestamps on npmjs.com). They use the old `createEmbeddedWorld`
export and 4.x dependencies, while current code uses `createLocalWorld` and
5.x deps.

The last "Version Packages (beta)" PR (#2147) bumped world-local's
package.json from beta.7 → beta.8. The actual publish to npm was either
silently skipped or 409'd, so the npm slot still holds the November
content while `@workflow/core@5.0.0-beta.9` was published with a hard
dependency pin on `@workflow/world-local@5.0.0-beta.8` — pointing
downstream consumers (e.g. Ash) at incompatible code:

  npm ERR! MISSING_EXPORT: "createLocalWorld" is not exported by
  ".../@workflow/world-local@5.0.0-beta.8/.../dist/index.js"

Bump packages/world-local/package.json to 5.0.0-beta.10 (the highest
contaminated slot) so the next Version Packages PR computes
5.0.0-beta.11, which is a free slot on npm. That cascades a patch bump
to core (workspace:*) → core@5.0.0-beta.10 with a clean pin to
world-local@5.0.0-beta.11.

No functional code changes.
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 29, 2026

🦋 Changeset detected

Latest commit: 3d83f2a

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

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

@vercel
Copy link
Copy Markdown
Contributor

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 29, 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 🥇 Express 0.041s (-7.4% 🟢) 1.004s (~) 0.963s 10 1.00x
🐘 Postgres Express 0.064s (+10.7% 🔺) 1.011s (~) 0.947s 10 1.57x
🐘 Postgres Nitro 0.065s (-32.2% 🟢) 1.012s (-3.0%) 0.947s 10 1.57x
💻 Local Next.js (Turbopack) 0.065s 1.006s 0.941s 10 1.58x
🐘 Postgres Next.js (Turbopack) 0.100s 1.031s 0.931s 10 2.43x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.314s (-23.3% 🟢) 2.413s (-3.8%) 2.099s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.092s (-2.9%) 2.006s (~) 0.913s 10 1.00x
🐘 Postgres Express 1.104s (-3.7%) 2.011s (~) 0.906s 10 1.01x
🐘 Postgres Nitro 1.114s (-2.3%) 2.010s (~) 0.897s 10 1.02x
💻 Local Next.js (Turbopack) 1.143s 2.006s 0.863s 10 1.05x
🐘 Postgres Next.js (Turbopack) 1.179s 2.013s 0.834s 10 1.08x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.681s (-56.8% 🟢) 3.782s (-36.0% 🟢) 2.101s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 10.504s (-3.8%) 11.022s (~) 0.518s 3 1.00x
🐘 Postgres Express 10.537s (-3.9%) 11.022s (~) 0.484s 3 1.00x
🐘 Postgres Nitro 10.560s (-2.9%) 11.018s (~) 0.459s 3 1.01x
💻 Local Next.js (Turbopack) 10.797s 11.023s 0.226s 3 1.03x
🐘 Postgres Next.js (Turbopack) 10.942s 11.013s 0.071s 3 1.04x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 13.216s (-44.3% 🟢) 15.107s (-39.8% 🟢) 1.891s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 13.686s (-8.6% 🟢) 14.022s (-6.7% 🟢) 0.337s 5 1.00x
🐘 Postgres Express 13.788s (-5.5% 🟢) 14.019s (-6.7% 🟢) 0.232s 5 1.01x
🐘 Postgres Nitro 13.801s (-5.4% 🟢) 14.020s (-6.7% 🟢) 0.219s 5 1.01x
💻 Local Next.js (Turbopack) 14.367s 15.029s 0.662s 4 1.05x
🐘 Postgres Next.js (Turbopack) 14.682s 15.022s 0.340s 4 1.07x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 21.548s (-66.6% 🟢) 23.784s (-64.3% 🟢) 2.237s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 12.345s (-25.6% 🟢) 13.024s (-23.5% 🟢) 0.678s 7 1.00x
🐘 Postgres Express 12.419s (-11.3% 🟢) 13.019s (-10.8% 🟢) 0.601s 7 1.01x
🐘 Postgres Nitro 12.606s (-9.7% 🟢) 13.017s (-9.0% 🟢) 0.412s 7 1.02x
💻 Local Next.js (Turbopack) 13.657s 14.028s 0.371s 7 1.11x
🐘 Postgres Next.js (Turbopack) 14.697s 15.208s 0.510s 6 1.19x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 28.950s (-93.2% 🟢) 31.289s (-92.6% 🟢) 2.339s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.173s (-6.9% 🟢) 2.008s (~) 0.835s 15 1.00x
🐘 Postgres Nitro 1.191s (-6.5% 🟢) 2.008s (~) 0.817s 15 1.02x
💻 Local Express 1.242s (-16.6% 🟢) 2.006s (~) 0.764s 15 1.06x
💻 Local Next.js (Turbopack) 1.306s 2.007s 0.701s 15 1.11x
🐘 Postgres Next.js (Turbopack) 1.335s 2.015s 0.680s 15 1.14x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.405s (+20.8% 🔺) 5.029s (+16.4% 🔺) 1.624s 6 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.250s (-47.0% 🟢) 2.007s (-33.3% 🟢) 0.757s 15 1.00x
🐘 Postgres Nitro 1.250s (-46.8% 🟢) 2.009s (-33.2% 🟢) 0.759s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.518s 2.097s 0.579s 15 1.21x
💻 Local Express 1.624s (-45.0% 🟢) 2.005s (-41.9% 🟢) 0.382s 15 1.30x
💻 Local Next.js (Turbopack) 1.893s 2.315s 0.422s 13 1.51x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.534s (+11.9% 🔺) 6.396s (+8.0% 🔺) 1.862s 5 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.356s (-61.1% 🟢) 2.007s (-50.0% 🟢) 0.651s 15 1.00x
🐘 Postgres Nitro 1.403s (-59.7% 🟢) 2.008s (-49.9% 🟢) 0.605s 15 1.04x
🐘 Postgres Next.js (Turbopack) 1.784s 2.165s 0.381s 14 1.32x
💻 Local Express 4.741s (-43.1% 🟢) 5.177s (-42.6% 🟢) 0.436s 6 3.50x
💻 Local Next.js (Turbopack) 5.779s 6.215s 0.436s 5 4.26x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.920s (+67.9% 🔺) 7.707s (+39.3% 🔺) 1.788s 4 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.175s (-6.6% 🟢) 2.008s (~) 0.833s 15 1.00x
🐘 Postgres Nitro 1.200s (-4.5%) 2.008s (~) 0.808s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.285s 2.016s 0.732s 15 1.09x
💻 Local Next.js (Turbopack) 1.443s 2.075s 0.632s 15 1.23x
💻 Local Express 1.545s (-18.4% 🟢) 2.006s (-15.1% 🟢) 0.460s 15 1.32x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.586s (+5.2% 🔺) 4.029s (-3.4%) 1.443s 8 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.281s (-45.2% 🟢) 2.008s (-33.3% 🟢) 0.727s 15 1.00x
🐘 Postgres Express 1.290s (-44.9% 🟢) 2.007s (-33.3% 🟢) 0.717s 15 1.01x
🐘 Postgres Next.js (Turbopack) 1.473s 2.163s 0.690s 14 1.15x
💻 Local Express 1.826s (-41.7% 🟢) 2.149s (-42.9% 🟢) 0.323s 14 1.43x
💻 Local Next.js (Turbopack) 2.133s 2.917s 0.784s 11 1.67x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.651s (+12.9% 🔺) 5.214s (+2.7%) 1.562s 6 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.388s (-60.1% 🟢) 2.010s (-49.9% 🟢) 0.622s 15 1.00x
🐘 Postgres Express 1.400s (-60.0% 🟢) 2.007s (-50.0% 🟢) 0.607s 15 1.01x
🐘 Postgres Next.js (Turbopack) 1.830s 2.155s 0.326s 14 1.32x
💻 Local Express 4.458s (-49.3% 🟢) 5.014s (-45.9% 🟢) 0.555s 6 3.21x
💻 Local Next.js (Turbopack) 6.133s 6.617s 0.484s 5 4.42x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 6.773s (+33.0% 🔺) 8.716s (+27.9% 🔺) 1.943s 4 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.559s (-33.4% 🟢) 1.006s (-1.7%) 0.447s 60 1.00x
🐘 Postgres Nitro 0.583s (-29.0% 🟢) 1.024s (+1.7%) 0.441s 59 1.04x
💻 Local Express 0.676s (-31.3% 🟢) 1.116s (+3.7%) 0.440s 54 1.21x
💻 Local Next.js (Turbopack) 0.892s 1.039s 0.147s 58 1.60x
🐘 Postgres Next.js (Turbopack) 0.909s 1.289s 0.380s 47 1.63x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.615s (-74.5% 🟢) 7.247s (-69.8% 🟢) 1.632s 9 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.355s (-29.7% 🟢) 2.030s (-3.4%) 0.675s 45 1.00x
🐘 Postgres Express 1.383s (-30.0% 🟢) 2.053s (-9.1% 🟢) 0.670s 44 1.02x
💻 Local Express 1.407s (-53.4% 🟢) 2.005s (-44.1% 🟢) 0.599s 45 1.04x
🐘 Postgres Next.js (Turbopack) 2.015s 2.478s 0.463s 37 1.49x
💻 Local Next.js (Turbopack) 2.112s 3.008s 0.896s 30 1.56x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 14.763s (-62.6% 🟢) 16.740s (-59.5% 🟢) 1.977s 6 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.667s (-33.2% 🟢) 3.058s (-30.0% 🟢) 0.391s 40 1.00x
🐘 Postgres Nitro 2.711s (-33.9% 🟢) 3.059s (-33.6% 🟢) 0.348s 40 1.02x
💻 Local Express 3.065s (-66.7% 🟢) 3.567s (-64.4% 🟢) 0.502s 34 1.15x
🐘 Postgres Next.js (Turbopack) 4.135s 4.624s 0.490s 27 1.55x
💻 Local Next.js (Turbopack) 4.366s 5.010s 0.644s 24 1.64x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 28.923s (-70.2% 🟢) 31.516s (-68.0% 🟢) 2.594s 4 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.218s (-22.7% 🟢) 1.006s (~) 0.788s 60 1.00x
🐘 Postgres Nitro 0.223s (-21.3% 🟢) 1.006s (~) 0.784s 60 1.02x
🐘 Postgres Next.js (Turbopack) 0.337s 1.030s 0.693s 59 1.54x
💻 Local Express 0.423s (-24.5% 🟢) 1.004s (~) 0.580s 60 1.94x
💻 Local Next.js (Turbopack) 0.553s 1.021s 0.469s 59 2.53x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.533s (+52.5% 🔺) 4.448s (+32.7% 🔺) 1.915s 14 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.345s (-30.4% 🟢) 1.006s (~) 0.661s 90 1.00x
🐘 Postgres Express 0.346s (-32.2% 🟢) 1.007s (~) 0.661s 90 1.00x
🐘 Postgres Next.js (Turbopack) 0.594s 1.071s 0.477s 85 1.72x
💻 Local Express 2.022s (-19.5% 🟢) 2.507s (-16.7% 🟢) 0.485s 36 5.86x
💻 Local Next.js (Turbopack) 2.394s 3.182s 0.788s 29 6.93x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.437s (+68.6% 🔺) 7.145s (+48.2% 🔺) 1.708s 13 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.668s (-18.4% 🟢) 1.006s (-1.1%) 0.339s 120 1.00x
🐘 Postgres Nitro 0.681s (-13.9% 🟢) 1.006s (~) 0.325s 120 1.02x
🐘 Postgres Next.js (Turbopack) 1.025s 1.465s 0.440s 83 1.53x
💻 Local Express 8.672s (-22.5% 🟢) 9.168s (-23.2% 🟢) 0.495s 14 12.99x
💻 Local Next.js (Turbopack) 10.136s 10.936s 0.799s 11 15.18x
💻 Local Nitro ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 12.708s (+64.5% 🔺) 14.695s (+56.3% 🔺) 1.988s 9 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro

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.156s (+480.5% 🔺) 2.005s (+99.6% 🔺) 0.010s (-19.8% 🟢) 2.016s (+98.0% 🔺) 0.860s 10 1.00x
🐘 Postgres Express 1.159s (+465.1% 🔺) 1.999s (+100.2% 🔺) 0.001s (-25.0% 🟢) 2.010s (+98.8% 🔺) 0.851s 10 1.00x
🐘 Postgres Nitro 1.167s (+469.2% 🔺) 2.002s (+100.3% 🔺) 0.001s (-13.3% 🟢) 2.011s (+98.9% 🔺) 0.844s 10 1.01x
💻 Local Next.js (Turbopack) 1.208s 2.003s 0.013s 2.020s 0.812s 10 1.04x
🐘 Postgres Next.js (Turbopack) 1.338s 1.999s 0.016s 2.030s 0.693s 10 1.16x
💻 Local Nitro ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.167s (-43.5% 🟢) 3.327s (-37.0% 🟢) 2.202s (+196.7% 🔺) 5.969s (-7.9% 🟢) 3.802s 10 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: 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.562s (+106.3% 🔺) 2.007s (+95.1% 🔺) 0.010s (+10.1% 🔺) 2.020s (+94.2% 🔺) 0.458s 30 1.00x
🐘 Postgres Express 1.571s (+149.4% 🔺) 2.004s (+99.1% 🔺) 0.004s (+3.6%) 2.025s (+98.0% 🔺) 0.454s 30 1.01x
🐘 Postgres Nitro 1.598s (+156.1% 🔺) 2.005s (+99.1% 🔺) 0.004s (-7.3% 🟢) 2.025s (+98.1% 🔺) 0.427s 30 1.02x
💻 Local Next.js (Turbopack) 1.725s 2.009s 0.011s 2.023s 0.298s 30 1.10x
🐘 Postgres Next.js (Turbopack) 2.259s 2.774s 0.003s 2.820s 0.561s 22 1.45x
💻 Local Nitro ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 6.548s (-77.8% 🟢) 8.140s (-73.6% 🟢) 0.184s (+64.5% 🔺) 8.803s (-72.3% 🟢) 2.256s 7 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Nitro

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.711s (-26.0% 🟢) 1.030s (-19.4% 🟢) 0.000s (+58.6% 🔺) 1.043s (-20.2% 🟢) 0.332s 58 1.00x
🐘 Postgres Nitro 0.717s (-26.0% 🟢) 1.090s (-12.7% 🟢) 0.000s (-56.4% 🟢) 1.098s (-12.7% 🟢) 0.381s 55 1.01x
🐘 Postgres Next.js (Turbopack) 1.077s 1.496s 0.000s 1.518s 0.441s 40 1.51x
💻 Local Express 1.316s (+7.4% 🔺) 2.012s (~) 0.000s (-30.0% 🟢) 2.013s (~) 0.698s 30 1.85x
💻 Local Next.js (Turbopack) 1.484s 2.013s 0.000s 2.017s 0.532s 30 2.09x
💻 Local Nitro ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.064s (+33.2% 🔺) 5.585s (+27.1% 🔺) 0.000s (-100.0% 🟢) 6.082s (+26.5% 🔺) 2.018s 10 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Nitro

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.432s (-19.2% 🟢) 2.100s (-3.6%) 0.000s (+Infinity% 🔺) 2.114s (-3.8%) 0.682s 29 1.00x
🐘 Postgres Nitro 1.462s (-18.4% 🟢) 2.138s (~) 0.000s (-100.0% 🟢) 2.157s (-0.8%) 0.695s 28 1.02x
🐘 Postgres Next.js (Turbopack) 2.247s 2.770s 0.000s 2.797s 0.550s 22 1.57x
💻 Local Next.js (Turbopack) 2.889s 3.471s 0.000s 3.475s 0.586s 18 2.02x
💻 Local Express 2.921s (-15.8% 🟢) 3.411s (-15.4% 🟢) 0.000s (-72.2% 🟢) 3.414s (-15.4% 🟢) 0.493s 18 2.04x
💻 Local Nitro ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 6.404s (+56.4% 🔺) 7.907s (+47.1% 🔺) 0.000s (-100.0% 🟢) 8.351s (+44.1% 🔺) 1.947s 8 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Nitro

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

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


Some benchmark jobs failed:

  • Local: failure
  • Postgres: success
  • Vercel: failure

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 29, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 1264 2 219 1485
❌ 💻 Local Development 1670 1 219 1890
✅ 📦 Local Production 1671 0 219 1890
✅ 🐘 Local Postgres 1671 0 219 1890
❌ 📋 Other 767 2 176 945
Total 7043 5 1052 8100

❌ Failed Tests

▲ Vercel Production (2 failed)

fastify (1 failed):

  • health check (CLI) - workflow health command reports healthy endpoints

hono (1 failed):

  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KSTW1CTA97K9XX7F8B82JQZT | 🔍 observability
💻 Local Development (1 failed)

hono-stable (1 failed):

  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KSTW3JZD470K31EJRFZDE1C7
📋 Other (2 failed)

e2e-local-prod-nest-stable (1 failed):

  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KSTW3JZD470K31EJRFZDE1C7

e2e-local-prod-tanstack-start- (1 failed):

  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KSTW3JZD470K31EJRFZDE1C7

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 109 0 26
✅ example 109 0 26
✅ express 109 0 26
❌ fastify 108 1 26
❌ hono 108 1 26
✅ nextjs-turbopack 133 0 2
✅ nextjs-webpack 133 0 2
✅ nitro 109 0 26
✅ nuxt 109 0 26
✅ sveltekit 128 0 7
✅ vite 109 0 26
❌ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 110 0 25
✅ express-stable 110 0 25
✅ fastify-stable 110 0 25
❌ hono-stable 109 1 25
✅ nextjs-turbopack-canary 116 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 135 0 0
✅ nextjs-webpack-canary 116 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 135 0 0
✅ nitro-stable 110 0 25
✅ nuxt-stable 110 0 25
✅ sveltekit-stable 129 0 6
✅ vite-stable 110 0 25
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 110 0 25
✅ express-stable 110 0 25
✅ fastify-stable 110 0 25
✅ hono-stable 110 0 25
✅ nextjs-turbopack-canary 116 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 135 0 0
✅ nextjs-webpack-canary 116 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 135 0 0
✅ nitro-stable 110 0 25
✅ nuxt-stable 110 0 25
✅ sveltekit-stable 129 0 6
✅ vite-stable 110 0 25
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 110 0 25
✅ express-stable 110 0 25
✅ fastify-stable 110 0 25
✅ hono-stable 110 0 25
✅ nextjs-turbopack-canary 116 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 135 0 0
✅ nextjs-webpack-canary 116 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 135 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 135 0 0
✅ nitro-stable 110 0 25
✅ nuxt-stable 110 0 25
✅ sveltekit-stable 129 0 6
✅ vite-stable 110 0 25
❌ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 110 0 25
✅ e2e-local-dev-tanstack-start- 110 0 25
✅ e2e-local-postgres-nest-stable 110 0 25
✅ e2e-local-postgres-tanstack-start- 110 0 25
❌ e2e-local-prod-nest-stable 109 1 25
❌ e2e-local-prod-tanstack-start- 109 1 25
✅ e2e-vercel-prod-tanstack-start 109 0 26

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@allenzhou101 allenzhou101 marked this pull request as ready for review May 29, 2026 21:39
@allenzhou101 allenzhou101 requested a review from a team as a code owner May 29, 2026 21:39
Signed-off-by: Nathan Rajlich <n@n8.io>
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