Skip to content

fix(vite-frameworks): derive workflow roots#2725

Draft
NathanColosimo wants to merge 2 commits into
mainfrom
codex/2716-astro-sveltekit-roots
Draft

fix(vite-frameworks): derive workflow roots#2725
NathanColosimo wants to merge 2 commits into
mainfrom
codex/2716-astro-sveltekit-roots

Conversation

@NathanColosimo

Copy link
Copy Markdown
Contributor

Refs #2716.

Summary

  • derive Astro builder workingDir and route scan dirs from Astro config.root / config.srcDir
  • derive Astro and SvelteKit projectRoot from the nearest workspace root while keeping explicit builder options as overrides
  • create the SvelteKit HMR builder from Vite's resolved root in dev, without adding another public Workflow config option
  • keep SvelteKit's eager route generation behavior intact, and avoid double-scanning default routes when an internal routesDir is supplied

Verification

  • PATH="/tmp/workflow-pnpm10-bin:/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH" pnpm vitest run packages/astro/src/builder.test.ts packages/sveltekit/src/builder.test.ts
  • PATH="/tmp/workflow-pnpm10-bin:/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH" pnpm turbo build --filter @workflow/astro --filter @workflow/sveltekit
  • PATH="/tmp/workflow-pnpm10-bin:/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH" pnpm biome check packages/astro/src/builder.ts packages/astro/src/plugin.ts packages/astro/src/builder.test.ts packages/sveltekit/src/builder.ts packages/sveltekit/src/plugin.ts packages/sveltekit/src/builder.test.ts .changeset/derived-framework-roots.md
  • PATH="/tmp/workflow-pnpm10-bin:/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH" pnpm turbo build --filter workflow --filter @workflow/sveltekit --filter @workflow/astro
  • PATH="/tmp/workflow-pnpm10-bin:/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH" pnpm turbo build --filter @workflow/ai
  • PATH="/tmp/workflow-pnpm10-bin:/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH" pnpm --filter @workflow/example-sveltekit build

Note: commits use HUSKY=0 locally because this machine's pre-commit hook invokes pnpm 11, which rejects the repo's current pnpm config layout before code checks run. The checks above use the repo-pinned pnpm 10 path.

@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:43pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jun 30, 2026 11:43pm
example-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-astro-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-express-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-fastify-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-hono-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-nitro-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-nuxt-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workbench-vite-workflow Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workflow-docs Ready Ready Preview, Comment, Open in v0 Jun 30, 2026 11:43pm
workflow-swc-playground Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workflow-tarballs Ready Ready Preview, Comment Jun 30, 2026 11:43pm
workflow-web Ready Ready Preview, Comment Jun 30, 2026 11:43pm

@changeset-bot

changeset-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 354c4fc

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

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

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

@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 🥇 Next.js (Turbopack) 0.043s (-20.8% 🟢) 1.005s (~) 0.963s 10 1.00x
💻 Local Nitro 0.046s (+5.2% 🔺) 1.007s (~) 0.961s 10 1.09x
💻 Local Express 0.047s (+1.7%) 1.006s (~) 0.959s 10 1.10x
🐘 Postgres Next.js (Turbopack) 0.059s (-46.2% 🟢) 1.012s (-2.7%) 0.952s 10 1.39x
🐘 Postgres Nitro 0.060s (-5.2% 🟢) 1.012s (~) 0.952s 10 1.40x
🐘 Postgres Express 0.067s (-8.3% 🟢) 1.012s (~) 0.945s 10 1.57x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.238s (-34.9% 🟢) 1.837s (~) 1.599s 10 1.00x
▲ Vercel Next.js (Turbopack) 0.263s (-43.1% 🟢) 2.262s (-11.9% 🟢) 1.999s 10 1.11x
▲ Vercel Express 0.298s (+47.6% 🔺) 2.189s (+10.7% 🔺) 1.890s 10 1.25x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 1.067s (-1.3%) 2.006s (~) 0.939s 10 1.00x
💻 Local Express 1.081s (~) 2.006s (~) 0.925s 10 1.01x
💻 Local Nitro 1.083s (~) 2.007s (~) 0.924s 10 1.01x
🐘 Postgres Express 1.093s (~) 2.010s (~) 0.917s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.094s (-0.7%) 2.009s (~) 0.915s 10 1.03x
🐘 Postgres Nitro 1.099s (+0.6%) 2.009s (~) 0.910s 10 1.03x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.401s (+4.1%) 2.768s (-2.1%) 1.367s 10 1.00x
▲ Vercel Express 1.439s (+5.6% 🔺) 2.932s (+11.4% 🔺) 1.494s 10 1.03x
▲ Vercel Next.js (Turbopack) 2.558s (+13.9% 🔺) 4.103s (+7.5% 🔺) 1.546s 10 1.83x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 10.413s (-0.6%) 11.022s (~) 0.610s 3 1.00x
🐘 Postgres Express 10.442s (~) 11.017s (~) 0.575s 3 1.00x
💻 Local Nitro 10.445s (~) 11.023s (~) 0.578s 3 1.00x
💻 Local Express 10.451s (~) 11.022s (~) 0.571s 3 1.00x
🐘 Postgres Nitro 10.476s (~) 11.017s (~) 0.541s 3 1.01x
🐘 Postgres Next.js (Turbopack) 10.541s (+1.4%) 11.016s (~) 0.474s 3 1.01x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 11.554s (-2.9%) 13.510s (-1.2%) 1.956s 3 1.00x
▲ Vercel Express 11.710s (-2.9%) 14.145s (+3.8%) 2.435s 3 1.01x
▲ Vercel Next.js (Turbopack) 12.981s (+2.4%) 15.171s (+3.0%) 2.190s 2 1.12x

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

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 13.379s (-2.1%) 14.026s (~) 0.647s 5 1.00x
🐘 Postgres Express 13.526s (-0.7%) 14.016s (~) 0.490s 5 1.01x
🐘 Postgres Nitro 13.630s (~) 14.019s (~) 0.389s 5 1.02x
💻 Local Nitro 13.637s (+0.5%) 14.027s (~) 0.390s 5 1.02x
💻 Local Express 13.641s (-0.7%) 14.026s (~) 0.385s 5 1.02x
🐘 Postgres Next.js (Turbopack) 13.704s (~) 14.021s (~) 0.317s 5 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 16.175s (-3.5%) 18.190s (-1.3%) 2.015s 4 1.00x
▲ Vercel Express 16.416s (~) 19.242s (+2.8%) 2.826s 4 1.01x
▲ Vercel Next.js (Turbopack) 17.869s (+3.9%) 20.159s (+4.4%) 2.290s 3 1.10x

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

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 11.703s (-3.9%) 12.022s (-7.7% 🟢) 0.318s 8 1.00x
🐘 Postgres Express 12.072s (-3.3%) 12.771s (-1.9%) 0.699s 8 1.03x
🐘 Postgres Nitro 12.085s (-0.9%) 13.019s (~) 0.934s 7 1.03x
🐘 Postgres Next.js (Turbopack) 12.187s (-2.0%) 13.016s (+0.8%) 0.828s 7 1.04x
💻 Local Nitro 12.197s (+0.7%) 13.028s (~) 0.831s 7 1.04x
💻 Local Express 12.359s (+1.5%) 13.024s (~) 0.665s 7 1.06x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 16.848s (-2.9%) 19.110s (+0.8%) 2.263s 5 1.00x
▲ Vercel Express 16.874s (-4.2%) 19.384s (~) 2.510s 5 1.00x
▲ Vercel Next.js (Turbopack) 19.754s (-0.5%) 22.020s (+0.7%) 2.266s 5 1.17x

🔍 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.182s (~) 2.008s (~) 0.826s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.183s (-7.0% 🟢) 2.008s (-1.6%) 0.825s 15 1.00x
🐘 Postgres Nitro 1.189s (-1.1%) 2.007s (~) 0.819s 15 1.01x
💻 Local Next.js (Turbopack) 1.297s (-8.9% 🟢) 2.005s (~) 0.708s 15 1.10x
💻 Local Express 1.369s (-1.7%) 2.007s (~) 0.638s 15 1.16x
💻 Local Nitro 1.388s (-0.9%) 2.006s (~) 0.619s 15 1.17x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.235s (+13.2% 🔺) 4.689s (+25.7% 🔺) 2.454s 7 1.00x
▲ Vercel Nitro 2.702s (+23.5% 🔺) 4.295s (+13.1% 🔺) 1.593s 7 1.21x
▲ Vercel Next.js (Turbopack) 3.134s (-5.4% 🟢) 5.038s (-1.6%) 1.904s 6 1.40x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.292s (-2.3%) 2.151s (-23.9% 🟢) 0.859s 14 1.00x
🐘 Postgres Next.js (Turbopack) 1.303s (-2.1%) 2.827s (+14.0% 🔺) 1.524s 11 1.01x
🐘 Postgres Express 1.313s (-3.1%) 2.507s (+8.3% 🔺) 1.194s 12 1.02x
💻 Local Next.js (Turbopack) 2.124s (-22.5% 🟢) 2.735s (-12.0% 🟢) 0.611s 11 1.64x
💻 Local Express 2.372s (-8.2% 🟢) 3.009s (~) 0.637s 10 1.84x
💻 Local Nitro 2.421s (-3.9%) 3.009s (-3.2%) 0.588s 10 1.87x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.788s (+16.6% 🔺) 4.367s (+14.1% 🔺) 1.579s 7 1.00x
▲ Vercel Next.js (Turbopack) 3.618s (~) 5.298s (-8.3% 🟢) 1.680s 6 1.30x
▲ Vercel Express 4.439s (+67.5% 🔺) 6.154s (+52.9% 🔺) 1.715s 5 1.59x

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

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.618s (+1.8%) 4.012s (~) 2.394s 8 1.00x
🐘 Postgres Nitro 1.625s (+2.3%) 4.012s (~) 2.386s 8 1.00x
🐘 Postgres Next.js (Turbopack) 2.840s (+56.0% 🔺) 5.516s (+12.8% 🔺) 2.676s 6 1.76x
💻 Local Next.js (Turbopack) 3.304s (-57.8% 🟢) 3.894s (-51.4% 🟢) 0.590s 8 2.04x
💻 Local Express 4.660s (-30.0% 🟢) 5.180s (-30.2% 🟢) 0.520s 6 2.88x
💻 Local Nitro 4.670s (-24.1% 🟢) 5.347s (-21.6% 🟢) 0.677s 6 2.89x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.313s (+25.3% 🔺) 4.610s (+9.0% 🔺) 1.297s 8 1.00x
▲ Vercel Express 3.555s (+32.6% 🔺) 5.363s (+23.7% 🔺) 1.808s 6 1.07x
▲ Vercel Next.js (Turbopack) 4.638s (+11.8% 🔺) 6.609s (+8.2% 🔺) 1.971s 5 1.40x

🔍 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 🥇 Next.js (Turbopack) 1.179s (~) 2.008s (~) 0.829s 15 1.00x
🐘 Postgres Express 1.181s (~) 2.006s (~) 0.825s 15 1.00x
🐘 Postgres Nitro 1.184s (+1.1%) 2.006s (~) 0.822s 15 1.00x
💻 Local Next.js (Turbopack) 1.360s (-4.9%) 2.006s (~) 0.646s 15 1.15x
💻 Local Express 1.419s (-1.8%) 2.007s (~) 0.588s 15 1.20x
💻 Local Nitro 1.450s (+5.7% 🔺) 2.007s (~) 0.557s 15 1.23x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 1.929s (+0.6%) 3.773s (+6.7% 🔺) 1.844s 8 1.00x
▲ Vercel Express 2.091s (+10.5% 🔺) 4.079s (+9.8% 🔺) 1.988s 8 1.08x
▲ Vercel Next.js (Turbopack) 3.167s (+2.9%) 5.082s (+3.0%) 1.915s 6 1.64x

🔍 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.288s (-2.0%) 2.392s (-7.7% 🟢) 1.104s 13 1.00x
🐘 Postgres Express 1.320s (+1.0%) 2.075s (-16.0% 🟢) 0.755s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.329s (-5.4% 🟢) 2.827s (+11.6% 🔺) 1.499s 11 1.03x
💻 Local Next.js (Turbopack) 2.161s (-19.0% 🟢) 2.826s (-11.9% 🟢) 0.665s 11 1.68x
💻 Local Express 2.407s (-8.7% 🟢) 3.009s (~) 0.602s 10 1.87x
💻 Local Nitro 2.632s (-3.9%) 3.109s (-7.0% 🟢) 0.476s 10 2.04x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.243s (-10.5% 🟢) 4.013s (+1.6%) 1.770s 8 1.00x
▲ Vercel Nitro 2.529s (+9.1% 🔺) 4.024s (+6.5% 🔺) 1.495s 8 1.13x
▲ Vercel Next.js (Turbopack) 3.410s (~) 5.053s (-4.1%) 1.644s 6 1.52x

🔍 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 🥇 Nitro 1.595s (-3.0%) 4.135s (-3.8%) 2.540s 8 1.00x
🐘 Postgres Express 1.607s (+0.9%) 4.011s (-3.0%) 2.404s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.327s (+27.6% 🔺) 6.216s (+18.8% 🔺) 2.889s 5 2.09x
💻 Local Next.js (Turbopack) 4.061s (-36.2% 🟢) 4.877s (-32.5% 🟢) 0.816s 7 2.55x
💻 Local Nitro 5.527s (-14.2% 🟢) 6.216s (-16.2% 🟢) 0.689s 5 3.46x
💻 Local Express 5.643s (-10.9% 🟢) 6.215s (-8.8% 🟢) 0.572s 5 3.54x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.972s (+4.7%) 4.394s (~) 1.422s 8 1.00x
▲ Vercel Express 3.033s (+7.2% 🔺) 4.940s (+8.4% 🔺) 1.907s 7 1.02x
▲ Vercel Next.js (Turbopack) 5.138s (+17.4% 🔺) 7.266s (+17.7% 🔺) 2.129s 5 1.73x

🔍 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
💻 Local 🥇 Next.js (Turbopack) 0.507s (-23.4% 🟢) 1.004s (-5.1% 🟢) 0.497s 60 1.00x
🐘 Postgres Express 0.516s (-6.5% 🟢) 1.006s (~) 0.489s 60 1.02x
🐘 Postgres Nitro 0.539s (-4.4%) 1.023s (~) 0.484s 59 1.06x
🐘 Postgres Next.js (Turbopack) 0.553s (-9.0% 🟢) 1.024s (-2.7%) 0.471s 59 1.09x
💻 Local Nitro 0.585s (-3.1%) 1.005s (-3.3%) 0.420s 60 1.15x
💻 Local Express 0.600s (+8.7% 🔺) 1.022s (+1.7%) 0.422s 59 1.19x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.327s (-15.4% 🟢) 3.834s (-14.0% 🟢) 1.506s 16 1.00x
▲ Vercel Express 2.337s (-13.2% 🟢) 4.085s (-4.8%) 1.748s 15 1.00x
▲ Vercel Next.js (Turbopack) 3.995s (+10.7% 🔺) 5.406s (~) 1.411s 12 1.72x

🔍 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.233s (-8.7% 🟢) 2.007s (-1.1%) 0.774s 45 1.00x
🐘 Postgres Nitro 1.253s (-4.6%) 2.007s (-2.3%) 0.754s 45 1.02x
💻 Local Next.js (Turbopack) 1.311s (-11.9% 🟢) 2.027s (+1.1%) 0.716s 45 1.06x
🐘 Postgres Next.js (Turbopack) 1.332s (-10.5% 🟢) 2.030s (-5.0% 🟢) 0.698s 45 1.08x
💻 Local Nitro 1.470s (+2.8%) 2.006s (~) 0.536s 45 1.19x
💻 Local Express 1.492s (+6.5% 🔺) 2.006s (~) 0.514s 45 1.21x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.257s (-14.7% 🟢) 7.716s (-1.7%) 2.459s 12 1.00x
▲ Vercel Nitro 5.632s (-8.2% 🟢) 7.276s (-4.0%) 1.644s 13 1.07x
▲ Vercel Next.js (Turbopack) 8.083s (+1.9%) 10.038s (+2.5%) 1.956s 9 1.54x

🔍 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.424s (-7.9% 🟢) 3.033s (-1.7%) 0.609s 40 1.00x
🐘 Postgres Nitro 2.496s (-4.1%) 3.058s (+0.8%) 0.563s 40 1.03x
🐘 Postgres Next.js (Turbopack) 2.624s (-10.9% 🟢) 3.034s (-12.1% 🟢) 0.410s 40 1.08x
💻 Local Next.js (Turbopack) 2.862s (-10.6% 🟢) 3.217s (-19.8% 🟢) 0.355s 38 1.18x
💻 Local Nitro 3.191s (~) 3.821s (-3.2%) 0.630s 32 1.32x
💻 Local Express 3.198s (+7.1% 🔺) 4.010s (+15.7% 🔺) 0.812s 30 1.32x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 10.472s (-10.5% 🟢) 12.650s (-5.5% 🟢) 2.179s 10 1.00x
▲ Vercel Nitro 11.012s (-7.1% 🟢) 12.636s (-5.8% 🟢) 1.624s 10 1.05x
▲ Vercel Next.js (Turbopack) 16.457s (-2.4%) 18.534s (-0.9%) 2.077s 7 1.57x

🔍 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 🥇 Next.js (Turbopack) 0.182s (-21.3% 🟢) 1.006s (~) 0.824s 60 1.00x
🐘 Postgres Express 0.198s (-10.7% 🟢) 1.006s (~) 0.808s 60 1.09x
🐘 Postgres Nitro 0.216s (+0.8%) 1.006s (~) 0.789s 60 1.19x
💻 Local Express 0.513s (+14.1% 🔺) 1.005s (~) 0.492s 60 2.82x
💻 Local Next.js (Turbopack) 0.555s (-11.7% 🟢) 1.021s (+1.6%) 0.466s 59 3.05x
💻 Local Nitro 0.572s (+33.2% 🔺) 1.022s (+1.7%) 0.450s 59 3.14x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.081s (+16.0% 🔺) 2.767s (+11.7% 🔺) 1.686s 22 1.00x
▲ Vercel Nitro 1.211s (+18.1% 🔺) 2.736s (+12.2% 🔺) 1.525s 22 1.12x
▲ Vercel Next.js (Turbopack) 2.445s (+23.3% 🔺) 4.152s (+8.0% 🔺) 1.707s 15 2.26x

🔍 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 🥇 Next.js (Turbopack) 0.277s (-13.0% 🟢) 1.006s (-1.5%) 0.729s 90 1.00x
🐘 Postgres Express 0.309s (-7.3% 🟢) 1.006s (~) 0.697s 90 1.12x
🐘 Postgres Nitro 0.321s (-4.6%) 1.017s (+1.1%) 0.696s 89 1.16x
💻 Local Next.js (Turbopack) 2.343s (-19.9% 🟢) 3.042s (-10.0% 🟢) 0.699s 30 8.47x
💻 Local Express 2.441s (+12.2% 🔺) 3.010s (+8.8% 🔺) 0.569s 30 8.82x
💻 Local Nitro 2.517s (+30.8% 🔺) 3.009s (+19.9% 🔺) 0.492s 30 9.09x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.577s (+10.8% 🔺) 3.180s (+5.8% 🔺) 1.603s 29 1.00x
▲ Vercel Nitro 1.881s (+16.2% 🔺) 3.363s (+11.9% 🔺) 1.482s 27 1.19x
▲ Vercel Next.js (Turbopack) 2.944s (+18.1% 🔺) 4.683s (+14.0% 🔺) 1.739s 20 1.87x

🔍 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 🥇 Nitro 0.496s (-9.6% 🟢) 1.068s (-5.4% 🟢) 0.571s 113 1.00x
🐘 Postgres Express 0.503s (-7.5% 🟢) 1.059s (-5.2% 🟢) 0.556s 114 1.01x
🐘 Postgres Next.js (Turbopack) 0.511s (+2.1%) 3.009s (+19.7% 🔺) 2.498s 40 1.03x
💻 Local Nitro 5.549s (-42.5% 🟢) 8.625s (-20.0% 🟢) 3.075s 15 11.18x
💻 Local Next.js (Turbopack) 5.616s (-48.0% 🟢) 7.959s (-32.3% 🟢) 2.343s 16 11.32x
💻 Local Express 5.738s (-37.9% 🟢) 8.292s (-20.6% 🟢) 2.554s 15 11.56x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.876s (+5.5% 🔺) 3.908s (+6.8% 🔺) 2.032s 31 1.00x
▲ Vercel Nitro 2.023s (+20.7% 🔺) 3.785s (+9.7% 🔺) 1.762s 33 1.08x
▲ Vercel Next.js (Turbopack) 4.002s (-1.5%) 5.577s (-4.9%) 1.576s 22 2.13x

🔍 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 🥇 Next.js (Turbopack) 1.111s (-2.5%) 1.975s (~) 0.008s (-33.3% 🟢) 2.014s (~) 0.903s 10 1.00x
💻 Local Express 1.156s (+1.4%) 2.004s (~) 0.012s (+10.4% 🔺) 2.019s (~) 0.863s 10 1.04x
🐘 Postgres Express 1.157s (~) 1.995s (~) 0.001s (-16.7% 🟢) 2.010s (~) 0.853s 10 1.04x
💻 Local Nitro 1.162s (+0.5%) 2.005s (~) 0.012s (+15.0% 🔺) 2.020s (~) 0.858s 10 1.05x
🐘 Postgres Next.js (Turbopack) 1.166s (-4.6%) 2.000s (+0.6%) 0.001s (+44.4% 🔺) 2.010s (~) 0.845s 10 1.05x
🐘 Postgres Nitro 1.170s (-1.5%) 1.995s (~) 0.001s (~) 2.010s (~) 0.840s 10 1.05x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.928s (-5.4% 🟢) 9.240s (+175.6% 🔺) 0.412s (-70.3% 🟢) 10.387s (+98.4% 🔺) 8.459s 10 1.00x
▲ Vercel Nitro 1.974s (+3.3%) 8.674s (+178.8% 🔺) 0.238s (-85.5% 🟢) 9.421s (+82.3% 🔺) 7.446s 10 1.02x
▲ Vercel Next.js (Turbopack) 3.716s (+15.8% 🔺) 7.667s (+91.8% 🔺) 0.154s (-81.4% 🟢) 9.520s (+55.7% 🔺) 5.804s 10 1.93x

🔍 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
💻 Local 🥇 Next.js (Turbopack) 1.465s (-7.2% 🟢) 1.978s (~) 0.011s (-2.0%) 2.022s (~) 0.557s 30 1.00x
🐘 Postgres Express 1.517s (-4.4%) 2.006s (-1.5%) 0.005s (+5.9% 🔺) 2.028s (-1.5%) 0.511s 30 1.04x
🐘 Postgres Nitro 1.532s (-2.6%) 2.003s (~) 0.005s (-8.0% 🟢) 2.024s (~) 0.492s 30 1.05x
💻 Local Express 1.555s (+1.0%) 2.011s (~) 0.013s (-4.7%) 2.027s (~) 0.472s 30 1.06x
💻 Local Nitro 1.574s (+0.9%) 2.010s (~) 0.012s (-7.6% 🟢) 2.025s (~) 0.451s 30 1.07x
🐘 Postgres Next.js (Turbopack) 1.634s (-13.6% 🟢) 2.050s (-9.4% 🟢) 0.005s (-34.2% 🟢) 2.066s (-10.3% 🟢) 0.432s 30 1.12x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.482s (-3.2%) 7.256s (+4.1%) 0.091s (-68.0% 🟢) 7.861s (+2.4%) 2.379s 8 1.00x
▲ Vercel Express 5.804s (+2.9%) 7.987s (+11.5% 🔺) 0.242s (+18.3% 🔺) 8.720s (+10.1% 🔺) 2.916s 7 1.06x
▲ Vercel Next.js (Turbopack) 9.344s (-0.9%) 11.334s (+5.4% 🔺) 0.136s (-46.9% 🟢) 11.984s (+1.4%) 2.640s 6 1.70x

🔍 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.745s (-3.3%) 1.042s (-5.7% 🟢) 0.000s (-81.1% 🟢) 1.063s (-4.9%) 0.318s 57 1.00x
🐘 Postgres Express 0.763s (-2.0%) 1.084s (+2.2%) 0.000s (+Infinity% 🔺) 1.098s (+1.8%) 0.336s 55 1.02x
🐘 Postgres Next.js (Turbopack) 0.939s (-31.8% 🟢) 1.354s (-31.0% 🟢) 0.000s (NaN%) 1.363s (-32.0% 🟢) 0.424s 45 1.26x
💻 Local Next.js (Turbopack) 1.101s (-20.3% 🟢) 1.650s (-16.6% 🟢) 0.000s (-58.3% 🟢) 1.680s (-16.7% 🟢) 0.579s 36 1.48x
💻 Local Express 1.319s (+3.6%) 1.919s (-4.6%) 0.000s (+1.6%) 1.922s (-4.6%) 0.603s 32 1.77x
💻 Local Nitro 1.383s (+6.5% 🔺) 1.981s (-1.6%) 0.000s (-3.2%) 1.984s (-1.6%) 0.601s 31 1.86x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.948s (-98.4% 🟢) 4.313s (-97.7% 🟢) 0.000s (NaN%) 4.794s (-97.4% 🟢) 1.846s 13 1.00x
▲ Vercel Express 3.197s (+11.1% 🔺) 4.680s (+8.0% 🔺) 0.000s (+Infinity% 🔺) 5.172s (+7.3% 🔺) 1.974s 12 1.08x
▲ Vercel Next.js (Turbopack) 4.663s (+10.1% 🔺) 5.452s (~) 0.000s (NaN%) 6.613s (+6.7% 🔺) 1.949s 10 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.691s (-10.6% 🟢) 2.213s (-9.1% 🟢) 0.000s (-7.4% 🟢) 2.230s (-9.0% 🟢) 0.538s 27 1.00x
🐘 Postgres Express 1.694s (-2.1%) 2.301s (+0.6%) 0.000s (+3.8%) 2.316s (~) 0.622s 26 1.00x
🐘 Postgres Next.js (Turbopack) 2.326s (-17.7% 🟢) 2.865s (-14.7% 🟢) 0.000s (+Infinity% 🔺) 2.874s (-15.3% 🟢) 0.548s 22 1.38x
💻 Local Next.js (Turbopack) 2.821s (-19.1% 🟢) 3.329s (-16.6% 🟢) 0.000s (-66.7% 🟢) 3.359s (-16.7% 🟢) 0.539s 18 1.67x
💻 Local Nitro 3.266s (-11.4% 🟢) 3.842s (-11.0% 🟢) 0.000s (-31.9% 🟢) 3.845s (-11.0% 🟢) 0.579s 16 1.93x
💻 Local Express 3.299s (-2.9%) 3.966s (-1.4%) 0.001s (-6.2% 🟢) 3.969s (-1.5%) 0.670s 16 1.95x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.102s (-5.7% 🟢) 5.732s (-2.7%) 0.000s (NaN%) 6.171s (-4.4%) 2.069s 10 1.00x
▲ Vercel Express 4.295s (-0.6%) 6.271s (+10.4% 🔺) 0.001s (+Infinity% 🔺) 6.774s (+10.2% 🔺) 2.478s 9 1.05x
▲ Vercel Next.js (Turbopack) 7.299s (+5.2% 🔺) 8.419s (+6.2% 🔺) 0.000s (NaN%) 9.617s (+8.8% 🔺) 2.318s 7 1.78x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

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

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