Skip to content

[workbench] Add TanStack Start workbench#1875

Draft
VaguelySerious wants to merge 3 commits intomainfrom
peter/tanstack-start
Draft

[workbench] Add TanStack Start workbench#1875
VaguelySerious wants to merge 3 commits intomainfrom
peter/tanstack-start

Conversation

@VaguelySerious
Copy link
Copy Markdown
Member

@VaguelySerious VaguelySerious commented Apr 30, 2026

Summary

  • Adds a TanStack Start workbench app under workbench/tanstack-start/. TanStack Start runs on Vite + Nitro, so the existing workflow/vite plugin already supports it — no SDK changes are needed.
  • Wires the new app into the local-build, dev, local-prod, local-postgres, and Vercel-prod e2e matrices with the same shape as the other vite/nitro apps.
  • Adds a getting-started/tanstack-start guide and removes the "coming soon" badge from the home-page framework grid.

Derived from first principles, but cross-checked against #877 for project ID and route names so the existing Vercel project (prj_643jeVugTMq5ivsOFQHcbLG1qcnu) can be reused.

Notable choices

  • Workbench app is intentionally minimal — just /, /api/chat (HMR sentinel), and /api/test-direct-step-call. Symlinks workflows/ and plugins/ from workbench/nitro-v3/ so we don't fork the test suite.
  • routeTree.gen.ts is gitignored and added to biome's exclusion list — TanStack regenerates it on vite dev/vite build.
  • Both src/routes/api/* files avoid statically importing workflow source. TanStack Start bundles all src/routes/** files together; statically importing a workflow file pulls its class definitions into the route chunk, where the SWC plugin re-emits class-registration IIFEs under the app's host. Combined with the canonical registrations under the source-file host, the second Object.defineProperty(cls, "classId", { configurable: false }) then throws at module-load time. Using a dynamic import for the HMR sentinel and an inline step for the direct-step-call test avoids this pathway.
  • Docs page is forked from getting-started/vite.mdx (same Vite plugin under the hood).

Test plan

Validated locally against the workbench's prod build (pnpm build && node .output/server/index.mjs) with both world backends, mirroring CI:

  • pnpm turbo run build --filter='!./workbench/*' (packages + docs)
  • cd workbench/tanstack-start && pnpm build (prod build)
  • APP_NAME=tanstack-start pnpm vitest run packages/core/e2e/local-build.test.ts — 13/13 pass
  • APP_NAME=tanstack-start DEV_TEST_CONFIG=... pnpm vitest run packages/core/e2e/dev.test.ts against vite dev — 3/3 pass (3 N/A skipped: Next.js-only)
  • APP_NAME=tanstack-start ... pnpm vitest run packages/core/e2e/e2e.test.ts against vite dev — 70/70 pass (6 N/A skipped: Pages Router)
  • Same against prod build with local world — 71/71 pass (6 N/A skipped)
  • Same against prod build with postgres world (Docker postgres:18-alpine matching CI) — 71/71 pass (6 N/A skipped)

CI status

  • ✅ E2E Local Dev (tanstack-start)
  • ✅ E2E Local Prod (tanstack-start)
  • ✅ E2E Local Postgres (tanstack-start)
  • ❌ E2E Vercel Prod (tanstack-start) — Vercel preview never appears for this branch's SHA. The project ID was carried over from feat: add tanstack support #877's draft; whoever takes this over needs to confirm workbench-tanstack-start-workflow is connected to this repo / has the GitHub deployment hook enabled before un-drafting.
  • ❌ Docs Preview Smoke Checks — same failure happens on other recent PRs and is being fixed in ci: switch Vercel deployment-protection bypass to OIDC Trusted Sources #1882 (migrating from static VERCEL_AUTOMATION_BYPASS_SECRET to OIDC Trusted Sources). Not caused by changes in this PR.
  • Other failures on this PR (Benchmark Vercel, Community Worlds, nextjs Vercel deployments) are pre-existing and unrelated.

🤖 Generated with Claude Code

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 30, 2026

🦋 Changeset detected

Latest commit: 175b118

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

This PR includes changesets to release 17 packages
Name Type
@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 Patch
@workflow/world-testing Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite Patch
@workflow/nuxt Patch
@workflow/ai 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 Apr 30, 2026

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

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Error Error May 2, 2026 1:05am
example-nextjs-workflow-webpack Error Error May 2, 2026 1:05am
example-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-astro-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-express-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-fastify-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-hono-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-nitro-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-nuxt-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-sveltekit-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workbench-vite-workflow Ready Ready Preview, Comment May 2, 2026 1:05am
workflow-docs Ready Ready Preview, Comment, Open in v0 May 2, 2026 1:05am
workflow-swc-playground Ready Ready Preview, Comment May 2, 2026 1:05am
workflow-web Ready Ready Preview, Comment May 2, 2026 1:05am

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 30, 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.034s (-20.9% 🟢) 1.005s (~) 0.971s 10 1.00x
💻 Local Express 0.043s (-4.1%) 1.006s (~) 0.964s 10 1.25x
💻 Local Next.js (Turbopack) 0.049s 1.005s 0.956s 10 1.44x
🐘 Postgres Next.js (Turbopack) 0.056s 1.012s 0.956s 10 1.65x
🐘 Postgres Express 0.061s (+5.5% 🔺) 1.010s (~) 0.949s 10 1.79x
🐘 Postgres Nitro 0.063s (-34.0% 🟢) 1.011s (-3.1%) 0.948s 10 1.84x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.411s (+74.8% 🔺) 2.643s (+23.7% 🔺) 2.231s 10 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.099s (-2.8%) 2.006s (~) 0.906s 10 1.00x
💻 Local Next.js (Turbopack) 1.116s 2.006s 0.890s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.123s 2.011s 0.887s 10 1.02x
💻 Local Express 1.135s (+0.9%) 2.006s (~) 0.871s 10 1.03x
🐘 Postgres Express 1.143s (~) 2.011s (~) 0.868s 10 1.04x
🐘 Postgres Nitro 1.149s (+0.8%) 2.009s (~) 0.861s 10 1.04x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.970s (+5.1% 🔺) 3.779s (-0.7%) 1.809s 10 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 10.628s (-2.9%) 11.021s (~) 0.393s 3 1.00x
🐘 Postgres Next.js (Turbopack) 10.753s 11.023s 0.271s 3 1.01x
💻 Local Next.js (Turbopack) 10.775s 11.023s 0.248s 3 1.01x
🐘 Postgres Express 10.899s (-0.6%) 11.026s (~) 0.127s 3 1.03x
🐘 Postgres Nitro 10.923s (~) 11.027s (~) 0.104s 3 1.03x
💻 Local Express 11.087s (+1.5%) 11.360s (+3.1%) 0.273s 3 1.04x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 18.165s (+7.0% 🔺) 20.103s (~) 1.938s 2 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 14.180s (-5.9% 🟢) 15.029s (-6.2% 🟢) 0.849s 4 1.00x
🐘 Postgres Next.js (Turbopack) 14.182s 15.029s 0.847s 4 1.00x
🐘 Postgres Express 14.514s (~) 15.023s (~) 0.510s 4 1.02x
🐘 Postgres Nitro 14.545s (~) 15.023s (~) 0.478s 4 1.03x
💻 Local Next.js (Turbopack) 14.628s 15.029s 0.401s 4 1.03x
💻 Local Express 14.957s (~) 15.029s (~) 0.072s 4 1.05x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 32.551s (-35.3% 🟢) 33.977s (-35.4% 🟢) 1.426s 2 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 13.381s 14.027s 0.646s 7 1.00x
🐘 Postgres Nitro 13.986s (~) 14.308s (~) 0.322s 7 1.05x
🐘 Postgres Express 14.099s (+0.7%) 14.881s (+2.0%) 0.782s 7 1.05x
💻 Local Nitro 14.792s (-11.9% 🟢) 15.026s (-11.8% 🟢) 0.235s 6 1.11x
💻 Local Next.js (Turbopack) 16.142s 17.030s 0.888s 6 1.21x
💻 Local Express 16.448s (-0.9%) 17.031s (~) 0.583s 6 1.23x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 54.638s (-54.9% 🟢) 56.926s (-54.0% 🟢) 2.288s 2 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.249s 2.010s 0.761s 15 1.00x
🐘 Postgres Express 1.261s (~) 2.009s (~) 0.748s 15 1.01x
🐘 Postgres Nitro 1.270s (~) 2.009s (~) 0.740s 15 1.02x
💻 Local Nitro 1.466s (-10.2% 🟢) 2.005s (-3.3%) 0.540s 15 1.17x
💻 Local Express 1.485s (~) 2.005s (~) 0.520s 15 1.19x
💻 Local Next.js (Turbopack) 1.552s 2.006s 0.454s 15 1.24x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.058s (-28.0% 🟢) 3.776s (-18.3% 🟢) 1.719s 8 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.310s (-2.2%) 3.008s (~) 0.698s 10 1.00x
🐘 Postgres Nitro 2.341s (~) 3.010s (~) 0.669s 10 1.01x
🐘 Postgres Next.js (Turbopack) 2.411s 3.009s 0.599s 10 1.04x
💻 Local Nitro 2.659s (-15.4% 🟢) 3.007s (-22.6% 🟢) 0.348s 10 1.15x
💻 Local Next.js (Turbopack) 2.941s 3.342s 0.400s 9 1.27x
💻 Local Express 3.032s (+2.7%) 3.342s (-3.2%) 0.310s 9 1.31x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.673s (-26.1% 🟢) 5.007s (-2.0%) 2.334s 6 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.454s (-0.9%) 4.011s (~) 0.557s 8 1.00x
🐘 Postgres Nitro 3.483s (~) 4.011s (~) 0.528s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.589s 4.012s 0.423s 8 1.04x
💻 Local Nitro 6.795s (-18.6% 🟢) 7.013s (-22.3% 🟢) 0.218s 5 1.97x
💻 Local Next.js (Turbopack) 7.540s 8.267s 0.727s 4 2.18x
💻 Local Express 7.794s (-6.5% 🟢) 8.019s (-11.2% 🟢) 0.224s 4 2.26x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.995s (-29.4% 🟢) 4.991s (-18.5% 🟢) 1.996s 7 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.190s 2.009s 0.818s 15 1.00x
🐘 Postgres Nitro 1.258s (~) 2.009s (~) 0.751s 15 1.06x
🐘 Postgres Express 1.268s (+0.9%) 2.009s (~) 0.741s 15 1.07x
💻 Local Nitro 1.476s (-20.9% 🟢) 2.005s (-14.3% 🟢) 0.529s 15 1.24x
💻 Local Express 1.518s (-19.8% 🟢) 2.006s (-15.1% 🟢) 0.488s 15 1.28x
💻 Local Next.js (Turbopack) 1.599s 2.073s 0.474s 15 1.34x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.017s (-21.9% 🟢) 3.726s (-14.3% 🟢) 1.709s 9 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.348s (~) 3.010s (~) 0.662s 10 1.00x
🐘 Postgres Nitro 2.350s (~) 3.010s (~) 0.660s 10 1.00x
🐘 Postgres Next.js (Turbopack) 2.380s 3.009s 0.629s 10 1.01x
💻 Local Nitro 2.686s (-12.4% 🟢) 3.007s (-22.6% 🟢) 0.321s 10 1.14x
💻 Local Next.js (Turbopack) 2.904s 3.564s 0.660s 9 1.24x
💻 Local Express 3.056s (-2.4%) 3.760s (~) 0.704s 8 1.30x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.308s (-27.7% 🟢) 3.948s (-17.6% 🟢) 1.640s 8 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 3.456s (-0.7%) 4.010s (~) 0.554s 8 1.00x
🐘 Postgres Express 3.484s (~) 4.008s (~) 0.524s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.568s 4.012s 0.443s 8 1.03x
💻 Local Nitro 7.463s (-18.4% 🟢) 8.015s (-20.0% 🟢) 0.551s 4 2.16x
💻 Local Express 7.827s (-11.1% 🟢) 8.774s (-5.4% 🟢) 0.947s 4 2.26x
💻 Local Next.js (Turbopack) 8.093s 8.520s 0.427s 4 2.34x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.223s (-49.8% 🟢) 4.804s (-41.3% 🟢) 1.581s 7 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.665s 1.006s 0.341s 60 1.00x
💻 Local Nitro 0.678s (-30.9% 🟢) 1.004s (-8.2% 🟢) 0.326s 60 1.02x
🐘 Postgres Nitro 0.822s (~) 1.007s (~) 0.185s 60 1.24x
🐘 Postgres Express 0.826s (-1.6%) 1.006s (-1.7%) 0.180s 60 1.24x
💻 Local Next.js (Turbopack) 0.849s 1.039s 0.190s 58 1.28x
💻 Local Express 1.021s (+3.7%) 1.770s (+64.5% 🔺) 0.750s 34 1.54x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 9.152s (-51.9% 🟢) 10.952s (-48.7% 🟢) 1.800s 6 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.663s 2.031s 0.368s 45 1.00x
🐘 Postgres Nitro 1.935s (~) 2.076s (-1.2%) 0.141s 44 1.16x
🐘 Postgres Express 1.936s (-2.1%) 2.202s (-2.5%) 0.267s 41 1.16x
💻 Local Nitro 2.212s (-27.1% 🟢) 3.007s (-20.0% 🟢) 0.795s 30 1.33x
💻 Local Next.js (Turbopack) 2.651s 3.008s 0.356s 30 1.59x
💻 Local Express 3.020s (~) 3.416s (-4.7%) 0.396s 27 1.82x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 31.383s (-9.1% 🟢) 33.650s (-8.6% 🟢) 2.267s 3 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 3.433s 4.012s 0.579s 30 1.00x
🐘 Postgres Express 3.923s (-1.7%) 4.148s (-5.1% 🟢) 0.225s 29 1.14x
🐘 Postgres Nitro 3.936s (-4.1%) 4.110s (-10.7% 🟢) 0.174s 30 1.15x
💻 Local Nitro 7.348s (-21.0% 🟢) 8.016s (-20.0% 🟢) 0.668s 15 2.14x
💻 Local Next.js (Turbopack) 8.561s 9.017s 0.456s 14 2.49x
💻 Local Express 8.948s (-2.8%) 9.326s (-6.9% 🟢) 0.377s 13 2.61x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 82.528s (-36.5% 🟢) 84.670s (-35.9% 🟢) 2.142s 2 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

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.218s 1.007s 0.790s 60 1.00x
🐘 Postgres Express 0.282s (~) 1.007s (~) 0.725s 60 1.29x
🐘 Postgres Nitro 0.286s (+0.8%) 1.007s (~) 0.721s 60 1.31x
💻 Local Next.js (Turbopack) 0.544s 1.005s 0.461s 60 2.50x
💻 Local Express 0.566s (+1.0%) 1.004s (~) 0.439s 60 2.60x
💻 Local Nitro 0.602s (~) 1.021s (~) 0.419s 59 2.77x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.643s (-15.9% 🟢) 3.239s (-10.9% 🟢) 1.596s 20 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

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.444s 1.006s 0.562s 90 1.00x
🐘 Postgres Express 0.483s (-5.2% 🟢) 1.006s (~) 0.523s 90 1.09x
🐘 Postgres Nitro 0.501s (+0.9%) 1.007s (~) 0.506s 90 1.13x
💻 Local Express 2.364s (-5.9% 🟢) 3.009s (~) 0.644s 30 5.32x
💻 Local Nitro 2.483s (-2.2%) 3.008s (~) 0.525s 30 5.59x
💻 Local Next.js (Turbopack) 2.510s 3.008s 0.499s 30 5.65x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.758s (-9.5% 🟢) 4.378s (-8.9% 🟢) 1.620s 21 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.707s 1.007s 0.300s 120 1.00x
🐘 Postgres Nitro 0.803s (+1.6%) 1.017s (+1.0%) 0.215s 118 1.14x
🐘 Postgres Express 0.806s (-1.6%) 1.008s (-0.9%) 0.202s 120 1.14x
💻 Local Express 10.247s (-8.4% 🟢) 10.937s (-8.4% 🟢) 0.690s 11 14.49x
💻 Local Next.js (Turbopack) 10.661s 11.210s 0.550s 11 15.08x
💻 Local Nitro 10.754s (-3.9%) 11.118s (-4.7%) 0.364s 11 15.21x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 6.963s (-6.2% 🟢) 8.709s (-5.8% 🟢) 1.747s 14 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Express

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.137s (-35.8% 🟢) 1.004s (~) 0.009s (-25.6% 🟢) 1.015s (~) 0.878s 10 1.00x
🐘 Postgres Next.js (Turbopack) 0.168s 1.001s 0.001s 1.011s 0.843s 10 1.22x
💻 Local Next.js (Turbopack) 0.171s 1.003s 0.012s 1.018s 0.847s 10 1.25x
🐘 Postgres Express 0.202s (-1.4%) 1.000s (~) 0.001s (-43.8% 🟢) 1.010s (~) 0.807s 10 1.47x
💻 Local Express 0.206s (+3.7%) 1.004s (~) 0.010s (-17.4% 🟢) 1.016s (~) 0.810s 10 1.51x
🐘 Postgres Nitro 0.218s (+6.1% 🔺) 0.998s (~) 0.001s (-6.7% 🟢) 1.011s (~) 0.793s 10 1.59x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.560s (-37.7% 🟢) 3.259s (-20.3% 🟢) 1.697s (+76.6% 🔺) 5.522s (-1.2%) 3.962s 10 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Express

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.593s (-29.3% 🟢) 1.011s (~) 0.009s (-3.2%) 1.022s (-8.4% 🟢) 0.429s 59 1.00x
🐘 Postgres Next.js (Turbopack) 0.603s 1.008s 0.003s 1.022s 0.420s 59 1.02x
🐘 Postgres Express 0.614s (-2.6%) 1.005s (~) 0.004s (+1.8%) 1.022s (~) 0.409s 59 1.03x
🐘 Postgres Nitro 0.616s (-1.3%) 1.005s (~) 0.004s (-6.1% 🟢) 1.022s (~) 0.406s 59 1.04x
💻 Local Next.js (Turbopack) 0.757s 1.012s 0.010s 1.118s 0.361s 54 1.28x
💻 Local Express 0.762s (+0.7%) 1.012s (-1.6%) 0.009s (-2.2%) 1.023s (-1.6%) 0.261s 59 1.29x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.223s (-35.1% 🟢) 6.122s (-23.6% 🟢) 0.198s (-51.6% 🟢) 6.742s (-23.7% 🟢) 2.518s 9 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Express

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.937s 1.177s 0.000s 1.208s 0.271s 51 1.00x
🐘 Postgres Express 0.955s (-0.7%) 1.100s (-13.9% 🟢) 0.000s (+64.3% 🔺) 1.115s (-14.7% 🟢) 0.160s 56 1.02x
🐘 Postgres Nitro 0.978s (+0.9%) 1.299s (+4.1%) 0.000s (+4.3%) 1.318s (+4.8%) 0.341s 46 1.04x
💻 Local Nitro 1.201s (-1.8%) 2.018s (~) 0.000s (+133.3% 🔺) 2.020s (~) 0.819s 30 1.28x
💻 Local Express 1.230s (~) 2.023s (~) 0.000s (-10.0% 🟢) 2.025s (~) 0.795s 30 1.31x
💻 Local Next.js (Turbopack) 1.259s 2.020s 0.000s 2.023s 0.764s 30 1.34x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.564s (-4.7%) 5.149s (+0.9%) 0.000s (-50.0% 🟢) 5.634s (+1.9%) 2.070s 11 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Express

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.740s (-1.8%) 2.103s (-3.4%) 0.000s (+Infinity% 🔺) 2.113s (-3.9%) 0.372s 29 1.00x
🐘 Postgres Nitro 1.811s (+1.1%) 2.178s (+1.7%) 0.000s (-100.0% 🟢) 2.188s (+0.6%) 0.377s 28 1.04x
🐘 Postgres Next.js (Turbopack) 1.930s 2.261s 0.000s 2.269s 0.339s 27 1.11x
💻 Local Express 3.448s (-0.5%) 4.034s (~) 0.001s (+25.0% 🔺) 4.038s (~) 0.590s 15 1.98x
💻 Local Nitro 3.526s (+4.1%) 4.099s (+1.7%) 0.001s (+12.5% 🔺) 4.102s (+1.6%) 0.576s 15 2.03x
💻 Local Next.js (Turbopack) 3.976s 4.104s 0.001s 4.465s 0.489s 14 2.28x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.114s (-10.3% 🟢) 5.555s (-7.8% 🟢) 0.000s (+Infinity% 🔺) 6.030s (-6.6% 🟢) 1.916s 11 1.00x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

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


Some benchmark jobs failed:

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

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 30, 2026

🧪 E2E Test Results

All tests passed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 810 0 63 873
✅ 💻 Local Development 1078 0 86 1164
✅ 📦 Local Production 1078 0 86 1164
✅ 🐘 Local Postgres 1078 0 86 1164
✅ 📋 Other 546 0 36 582
Total 4590 0 357 4947

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 90 0 7
✅ example 90 0 7
✅ express 90 0 7
✅ fastify 90 0 7
✅ hono 90 0 7
✅ nitro 90 0 7
✅ nuxt 90 0 7
✅ sveltekit 90 0 7
✅ vite 90 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 91 0 6
✅ express-stable 91 0 6
✅ fastify-stable 91 0 6
✅ hono-stable 91 0 6
✅ nextjs-turbopack-canary 78 0 19
✅ nextjs-turbopack-stable 97 0 0
✅ nextjs-webpack-canary 78 0 19
✅ nextjs-webpack-stable 97 0 0
✅ nitro-stable 91 0 6
✅ nuxt-stable 91 0 6
✅ sveltekit-stable 91 0 6
✅ vite-stable 91 0 6
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 91 0 6
✅ express-stable 91 0 6
✅ fastify-stable 91 0 6
✅ hono-stable 91 0 6
✅ nextjs-turbopack-canary 78 0 19
✅ nextjs-turbopack-stable 97 0 0
✅ nextjs-webpack-canary 78 0 19
✅ nextjs-webpack-stable 97 0 0
✅ nitro-stable 91 0 6
✅ nuxt-stable 91 0 6
✅ sveltekit-stable 91 0 6
✅ vite-stable 91 0 6
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 91 0 6
✅ express-stable 91 0 6
✅ fastify-stable 91 0 6
✅ hono-stable 91 0 6
✅ nextjs-turbopack-canary 78 0 19
✅ nextjs-turbopack-stable 97 0 0
✅ nextjs-webpack-canary 78 0 19
✅ nextjs-webpack-stable 97 0 0
✅ nitro-stable 91 0 6
✅ nuxt-stable 91 0 6
✅ sveltekit-stable 91 0 6
✅ vite-stable 91 0 6
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 91 0 6
✅ e2e-local-dev-tanstack-start-stable 91 0 6
✅ e2e-local-postgres-nest-stable 91 0 6
✅ e2e-local-postgres-tanstack-start-stable 91 0 6
✅ e2e-local-prod-nest-stable 91 0 6
✅ e2e-local-prod-tanstack-start-stable 91 0 6

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@socket-security
Copy link
Copy Markdown

socket-security Bot commented Apr 30, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​types/​react-dom@​19.2.31001007586100
Addednpm/​@​types/​react@​19.2.31001007988100
Addednpm/​@​tanstack/​react-start@​1.167.529910084100100
Addednpm/​@​vitejs/​plugin-react@​5.2.010010010094100

View full report

TanStack Start runs on Vite + Nitro, so the existing workflow/vite plugin
already supports it - this PR just adds a workbench app to exercise the
combination in the e2e test suite, plus a getting-started doc.

The workbench app mirrors workbench/vite (symlinked workflows + nitro pg
plugin) but uses TanStack Start's file-based router for the test routes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
VaguelySerious and others added 2 commits May 2, 2026 09:59
The Vercel project for workbench-tanstack-start-workflow isn't auto-deploying
for this branch. Local dev/prod/postgres e2e already cover tanstack-start.
Re-enable once the project is connected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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