Skip to content

[workbench] Add TanStack Start workbench#1875

Merged
VaguelySerious merged 6 commits intomainfrom
peter/tanstack-start
May 4, 2026
Merged

[workbench] Add TanStack Start workbench#1875
VaguelySerious merged 6 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: bdfbb81

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

This PR includes changesets to release 0 packages

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

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 Ready Ready Preview, Comment May 4, 2026 0:19am
example-nextjs-workflow-webpack Ready Ready Preview, Comment May 4, 2026 0:19am
example-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-astro-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-express-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-fastify-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-hono-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-nitro-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-nuxt-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-sveltekit-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workbench-vite-workflow Ready Ready Preview, Comment May 4, 2026 0:19am
workflow-docs Ready Ready Preview, Comment, Open in v0 May 4, 2026 0:19am
workflow-swc-playground Ready Ready Preview, Comment May 4, 2026 0:19am
workflow-web Ready Ready Preview, Comment May 4, 2026 0:19am

@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 🥇 Express 0.034s (-22.6% 🟢) 1.004s (~) 0.970s 10 1.00x
💻 Local Nitro 0.041s (-4.9%) 1.006s (~) 0.965s 10 1.20x
🐘 Postgres Express 0.045s (-21.7% 🟢) 1.008s (~) 0.963s 10 1.32x
💻 Local Next.js (Turbopack) 0.046s 1.005s 0.959s 10 1.35x
🐘 Postgres Next.js (Turbopack) 0.056s 1.011s 0.955s 10 1.63x
🐘 Postgres Nitro 0.058s (-39.0% 🟢) 1.010s (-3.2%) 0.952s 10 1.69x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.210s (+381.2% 🔺) 4.397s (+88.5% 🔺) 3.187s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.102s (-2.0%) 2.005s (~) 0.902s 10 1.00x
🐘 Postgres Express 1.110s (-3.1%) 2.008s (~) 0.897s 10 1.01x
💻 Local Next.js (Turbopack) 1.119s 2.006s 0.887s 10 1.01x
💻 Local Nitro 1.136s (~) 2.006s (~) 0.870s 10 1.03x
🐘 Postgres Next.js (Turbopack) 1.146s 2.008s 0.862s 10 1.04x
🐘 Postgres Nitro 1.148s (+0.7%) 2.009s (~) 0.861s 10 1.04x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.969s (+45.9% 🔺) 6.427s (+67.8% 🔺) 3.458s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 10.647s (-2.9%) 11.017s (~) 0.370s 3 1.00x
💻 Local Express 10.748s (-1.6%) 11.020s (~) 0.272s 3 1.01x
💻 Local Next.js (Turbopack) 10.841s 11.024s 0.183s 3 1.02x
🐘 Postgres Next.js (Turbopack) 10.906s 11.350s 0.444s 3 1.02x
💻 Local Nitro 10.938s (~) 11.023s (~) 0.085s 3 1.03x
🐘 Postgres Nitro 10.973s (+0.9%) 11.356s (+3.0%) 0.383s 3 1.03x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 17.666s (+2.0%) 23.484s (+21.1% 🔺) 5.818s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 13.975s (-4.2%) 14.222s (-5.3% 🟢) 0.247s 5 1.00x
🐘 Postgres Next.js (Turbopack) 14.426s 15.019s 0.592s 4 1.03x
💻 Local Express 14.474s (-3.3%) 15.027s (~) 0.554s 4 1.04x
🐘 Postgres Nitro 14.540s (~) 15.022s (~) 0.482s 4 1.04x
💻 Local Next.js (Turbopack) 14.700s 15.031s 0.332s 4 1.05x
💻 Local Nitro 14.987s (~) 15.030s (-6.2% 🟢) 0.043s 4 1.07x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 37.830s (-28.0% 🟢) 39.739s (-27.2% 🟢) 1.910s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 12.857s (-8.2% 🟢) 13.021s (-10.8% 🟢) 0.164s 7 1.00x
🐘 Postgres Next.js (Turbopack) 13.751s 14.018s 0.267s 7 1.07x
🐘 Postgres Nitro 14.075s (+0.8%) 14.735s (+3.0%) 0.660s 7 1.09x
💻 Local Express 15.076s (-9.2% 🟢) 15.693s (-7.9% 🟢) 0.617s 6 1.17x
💻 Local Next.js (Turbopack) 16.151s 17.031s 0.880s 6 1.26x
💻 Local Nitro 16.415s (-2.2%) 17.031s (~) 0.617s 6 1.28x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 60.553s (-84.6% 🟢) 63.398s (-84.0% 🟢) 2.845s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.188s (-5.7% 🟢) 2.009s (~) 0.821s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.239s 2.009s 0.770s 15 1.04x
🐘 Postgres Nitro 1.258s (-1.3%) 2.010s (~) 0.752s 15 1.06x
💻 Local Express 1.393s (-6.4% 🟢) 2.005s (~) 0.612s 15 1.17x
💻 Local Nitro 1.495s (-8.4% 🟢) 2.006s (-3.3%) 0.511s 15 1.26x
💻 Local Next.js (Turbopack) 1.555s 2.007s 0.451s 15 1.31x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.008s (-40.9% 🟢) 3.747s (-24.0% 🟢) 1.739s 9 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.262s (-4.2%) 3.009s (~) 0.747s 10 1.00x
💻 Local Express 2.357s (-20.2% 🟢) 3.006s (-12.9% 🟢) 0.649s 10 1.04x
🐘 Postgres Next.js (Turbopack) 2.388s 3.010s 0.622s 10 1.06x
🐘 Postgres Nitro 2.419s (+2.9%) 3.009s (~) 0.591s 10 1.07x
💻 Local Nitro 2.851s (-9.3% 🟢) 3.110s (-20.0% 🟢) 0.258s 10 1.26x
💻 Local Next.js (Turbopack) 2.944s 3.676s 0.732s 9 1.30x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.837s (-46.0% 🟢) 8.128s (-8.7% 🟢) 4.290s 4 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.377s (-3.1%) 4.010s (~) 0.633s 8 1.00x
🐘 Postgres Nitro 3.476s (~) 4.011s (~) 0.534s 8 1.03x
🐘 Postgres Next.js (Turbopack) 3.643s 4.011s 0.368s 8 1.08x
💻 Local Express 6.116s (-26.7% 🟢) 6.817s (-24.5% 🟢) 0.701s 5 1.81x
💻 Local Nitro 7.329s (-12.2% 🟢) 8.019s (-11.1% 🟢) 0.690s 4 2.17x
💻 Local Next.js (Turbopack) 8.502s 9.021s 0.519s 4 2.52x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 4.764s (-46.6% 🟢) 10.121s (-7.7% 🟢) 5.358s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.199s (-4.6%) 2.008s (~) 0.809s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.227s 2.008s 0.781s 15 1.02x
🐘 Postgres Nitro 1.262s (~) 2.008s (~) 0.746s 15 1.05x
💻 Local Express 1.417s (-25.2% 🟢) 2.005s (-15.2% 🟢) 0.588s 15 1.18x
💻 Local Nitro 1.499s (-19.6% 🟢) 2.006s (-14.3% 🟢) 0.507s 15 1.25x
💻 Local Next.js (Turbopack) 1.512s 2.006s 0.494s 15 1.26x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.028s (-30.8% 🟢) 8.044s (+73.3% 🔺) 6.016s 5 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.278s (-2.7%) 3.009s (~) 0.731s 10 1.00x
🐘 Postgres Nitro 2.333s (~) 3.009s (~) 0.676s 10 1.02x
🐘 Postgres Next.js (Turbopack) 2.451s 3.008s 0.557s 10 1.08x
💻 Local Express 2.492s (-20.5% 🟢) 3.007s (-20.1% 🟢) 0.515s 10 1.09x
💻 Local Nitro 2.898s (-5.4% 🟢) 3.342s (-14.0% 🟢) 0.444s 9 1.27x
💻 Local Next.js (Turbopack) 2.995s 3.565s 0.570s 9 1.31x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.508s (-20.2% 🟢) 5.548s (+22.7% 🔺) 3.039s 6 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.363s (-3.9%) 4.010s (~) 0.647s 8 1.00x
🐘 Postgres Nitro 3.453s (-0.8%) 4.009s (~) 0.556s 8 1.03x
🐘 Postgres Next.js (Turbopack) 3.641s 4.010s 0.369s 8 1.08x
💻 Local Express 6.670s (-24.2% 🟢) 7.215s (-22.2% 🟢) 0.546s 5 1.98x
💻 Local Nitro 7.924s (-13.3% 🟢) 8.272s (-17.5% 🟢) 0.348s 4 2.36x
💻 Local Next.js (Turbopack) 8.246s 8.768s 0.521s 4 2.45x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 4.759s (-29.6% 🟢) 6.208s (-27.3% 🟢) 1.449s 5 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.597s (-28.8% 🟢) 1.006s (-1.7%) 0.409s 60 1.00x
🐘 Postgres Next.js (Turbopack) 0.749s 1.006s 0.257s 60 1.25x
💻 Local Express 0.812s (-17.5% 🟢) 1.004s (-6.7% 🟢) 0.192s 60 1.36x
🐘 Postgres Nitro 0.826s (+0.6%) 1.023s (+1.7%) 0.197s 59 1.38x
💻 Local Next.js (Turbopack) 0.858s 1.022s 0.164s 59 1.44x
💻 Local Nitro 1.014s (+3.4%) 1.627s (+48.8% 🔺) 0.613s 37 1.70x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 11.062s (-23.7% 🟢) 13.187s (-18.0% 🟢) 2.125s 5 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.432s (-27.6% 🟢) 2.007s (-11.1% 🟢) 0.575s 45 1.00x
🐘 Postgres Next.js (Turbopack) 1.856s 2.029s 0.173s 45 1.30x
🐘 Postgres Nitro 1.930s (~) 2.174s (+3.5%) 0.244s 42 1.35x
💻 Local Express 2.467s (-18.2% 🟢) 3.007s (-16.1% 🟢) 0.540s 30 1.72x
💻 Local Next.js (Turbopack) 2.747s 3.042s 0.295s 30 1.92x
💻 Local Nitro 3.019s (-0.5%) 3.649s (-2.9%) 0.630s 25 2.11x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 30.085s (-39.6% 🟢) 31.809s (-38.5% 🟢) 1.723s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.962s (-25.8% 🟢) 3.193s (-26.9% 🟢) 0.231s 38 1.00x
🐘 Postgres Next.js (Turbopack) 3.779s 4.008s 0.230s 30 1.28x
🐘 Postgres Nitro 3.998s (-2.6%) 4.403s (-4.4%) 0.405s 28 1.35x
💻 Local Express 7.440s (-19.2% 🟢) 8.014s (-20.0% 🟢) 0.574s 15 2.51x
💻 Local Next.js (Turbopack) 8.807s 9.089s 0.282s 14 2.97x
💻 Local Nitro 8.931s (-3.9%) 9.325s (-6.9% 🟢) 0.394s 13 3.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 81.626s (-23.8% 🟢) 83.612s (-23.2% 🟢) 1.986s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.225s (-20.4% 🟢) 1.006s (~) 0.782s 60 1.00x
🐘 Postgres Next.js (Turbopack) 0.255s 1.007s 0.752s 60 1.13x
🐘 Postgres Nitro 0.279s (-1.6%) 1.007s (~) 0.728s 60 1.24x
💻 Local Express 0.475s (-15.3% 🟢) 1.004s (~) 0.529s 60 2.11x
💻 Local Next.js (Turbopack) 0.550s 1.005s 0.455s 60 2.45x
💻 Local Nitro 0.578s (-4.5%) 1.004s (-1.7%) 0.427s 60 2.57x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.680s (-16.9% 🟢) 3.653s (-3.7%) 1.972s 17 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.360s (-29.4% 🟢) 1.005s (~) 0.645s 90 1.00x
🐘 Postgres Next.js (Turbopack) 0.474s 1.006s 0.532s 90 1.32x
🐘 Postgres Nitro 0.487s (-1.9%) 1.007s (~) 0.520s 90 1.35x
💻 Local Express 2.023s (-19.5% 🟢) 2.632s (-12.5% 🟢) 0.608s 35 5.62x
💻 Local Nitro 2.358s (-7.1% 🟢) 3.008s (~) 0.650s 30 6.55x
💻 Local Next.js (Turbopack) 2.655s 3.009s 0.354s 30 7.37x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.477s (-1.7%) 5.331s (+2.6%) 1.854s 17 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: 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.569s (-30.5% 🟢) 1.006s (-1.1%) 0.437s 120 1.00x
🐘 Postgres Next.js (Turbopack) 0.755s 1.006s 0.251s 120 1.33x
🐘 Postgres Nitro 0.812s (+2.7%) 1.008s (~) 0.196s 120 1.43x
💻 Local Express 8.696s (-22.3% 🟢) 9.247s (-22.6% 🟢) 0.552s 14 15.29x
💻 Local Nitro 10.377s (-7.3% 🟢) 10.936s (-6.2% 🟢) 0.559s 11 18.25x
💻 Local Next.js (Turbopack) 10.892s 11.485s 0.592s 11 19.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 6.197s (-40.0% 🟢) 8.275s (-32.7% 🟢) 2.078s 15 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.151s (-26.3% 🟢) 1.000s (~) 0.001s (-31.3% 🟢) 1.010s (~) 0.859s 10 1.00x
💻 Local Express 0.166s (-16.7% 🟢) 1.003s (~) 0.008s (-32.2% 🟢) 1.013s (-0.5%) 0.847s 10 1.10x
💻 Local Next.js (Turbopack) 0.178s 1.004s 0.012s 1.019s 0.841s 10 1.18x
🐘 Postgres Next.js (Turbopack) 0.186s 1.001s 0.001s 1.009s 0.823s 10 1.23x
💻 Local Nitro 0.208s (-2.8%) 1.004s (~) 0.010s (-19.2% 🟢) 1.016s (~) 0.808s 10 1.37x
🐘 Postgres Nitro 0.216s (+5.3% 🔺) 1.000s (~) 0.001s (-26.7% 🟢) 1.009s (~) 0.793s 10 1.43x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.639s (-76.1% 🟢) 2.913s (-66.3% 🟢) 2.385s (+277.4% 🔺) 5.713s (-41.6% 🟢) 4.074s 10 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: 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 0.496s (-21.3% 🟢) 1.005s (~) 0.003s (-12.8% 🟢) 1.019s (~) 0.523s 59 1.00x
🐘 Postgres Next.js (Turbopack) 0.599s 1.008s 0.003s 1.019s 0.420s 59 1.21x
🐘 Postgres Nitro 0.631s (+1.0%) 1.003s (~) 0.004s (+3.7%) 1.023s (~) 0.392s 59 1.27x
💻 Local Express 0.734s (-3.1%) 1.009s (-1.9%) 0.009s (-2.0%) 1.113s (+7.0% 🔺) 0.379s 54 1.48x
💻 Local Nitro 0.756s (-9.8% 🟢) 1.012s (~) 0.010s (+3.5%) 1.024s (-8.2% 🟢) 0.267s 59 1.52x
💻 Local Next.js (Turbopack) 0.760s 1.011s 0.011s 1.117s 0.357s 54 1.53x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 4.605s (-72.8% 🟢) 5.710s (-68.7% 🟢) 0.405s (+91.6% 🔺) 7.131s (-62.3% 🟢) 2.526s 9 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: 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.922s (-4.0%) 1.108s (-13.3% 🟢) 0.000s (-58.2% 🟢) 1.116s (-14.6% 🟢) 0.194s 55 1.00x
🐘 Postgres Next.js (Turbopack) 0.953s 1.205s 0.000s 1.237s 0.284s 49 1.03x
🐘 Postgres Nitro 0.965s (~) 1.152s (-7.7% 🟢) 0.000s (+41.2% 🔺) 1.178s (-6.4% 🟢) 0.213s 51 1.05x
💻 Local Express 1.046s (-14.6% 🟢) 1.780s (-11.9% 🟢) 0.000s (+14.7% 🔺) 1.782s (-11.9% 🟢) 0.736s 34 1.13x
💻 Local Nitro 1.224s (~) 2.022s (~) 0.000s (+233.3% 🔺) 2.024s (~) 0.800s 30 1.33x
💻 Local Next.js (Turbopack) 1.274s 2.019s 0.000s 2.022s 0.749s 30 1.38x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.372s (-66.9% 🟢) 4.694s (-59.3% 🟢) 0.000s (NaN%) 5.167s (-57.1% 🟢) 1.795s 12 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: 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.652s (-6.8% 🟢) 2.106s (-3.3%) 0.000s (+Infinity% 🔺) 2.115s (-3.8%) 0.463s 29 1.00x
🐘 Postgres Nitro 1.793s (~) 2.178s (+1.7%) 0.000s (+200.0% 🔺) 2.189s (+0.7%) 0.396s 28 1.09x
🐘 Postgres Next.js (Turbopack) 1.851s 2.182s 0.000s 2.191s 0.340s 28 1.12x
💻 Local Express 2.949s (-15.0% 🟢) 3.294s (-18.3% 🟢) 0.000s (-80.3% 🟢) 3.296s (-18.4% 🟢) 0.347s 19 1.79x
💻 Local Nitro 3.503s (+3.4%) 3.973s (-1.5%) 0.001s (+87.5% 🔺) 3.976s (-1.5%) 0.473s 16 2.12x
💻 Local Next.js (Turbopack) 3.645s 4.098s 0.000s 4.103s 0.457s 15 2.21x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 4.283s (-23.8% 🟢) 5.674s (-18.7% 🟢) 0.000s (-100.0% 🟢) 6.234s (-17.3% 🟢) 1.952s 11 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 19/21
Next.js (Turbopack) 🐘 Postgres 17/21
Nitro 🐘 Postgres 17/21
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run


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 1011 0 67 1078
✅ 💻 Local Development 1090 0 86 1176
✅ 📦 Local Production 1090 0 86 1176
✅ 🐘 Local Postgres 1090 0 86 1176
✅ 🪟 Windows 98 0 0 98
✅ 📋 Other 552 0 36 588
Total 4931 0 361 5292

Details by Category

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

📋 View full workflow run

@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.010010010093100

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>
Signed-off-by: Peter Wielander <mittgfu@gmail.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.

2 participants