Skip to content

fix(vitest): derive workflow cwd from project root#2726

Draft
NathanColosimo wants to merge 2 commits into
mainfrom
codex/2716-vitest-root
Draft

fix(vitest): derive workflow cwd from project root#2726
NathanColosimo wants to merge 2 commits into
mainfrom
codex/2716-vitest-root

Conversation

@NathanColosimo

@NathanColosimo NathanColosimo commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • derive @workflow/vitest cwd from the Vitest/Vite project root when available
  • keep explicit cwd/rootDir/dataDir/outDir overrides intact
  • keep generated bundle transform excludes in sync with the resolved outDir
  • update v4/v5 Vitest API docs and add a patch changeset

Fixes part of #2716.

Tests

  • pnpm --filter @workflow/vitest test
  • pnpm turbo build --filter @workflow/vitest
  • pnpm biome check packages/vitest/src/index.ts packages/vitest/src/options.ts packages/vitest/src/global-setup.ts packages/vitest/src/index.test.ts docs/content/docs/v4/api-reference/vitest/index.mdx docs/content/docs/v5/api-reference/vitest/index.mdx .changeset/fresh-lamps-heal.md

Docs Preview

Page Preview
v4 Vitest API Reference https://workflow-docs-git-codex-2716-vitest-root.vercel.sh/docs/api-reference/vitest
v5 Vitest API Reference https://workflow-docs-git-codex-2716-vitest-root.vercel.sh/v5/docs/api-reference/vitest

@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

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

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

@changeset-bot

changeset-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7d7ffa3

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

This PR includes changesets to release 1 package
Name Type
@workflow/vitest Patch

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

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

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

📊 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.043s (-1.8%) 1.006s (~) 0.962s 10 1.00x
💻 Local Express 0.045s (-1.7%) 1.005s (~) 0.960s 10 1.05x
💻 Local Next.js (Turbopack) 0.058s (+7.8% 🔺) 1.008s (~) 0.950s 10 1.34x
🐘 Postgres Express 0.062s (-14.8% 🟢) 1.012s (~) 0.950s 10 1.44x
🐘 Postgres Nitro 0.067s (+6.7% 🔺) 1.012s (~) 0.945s 10 1.55x
🐘 Postgres Next.js (Turbopack) 0.068s (-38.4% 🟢) 1.020s (-1.9%) 0.952s 10 1.57x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.244s (+20.8% 🔺) 2.080s (+5.2% 🔺) 1.835s 10 1.00x
▲ Vercel Next.js (Turbopack) 0.261s (-43.6% 🟢) 1.581s (-38.4% 🟢) 1.320s 10 1.07x
▲ Vercel Nitro 0.279s (-23.7% 🟢) 1.650s (-9.9% 🟢) 1.371s 10 1.14x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.079s (~) 2.007s (~) 0.928s 10 1.00x
💻 Local Express 1.081s (~) 2.006s (~) 0.925s 10 1.00x
🐘 Postgres Express 1.090s (-0.7%) 2.010s (~) 0.920s 10 1.01x
🐘 Postgres Nitro 1.098s (+0.5%) 2.010s (~) 0.912s 10 1.02x
💻 Local Next.js (Turbopack) 1.101s (+1.9%) 2.008s (~) 0.906s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.138s (+3.3%) 2.037s (+1.3%) 0.899s 10 1.05x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.375s (+0.9%) 2.767s (+5.1% 🔺) 1.392s 10 1.00x
▲ Vercel Nitro 1.444s (+7.3% 🔺) 2.758s (-2.5%) 1.314s 10 1.05x
▲ Vercel Next.js (Turbopack) 2.555s (+13.8% 🔺) 3.988s (+4.5%) 1.433s 10 1.86x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 10.434s (~) 11.013s (~) 0.579s 3 1.00x
💻 Local Nitro 10.439s (~) 11.022s (~) 0.583s 3 1.00x
💻 Local Express 10.443s (~) 11.022s (~) 0.579s 3 1.00x
🐘 Postgres Nitro 10.499s (~) 11.022s (~) 0.522s 3 1.01x
💻 Local Next.js (Turbopack) 10.558s (+0.8%) 11.027s (~) 0.468s 3 1.01x
🐘 Postgres Next.js (Turbopack) 10.592s (+1.9%) 11.015s (~) 0.423s 3 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 11.532s (-3.1%) 12.982s (-5.0% 🟢) 1.451s 3 1.00x
▲ Vercel Express 11.591s (-3.9%) 13.593s (~) 2.002s 3 1.01x
▲ Vercel Next.js (Turbopack) 12.999s (+2.6%) 15.192s (+3.1%) 2.193s 2 1.13x

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

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 13.573s (~) 14.026s (~) 0.454s 5 1.00x
🐘 Postgres Express 13.592s (~) 14.020s (~) 0.428s 5 1.00x
🐘 Postgres Nitro 13.651s (~) 14.019s (~) 0.368s 5 1.01x
💻 Local Express 13.682s (~) 14.026s (~) 0.344s 5 1.01x
🐘 Postgres Next.js (Turbopack) 13.870s (+1.6%) 14.427s (+2.8%) 0.557s 5 1.02x
💻 Local Next.js (Turbopack) 13.936s (+2.0%) 14.029s (~) 0.093s 5 1.03x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 16.131s (-3.8%) 17.935s (-2.7%) 1.804s 4 1.00x
▲ Vercel Express 16.272s (-1.0%) 18.233s (-2.6%) 1.961s 4 1.01x
▲ Vercel Next.js (Turbopack) 17.860s (+3.8%) 19.682s (+1.9%) 1.823s 4 1.11x

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

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 12.078s (~) 13.024s (~) 0.946s 7 1.00x
🐘 Postgres Nitro 12.195s (~) 13.019s (~) 0.824s 7 1.01x
🐘 Postgres Next.js (Turbopack) 12.198s (-1.9%) 12.647s (-2.1%) 0.450s 8 1.01x
🐘 Postgres Express 12.342s (-1.1%) 13.020s (~) 0.678s 7 1.02x
💻 Local Express 12.480s (+2.5%) 13.168s (+1.1%) 0.687s 7 1.03x
💻 Local Next.js (Turbopack) 12.772s (+4.9%) 13.028s (~) 0.256s 7 1.06x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 17.282s (~) 18.988s (~) 1.706s 5 1.00x
▲ Vercel Express 17.392s (-1.3%) 18.800s (-2.7%) 1.408s 5 1.01x
▲ Vercel Next.js (Turbopack) 19.829s (~) 21.540s (-1.5%) 1.711s 5 1.15x

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

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.177s (~) 2.008s (~) 0.831s 15 1.00x
🐘 Postgres Nitro 1.183s (-1.6%) 2.008s (~) 0.825s 15 1.01x
💻 Local Express 1.379s (-0.9%) 2.006s (~) 0.627s 15 1.17x
🐘 Postgres Next.js (Turbopack) 1.387s (+9.0% 🔺) 2.017s (-1.1%) 0.630s 15 1.18x
💻 Local Nitro 1.404s (~) 2.006s (~) 0.602s 15 1.19x
💻 Local Next.js (Turbopack) 1.465s (+3.0%) 2.008s (~) 0.542s 15 1.24x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.077s (-5.1% 🟢) 3.536s (-6.9% 🟢) 1.460s 9 1.00x
▲ Vercel Express 2.667s (+35.1% 🔺) 4.019s (+7.7% 🔺) 1.351s 8 1.28x
▲ Vercel Next.js (Turbopack) 3.932s (+18.6% 🔺) 5.543s (+8.2% 🔺) 1.612s 6 1.89x

🔍 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 🥇 Express 1.305s (-3.7%) 2.222s (-4.0%) 0.918s 14 1.00x
🐘 Postgres Nitro 1.385s (+4.7%) 2.592s (-8.3% 🟢) 1.208s 12 1.06x
🐘 Postgres Next.js (Turbopack) 1.475s (+10.8% 🔺) 2.604s (+5.0% 🔺) 1.129s 12 1.13x
💻 Local Nitro 2.269s (-10.0% 🟢) 3.009s (-3.2%) 0.740s 10 1.74x
💻 Local Express 2.331s (-9.7% 🟢) 3.009s (~) 0.677s 10 1.79x
💻 Local Next.js (Turbopack) 2.574s (-6.1% 🟢) 3.011s (-3.2%) 0.437s 10 1.97x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.746s (+3.6%) 4.719s (+17.3% 🔺) 1.973s 7 1.00x
▲ Vercel Nitro 2.952s (+23.5% 🔺) 4.131s (+7.9% 🔺) 1.179s 8 1.08x
▲ Vercel Next.js (Turbopack) 4.164s (+14.8% 🔺) 5.743s (-0.6%) 1.579s 6 1.52x

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

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.574s (-0.9%) 4.137s (+3.1%) 2.562s 8 1.00x
🐘 Postgres Nitro 1.630s (+2.6%) 4.012s (~) 2.383s 8 1.04x
🐘 Postgres Next.js (Turbopack) 2.252s (+23.7% 🔺) 4.596s (-6.0% 🟢) 2.344s 7 1.43x
💻 Local Express 3.450s (-48.2% 🟢) 4.726s (-36.3% 🟢) 1.276s 7 2.19x
💻 Local Nitro 4.250s (-30.9% 🟢) 4.871s (-28.6% 🟢) 0.620s 7 2.70x
💻 Local Next.js (Turbopack) 5.384s (-31.3% 🟢) 6.019s (-24.9% 🟢) 0.635s 5 3.42x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.675s (+1.1%) 4.251s (+0.5%) 1.576s 8 1.00x
▲ Vercel Express 2.809s (+4.8%) 4.717s (+8.8% 🔺) 1.907s 7 1.05x
▲ Vercel Next.js (Turbopack) 4.286s (+3.3%) 5.808s (-4.9%) 1.522s 6 1.60x

🔍 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 🥇 Express 1.166s (-1.2%) 2.008s (~) 0.842s 15 1.00x
🐘 Postgres Nitro 1.184s (+1.0%) 2.008s (~) 0.823s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.281s (+8.3% 🔺) 2.011s (~) 0.730s 15 1.10x
💻 Local Nitro 1.423s (+3.8%) 2.007s (~) 0.584s 15 1.22x
💻 Local Express 1.469s (+1.6%) 2.006s (~) 0.537s 15 1.26x
💻 Local Next.js (Turbopack) 1.562s (+9.3% 🔺) 2.008s (~) 0.446s 15 1.34x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.888s (~) 3.537s (-4.7%) 1.650s 9 1.00x
▲ Vercel Nitro 1.991s (+3.9%) 3.509s (-0.7%) 1.518s 9 1.05x
▲ Vercel Next.js (Turbopack) 3.152s (+2.4%) 4.831s (-2.1%) 1.679s 7 1.67x

🔍 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 🥇 Express 1.289s (-1.4%) 2.393s (-3.2%) 1.104s 13 1.00x
🐘 Postgres Nitro 1.324s (+0.8%) 2.509s (-3.2%) 1.185s 12 1.03x
🐘 Postgres Next.js (Turbopack) 1.449s (+3.1%) 2.756s (+8.8% 🔺) 1.307s 11 1.12x
💻 Local Express 2.371s (-10.1% 🟢) 2.918s (-3.0%) 0.547s 11 1.84x
💻 Local Nitro 2.387s (-12.8% 🟢) 3.009s (-10.0% 🟢) 0.622s 10 1.85x
💻 Local Next.js (Turbopack) 2.785s (+4.3%) 3.010s (-6.2% 🟢) 0.225s 10 2.16x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.192s (-12.6% 🟢) 3.570s (-9.6% 🟢) 1.378s 9 1.00x
▲ Vercel Nitro 2.233s (-3.7%) 3.670s (-2.9%) 1.437s 9 1.02x
▲ Vercel Next.js (Turbopack) 3.567s (+4.7%) 4.895s (-7.1% 🟢) 1.328s 7 1.63x

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

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.605s (+0.8%) 4.010s (-3.0%) 2.405s 8 1.00x
🐘 Postgres Nitro 1.605s (-2.4%) 4.011s (-6.7% 🟢) 2.406s 8 1.00x
🐘 Postgres Next.js (Turbopack) 2.396s (-8.1% 🟢) 5.026s (-3.9%) 2.630s 6 1.49x
💻 Local Nitro 5.192s (-19.4% 🟢) 6.014s (-18.9% 🟢) 0.821s 5 3.24x
💻 Local Express 5.526s (-12.8% 🟢) 6.214s (-8.8% 🟢) 0.688s 5 3.44x
💻 Local Next.js (Turbopack) 6.359s (~) 7.220s (~) 0.861s 5 3.96x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.630s (-7.4% 🟢) 4.229s (-3.6%) 1.600s 8 1.00x
▲ Vercel Express 2.873s (+1.5%) 4.324s (-5.1% 🟢) 1.451s 8 1.09x
▲ Vercel Next.js (Turbopack) 4.156s (-5.0% 🟢) 6.087s (-1.4%) 1.931s 5 1.58x

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

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.529s (-4.3%) 1.023s (+1.7%) 0.495s 59 1.00x
💻 Local Nitro 0.548s (-9.2% 🟢) 1.005s (-3.3%) 0.457s 60 1.04x
🐘 Postgres Nitro 0.553s (-1.9%) 1.023s (~) 0.470s 59 1.05x
🐘 Postgres Next.js (Turbopack) 0.560s (-7.7% 🟢) 1.069s (+1.7%) 0.509s 57 1.06x
💻 Local Express 0.570s (+3.3%) 1.005s (~) 0.434s 60 1.08x
💻 Local Next.js (Turbopack) 0.744s (+12.5% 🔺) 1.006s (-4.9%) 0.263s 60 1.41x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.477s (-10.0% 🟢) 3.683s (-17.3% 🟢) 1.206s 17 1.00x
▲ Vercel Express 2.498s (-7.2% 🟢) 3.928s (-8.4% 🟢) 1.429s 16 1.01x
▲ Vercel Next.js (Turbopack) 3.851s (+6.7% 🔺) 5.398s (~) 1.547s 12 1.55x

🔍 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.246s (-7.8% 🟢) 2.007s (-1.1%) 0.761s 45 1.00x
🐘 Postgres Nitro 1.336s (+1.8%) 2.030s (-1.1%) 0.694s 45 1.07x
💻 Local Nitro 1.371s (-4.1%) 2.006s (~) 0.635s 45 1.10x
🐘 Postgres Next.js (Turbopack) 1.401s (-5.9% 🟢) 2.109s (-1.3%) 0.709s 43 1.12x
💻 Local Express 1.442s (+3.0%) 2.006s (~) 0.563s 45 1.16x
💻 Local Next.js (Turbopack) 1.869s (+25.5% 🔺) 2.077s (+3.5%) 0.208s 44 1.50x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.666s (-8.0% 🟢) 7.120s (-9.3% 🟢) 1.454s 13 1.00x
▲ Vercel Nitro 5.742s (-6.4% 🟢) 7.178s (-5.3% 🟢) 1.437s 13 1.01x
▲ Vercel Next.js (Turbopack) 8.156s (+2.8%) 9.860s (+0.7%) 1.704s 10 1.44x

🔍 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.436s (-7.4% 🟢) 3.059s (-0.8%) 0.623s 40 1.00x
🐘 Postgres Nitro 2.643s (+1.5%) 3.058s (+0.8%) 0.415s 40 1.09x
💻 Local Nitro 2.968s (-6.6% 🟢) 3.342s (-15.3% 🟢) 0.374s 36 1.22x
💻 Local Express 3.243s (+8.6% 🔺) 3.944s (+13.8% 🔺) 0.702s 31 1.33x
🐘 Postgres Next.js (Turbopack) 3.600s (+22.2% 🔺) 4.057s (+17.6% 🔺) 0.458s 30 1.48x
💻 Local Next.js (Turbopack) 3.889s (+21.5% 🔺) 4.218s (+5.2% 🔺) 0.328s 29 1.60x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 10.984s (-6.2% 🟢) 12.908s (-3.6%) 1.924s 10 1.00x
▲ Vercel Nitro 11.091s (-6.4% 🟢) 12.687s (-5.4% 🟢) 1.597s 10 1.01x
▲ Vercel Next.js (Turbopack) 16.550s (-1.9%) 18.619s (~) 2.070s 7 1.51x

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

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.202s (-9.2% 🟢) 1.006s (~) 0.804s 60 1.00x
🐘 Postgres Nitro 0.212s (-1.1%) 1.006s (~) 0.794s 60 1.05x
🐘 Postgres Next.js (Turbopack) 0.224s (-3.3%) 1.015s (~) 0.791s 60 1.11x
💻 Local Express 0.505s (+12.2% 🔺) 1.004s (~) 0.500s 60 2.50x
💻 Local Nitro 0.534s (+24.3% 🔺) 1.005s (~) 0.470s 60 2.65x
💻 Local Next.js (Turbopack) 0.738s (+17.3% 🔺) 1.006s (~) 0.268s 60 3.66x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.066s (+4.0%) 2.338s (-4.1%) 1.272s 26 1.00x
▲ Vercel Express 1.108s (+19.0% 🔺) 2.411s (-2.7%) 1.303s 25 1.04x
▲ Vercel Next.js (Turbopack) 2.282s (+15.1% 🔺) 3.719s (-3.3%) 1.436s 17 2.14x

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

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.300s (-5.7% 🟢) 1.012s (-0.9%) 0.712s 89 1.00x
🐘 Postgres Express 0.325s (-2.6%) 1.017s (+1.1%) 0.693s 89 1.08x
🐘 Postgres Nitro 0.334s (-0.7%) 1.006s (~) 0.672s 90 1.11x
💻 Local Nitro 2.388s (+24.1% 🔺) 3.008s (+19.9% 🔺) 0.620s 30 7.96x
💻 Local Express 2.452s (+12.7% 🔺) 3.009s (+8.8% 🔺) 0.557s 30 8.17x
💻 Local Next.js (Turbopack) 3.123s (+6.7% 🔺) 3.889s (+15.1% 🔺) 0.766s 24 10.41x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.595s (+12.1% 🔺) 2.875s (-4.3%) 1.280s 32 1.00x
▲ Vercel Nitro 1.703s (+5.2% 🔺) 2.975s (-1.0%) 1.273s 31 1.07x
▲ Vercel Next.js (Turbopack) 2.788s (+11.8% 🔺) 4.550s (+10.8% 🔺) 1.762s 20 1.75x

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

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.492s (-9.4% 🟢) 1.068s (-4.4%) 0.576s 113 1.00x
🐘 Postgres Nitro 0.533s (-2.9%) 1.150s (+1.9%) 0.616s 105 1.08x
🐘 Postgres Next.js (Turbopack) 0.633s (+26.5% 🔺) 2.470s (-1.8%) 1.837s 49 1.29x
💻 Local Express 5.157s (-44.2% 🟢) 8.223s (-21.3% 🟢) 3.066s 15 10.47x
💻 Local Nitro 5.234s (-45.8% 🟢) 8.022s (-25.6% 🟢) 2.788s 15 10.63x
💻 Local Next.js (Turbopack) 7.296s (-32.4% 🟢) 10.698s (-9.0% 🟢) 3.402s 12 14.82x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.868s (+5.1% 🔺) 3.601s (-1.6%) 1.733s 34 1.00x
▲ Vercel Nitro 2.028s (+21.0% 🔺) 3.650s (+5.8% 🔺) 1.622s 33 1.09x
▲ Vercel Next.js (Turbopack) 4.223s (+4.0%) 5.943s (+1.3%) 1.719s 21 2.26x

🔍 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
💻 Local 🥇 Nitro 1.136s (-1.8%) 2.004s (~) 0.010s (-2.8%) 2.017s (~) 0.881s 10 1.00x
🐘 Postgres Express 1.148s (~) 1.999s (~) 0.001s (+8.3% 🔺) 2.010s (~) 0.862s 10 1.01x
💻 Local Express 1.153s (+1.1%) 2.005s (~) 0.012s (+10.4% 🔺) 2.019s (~) 0.866s 10 1.02x
🐘 Postgres Nitro 1.167s (-1.7%) 1.995s (~) 0.001s (~) 2.011s (~) 0.844s 10 1.03x
💻 Local Next.js (Turbopack) 1.168s (+2.5%) 1.961s (~) 0.013s (+12.5% 🔺) 2.022s (~) 0.855s 10 1.03x
🐘 Postgres Next.js (Turbopack) 1.201s (-1.7%) 1.986s (~) 0.001s (~) 2.015s (~) 0.815s 10 1.06x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.867s (-2.3%) 8.415s (+170.4% 🔺) 0.273s (-83.3% 🟢) 9.153s (+77.2% 🔺) 7.286s 10 1.00x
▲ Vercel Express 1.941s (-4.8%) 8.504s (+153.6% 🔺) 0.254s (-81.6% 🟢) 9.218s (+76.1% 🔺) 7.277s 10 1.04x
▲ Vercel Next.js (Turbopack) 3.600s (+12.1% 🔺) 8.960s (+124.2% 🔺) 0.635s (-23.1% 🟢) 11.249s (+84.0% 🔺) 7.649s 10 1.93x

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

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.531s (-3.5%) 2.004s (-1.6%) 0.005s (+6.6% 🔺) 2.026s (-1.6%) 0.495s 30 1.00x
💻 Local Nitro 1.532s (-1.8%) 2.010s (~) 0.013s (-2.3%) 2.026s (~) 0.494s 30 1.00x
🐘 Postgres Nitro 1.565s (~) 2.002s (~) 0.005s (-9.8% 🟢) 2.026s (~) 0.460s 30 1.02x
💻 Local Express 1.579s (+2.5%) 2.039s (+1.5%) 0.012s (-12.9% 🟢) 2.058s (+1.7%) 0.480s 30 1.03x
💻 Local Next.js (Turbopack) 1.738s (+10.1% 🔺) 1.961s (~) 0.015s (+28.8% 🔺) 2.030s (~) 0.292s 30 1.13x
🐘 Postgres Next.js (Turbopack) 2.165s (+14.6% 🔺) 2.503s (+10.6% 🔺) 0.004s (-43.8% 🟢) 2.529s (+9.9% 🔺) 0.364s 24 1.41x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.435s (-4.1%) 7.187s (+3.2%) 0.059s (-79.3% 🟢) 7.670s (~) 2.235s 8 1.00x
▲ Vercel Express 5.435s (-3.6%) 6.859s (-4.3%) 0.142s (-30.3% 🟢) 7.424s (-6.3% 🟢) 1.988s 9 1.00x
▲ Vercel Next.js (Turbopack) 9.661s (+2.5%) 10.988s (+2.2%) 0.093s (-63.9% 🟢) 12.052s (+1.9%) 2.392s 5 1.78x

🔍 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 🥇 Express 0.749s (-3.8%) 1.046s (-1.3%) 0.000s (+Infinity% 🔺) 1.060s (-1.8%) 0.311s 57 1.00x
🐘 Postgres Nitro 0.818s (+6.2% 🔺) 1.103s (~) 0.000s (-80.0% 🟢) 1.120s (~) 0.302s 54 1.09x
🐘 Postgres Next.js (Turbopack) 1.247s (-9.4% 🟢) 1.732s (-11.7% 🟢) 0.000s (+Infinity% 🔺) 1.773s (-11.5% 🟢) 0.526s 34 1.67x
💻 Local Express 1.279s (~) 1.947s (-3.2%) 0.000s (-51.6% 🟢) 1.950s (-3.2%) 0.671s 31 1.71x
💻 Local Nitro 1.307s (+0.7%) 1.919s (-4.7%) 0.000s (-6.3% 🟢) 1.922s (-4.7%) 0.615s 32 1.75x
💻 Local Next.js (Turbopack) 1.577s (+14.1% 🔺) 2.006s (+1.4%) 0.000s (+40.0% 🔺) 2.054s (+1.9%) 0.478s 30 2.11x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.795s (-2.9%) 4.321s (~) 0.000s (+Infinity% 🔺) 4.755s (-1.4%) 1.960s 13 1.00x
▲ Vercel Nitro 2.849s (-98.5% 🟢) 4.309s (-97.7% 🟢) 0.000s (+Infinity% 🔺) 4.748s (-97.4% 🟢) 1.900s 13 1.02x
▲ Vercel Next.js (Turbopack) 5.025s (+18.6% 🔺) 6.025s (+11.0% 🔺) 0.000s (NaN%) 6.883s (+11.0% 🔺) 1.858s 9 1.80x

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

fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.736s (~) 2.300s (+0.5%) 0.000s (+3.8%) 2.335s (+1.3%) 0.599s 26 1.00x
🐘 Postgres Nitro 2.088s (+10.4% 🔺) 2.765s (+13.6% 🔺) 0.000s (-100.0% 🟢) 2.783s (+13.6% 🔺) 0.695s 22 1.20x
🐘 Postgres Next.js (Turbopack) 2.413s (-14.6% 🟢) 2.854s (-15.0% 🟢) 0.000s (+Infinity% 🔺) 2.917s (-14.0% 🟢) 0.504s 21 1.39x
💻 Local Nitro 3.140s (-14.8% 🟢) 3.672s (-14.9% 🟢) 0.000s (-35.9% 🟢) 3.676s (-14.9% 🟢) 0.536s 17 1.81x
💻 Local Express 3.324s (-2.2%) 3.966s (-1.4%) 0.001s (-25.0% 🟢) 3.969s (-1.5%) 0.645s 16 1.91x
💻 Local Next.js (Turbopack) 4.109s (+17.8% 🔺) 4.564s (+14.4% 🔺) 0.001s (-28.6% 🟢) 4.609s (+14.3% 🔺) 0.501s 14 2.37x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.097s (-5.2% 🟢) 5.636s (-0.8%) 0.000s (NaN%) 6.061s (-1.4%) 1.964s 10 1.00x
▲ Vercel Nitro 4.225s (-2.8%) 5.652s (-4.0%) 0.000s (+Infinity% 🔺) 6.070s (-6.0% 🟢) 1.845s 10 1.03x
▲ Vercel Next.js (Turbopack) 6.941s (~) 8.197s (+3.4%) 0.000s (+Infinity% 🔺) 9.076s (+2.7%) 2.135s 7 1.69x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

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

📋 View full workflow run

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

All tests passed

Summary

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

Details by Category

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

📋 View full workflow run

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