Skip to content

Conversation

@allenzhou101
Copy link
Contributor

@allenzhou101 allenzhou101 commented Dec 20, 2025

adds a guide explaining how email drip campaigns can be implemented via workflow

@changeset-bot
Copy link

changeset-bot bot commented Dec 20, 2025

⚠️ No Changeset found

Latest commit: 6e16324

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

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

Click here to learn what changesets are, and how to add one.

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

@vercel
Copy link
Contributor

vercel bot commented Dec 20, 2025

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

Project Deployment Review Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Dec 20, 2025 4:21pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Dec 20, 2025 4:21pm
example-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-astro-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-express-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-fastify-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-hono-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-nitro-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-nuxt-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workbench-vite-workflow Ready Ready Preview, Comment Dec 20, 2025 4:21pm
workflow-docs Ready Ready Preview, Comment Dec 20, 2025 4:21pm

@github-actions
Copy link
Contributor

github-actions bot commented Dec 20, 2025

📊 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.040s (+1.3%) 1.017s (~) 0.977s 10 1.00x
🌐 Redis Next.js (Turbopack) 0.041s (-1.4%) 1.017s (~) 0.976s 10 1.02x
🌐 Starter Next.js (Turbopack) 0.041s (+2.0%) 1.015s (~) 0.974s 10 1.02x
💻 Local Express 0.044s (+2.8%) 1.007s (~) 0.963s 10 1.10x
💻 Local Nitro 0.044s (+8.3% 🔺) 1.007s (~) 0.962s 10 1.10x
🌐 MongoDB Next.js (Turbopack) 0.062s (-27.0% 🟢) 1.015s (~) 0.953s 10 1.55x
🌐 Turso Next.js (Turbopack) 0.107s (-5.0%) 1.014s (~) 0.907s 10 2.67x
🐘 Postgres Next.js (Turbopack) 0.187s (+15.6% 🔺) 1.020s (~) 0.833s 10 4.65x
🐘 Postgres Nitro 0.306s (+1.9%) 1.012s (~) 0.706s 10 7.60x
🐘 Postgres Express 0.312s (-11.2% 🟢) 1.013s (~) 0.701s 10 7.77x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.512s (-8.1% 🟢) 1.517s (-7.1% 🟢) 1.005s 10 1.00x
▲ Vercel Next.js (Turbopack) 0.577s (+4.6%) 1.484s (-12.3% 🟢) 0.906s 10 1.13x
▲ Vercel Nitro 0.628s (+16.8% 🔺) 1.714s (+26.6% 🔺) 1.086s 10 1.23x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Starter 🥇 Next.js (Turbopack) 1.087s (~) 2.009s (~) 0.922s 10 1.00x
💻 Local Next.js (Turbopack) 1.096s (~) 2.011s (~) 0.915s 10 1.01x
🌐 Redis Next.js (Turbopack) 1.100s (~) 2.012s (~) 0.912s 10 1.01x
💻 Local Express 1.111s (~) 2.007s (~) 0.896s 10 1.02x
💻 Local Nitro 1.114s (~) 2.006s (~) 0.892s 10 1.02x
🌐 MongoDB Next.js (Turbopack) 1.310s (+2.2%) 2.015s (~) 0.705s 10 1.20x
🌐 Turso Next.js (Turbopack) 1.315s (+1.6%) 2.012s (~) 0.697s 10 1.21x
🐘 Postgres Next.js (Turbopack) 1.857s (-3.1%) 2.016s (~) 0.160s 10 1.71x
🐘 Postgres Express 2.166s (-1.1%) 3.014s (~) 0.848s 10 1.99x
🐘 Postgres Nitro 2.171s (+0.7%) 3.013s (~) 0.842s 10 2.00x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.562s (+3.6%) 3.531s (+3.4%) 0.969s 10 1.00x
▲ Vercel Express 2.575s (+6.1% 🔺) 3.503s (-0.6%) 0.928s 10 1.01x
▲ Vercel Nitro 2.594s (+5.0%) 3.709s (+6.5% 🔺) 1.116s 10 1.01x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Starter 🥇 Next.js (Turbopack) 10.588s (~) 11.011s (~) 0.423s 5 1.00x
💻 Local Next.js (Turbopack) 10.642s (~) 11.016s (~) 0.374s 5 1.01x
🌐 Redis Next.js (Turbopack) 10.655s (~) 11.015s (~) 0.360s 5 1.01x
💻 Local Nitro 10.782s (~) 11.012s (~) 0.229s 5 1.02x
💻 Local Express 10.794s (~) 11.014s (~) 0.220s 5 1.02x
🌐 Turso Next.js (Turbopack) 12.224s (~) 13.024s (~) 0.801s 5 1.15x
🌐 MongoDB Next.js (Turbopack) 12.270s (+1.1%) 13.028s (~) 0.759s 5 1.16x
🐘 Postgres Next.js (Turbopack) 15.246s (~) 16.036s (~) 0.790s 5 1.44x
🐘 Postgres Express 16.622s (-18.3% 🟢) 17.233s (-18.1% 🟢) 0.611s 5 1.57x
🐘 Postgres Nitro 19.615s (-4.4%) 20.227s (-3.8%) 0.612s 5 1.85x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 21.157s (+2.2%) 22.162s (+2.8%) 1.005s 5 1.00x
▲ Vercel Express 21.219s (+3.7%) 22.288s (+5.4% 🔺) 1.070s 5 1.00x
▲ Vercel Next.js (Turbopack) 21.346s (+1.0%) 22.199s (+2.0%) 0.852s 5 1.01x

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

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Starter 🥇 Next.js (Turbopack) 1.344s (~) 2.008s (~) 0.664s 15 1.00x
🌐 Redis Next.js (Turbopack) 1.352s (-1.5%) 2.010s (~) 0.658s 15 1.01x
💻 Local Next.js (Turbopack) 1.384s (~) 2.013s (~) 0.628s 15 1.03x
💻 Local Express 1.406s (~) 2.006s (~) 0.600s 15 1.05x
💻 Local Nitro 1.409s (~) 2.006s (~) 0.597s 15 1.05x
🐘 Postgres Express 1.778s (-28.7% 🟢) 2.077s (-31.0% 🟢) 0.300s 15 1.32x
🐘 Postgres Next.js (Turbopack) 1.911s (+5.9% 🔺) 2.087s (+3.7%) 0.176s 15 1.42x
🌐 MongoDB Next.js (Turbopack) 2.139s (~) 3.017s (~) 0.878s 10 1.59x
🌐 Turso Next.js (Turbopack) 2.217s (~) 3.014s (~) 0.796s 10 1.65x
🐘 Postgres Nitro 2.404s (-1.8%) 3.010s (~) 0.606s 10 1.79x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.703s (-6.1% 🟢) 3.696s (~) 0.993s 9 1.00x
▲ Vercel Express 3.176s (+13.3% 🔺) 4.102s (+10.0% 🔺) 0.925s 8 1.18x
▲ Vercel Next.js (Turbopack) 7.419s (+171.0% 🔺) 8.295s (+122.6% 🔺) 0.876s 7 2.74x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 2.028s (-5.5% 🟢) 2.827s (-7.7% 🟢) 0.799s 11 1.00x
💻 Local Nitro 2.220s (~) 3.179s (~) 0.959s 10 1.09x
💻 Local Express 2.227s (+1.8%) 3.152s (+3.0%) 0.925s 10 1.10x
🌐 Starter Next.js (Turbopack) 2.477s (+0.8%) 3.009s (~) 0.532s 10 1.22x
🌐 Redis Next.js (Turbopack) 2.500s (-0.6%) 3.013s (~) 0.513s 10 1.23x
🐘 Postgres Next.js (Turbopack) 2.668s (+1.8%) 3.027s (~) 0.358s 10 1.32x
🐘 Postgres Express 2.747s (-5.5% 🟢) 3.232s (+3.8%) 0.486s 10 1.35x
🐘 Postgres Nitro 2.949s (+2.0%) 3.344s (+7.5% 🔺) 0.395s 9 1.45x
🌐 Turso Next.js (Turbopack) 4.686s (-1.2%) 5.185s (~) 0.499s 6 2.31x
🌐 MongoDB Next.js (Turbopack) 4.716s (~) 5.180s (~) 0.464s 6 2.33x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.317s (-1.2%) 4.001s (~) 0.685s 8 1.00x
▲ Vercel Express 3.474s (+11.1% 🔺) 4.224s (+11.5% 🔺) 0.750s 8 1.05x
▲ Vercel Nitro 3.476s (-13.2% 🟢) 4.141s (-9.7% 🟢) 0.666s 8 1.05x

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

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.347s (-1.5%) 2.011s (~) 0.664s 15 1.00x
💻 Local Next.js (Turbopack) 1.388s (-0.9%) 2.012s (~) 0.625s 15 1.03x
🌐 Starter Next.js (Turbopack) 1.389s (+3.7%) 2.008s (~) 0.619s 15 1.03x
💻 Local Nitro 1.415s (+0.8%) 2.006s (~) 0.591s 15 1.05x
💻 Local Express 1.417s (~) 2.006s (~) 0.589s 15 1.05x
🐘 Postgres Nitro 1.706s (-17.4% 🟢) 2.009s (-25.2% 🟢) 0.302s 15 1.27x
🐘 Postgres Express 1.759s (+8.0% 🔺) 2.010s (~) 0.251s 15 1.31x
🐘 Postgres Next.js (Turbopack) 1.866s (+11.3% 🔺) 2.012s (~) 0.146s 15 1.39x
🌐 MongoDB Next.js (Turbopack) 2.125s (~) 3.013s (~) 0.887s 10 1.58x
🌐 Turso Next.js (Turbopack) 2.234s (~) 3.014s (~) 0.780s 10 1.66x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.678s (+1.1%) 3.723s (+3.9%) 1.045s 9 1.00x
▲ Vercel Express 2.706s (+1.7%) 3.568s (-2.2%) 0.862s 9 1.01x
▲ Vercel Next.js (Turbopack) 2.806s (-3.9%) 3.639s (-5.5% 🟢) 0.832s 9 1.05x

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

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 2.136s (-3.2%) 2.983s (-3.0%) 0.847s 11 1.00x
💻 Local Nitro 2.243s (~) 3.181s (-0.6%) 0.938s 10 1.05x
💻 Local Express 2.287s (-0.8%) 3.227s (+0.6%) 0.940s 10 1.07x
🌐 Starter Next.js (Turbopack) 2.456s (~) 3.009s (~) 0.553s 10 1.15x
🌐 Redis Next.js (Turbopack) 2.475s (-1.1%) 3.012s (~) 0.537s 10 1.16x
🐘 Postgres Express 2.485s (-11.6% 🟢) 3.018s (~) 0.533s 10 1.16x
🐘 Postgres Next.js (Turbopack) 2.589s (-2.9%) 3.018s (~) 0.429s 10 1.21x
🐘 Postgres Nitro 2.599s (-12.9% 🟢) 3.015s (-9.1% 🟢) 0.415s 10 1.22x
🌐 MongoDB Next.js (Turbopack) 4.650s (-0.8%) 5.180s (~) 0.531s 6 2.18x
🌐 Turso Next.js (Turbopack) 4.702s (~) 5.184s (~) 0.482s 6 2.20x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.235s (+8.9% 🔺) 3.867s (+4.6%) 0.632s 8 1.00x
▲ Vercel Nitro 3.331s (+13.6% 🔺) 4.121s (+17.9% 🔺) 0.790s 8 1.03x
▲ Vercel Express 4.364s (+46.0% 🔺) 5.306s (+46.3% 🔺) 0.943s 6 1.35x

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

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🌐 Starter 🥇 Next.js (Turbopack) 0.129s (+0.6%) 1.006s (~) 0.000s (NaN%) 1.011s (~) 0.883s 10 1.00x
💻 Local Next.js (Turbopack) 0.136s (-2.9%) 1.003s (~) 0.016s (~) 1.027s (~) 0.891s 10 1.06x
🌐 Redis Next.js (Turbopack) 0.142s (-5.5% 🟢) 1.005s (~) 0.000s (NaN%) 1.013s (~) 0.871s 10 1.10x
💻 Local Nitro 0.175s (+1.8%) 0.992s (~) 0.015s (-1.4%) 1.020s (~) 0.845s 10 1.36x
💻 Local Express 0.178s (+1.8%) 0.992s (~) 0.015s (-4.6%) 1.022s (~) 0.844s 10 1.39x
🌐 Turso Next.js (Turbopack) 0.461s (-2.2%) 0.992s (+1.4%) 0.000s (~) 1.014s (~) 0.554s 10 3.58x
🌐 MongoDB Next.js (Turbopack) 0.511s (+2.1%) 0.939s (-0.7%) 0.000s (-100.0% 🟢) 1.013s (~) 0.502s 10 3.98x
🐘 Postgres Next.js (Turbopack) 1.150s (-1.5%) 1.672s (-5.1% 🟢) 0.000s (NaN%) 1.819s (-5.3% 🟢) 0.669s 10 8.94x
🐘 Postgres Nitro 1.355s (-42.2% 🟢) 1.684s (-37.6% 🟢) 0.000s (-50.0% 🟢) 2.011s (-33.3% 🟢) 0.656s 10 10.54x
🐘 Postgres Express 1.373s (-42.6% 🟢) 1.724s (-34.9% 🟢) 0.000s (-100.0% 🟢) 2.012s (-33.2% 🟢) 0.639s 10 10.68x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.497s (+4.7%) 3.202s (+13.2% 🔺) 0.358s (-30.5% 🟢) 3.963s (+5.8% 🔺) 1.466s 10 1.00x
▲ Vercel Express 2.506s (+6.3% 🔺) 3.150s (+19.5% 🔺) 0.330s (-48.8% 🟢) 3.899s (+5.9% 🔺) 1.394s 10 1.00x
▲ Vercel Nitro 2.617s (+7.6% 🔺) 3.235s (+14.9% 🔺) 0.368s (-61.3% 🟢) 4.081s (-1.2%) 1.463s 10 1.05x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Next.js (Turbopack) 8/8
🐘 Postgres Next.js (Turbopack) 5/8
▲ Vercel Next.js (Turbopack) 4/8
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 💻 Local 8/8
Next.js (Turbopack) 🌐 Starter 4/8
Nitro 💻 Local 8/8
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
  • 🌐 Starter: Community world (local development)
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run

@github-actions
Copy link
Contributor

github-actions bot commented Dec 20, 2025

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 286 0 11 297
✅ 💻 Local Development 262 0 8 270
✅ 📦 Local Production 262 0 8 270
✅ 🐘 Local Postgres 262 0 8 270
✅ 🪟 Windows 27 0 0 27
❌ 🌍 Community Worlds 109 11 0 120
Total 1208 11 35 1254

❌ Failed Tests

🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 26 0 1
✅ example 26 0 1
✅ express 26 0 1
✅ fastify 26 0 1
✅ hono 26 0 1
✅ nextjs-turbopack 26 0 1
✅ nextjs-webpack 26 0 1
✅ nitro 26 0 1
✅ nuxt 26 0 1
✅ sveltekit 26 0 1
✅ vite 26 0 1
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 26 0 1
✅ express-stable 26 0 1
✅ fastify-stable 26 0 1
✅ hono-stable 26 0 1
✅ nextjs-turbopack-stable 27 0 0
✅ nextjs-webpack-stable 27 0 0
✅ nitro-stable 26 0 1
✅ nuxt-stable 26 0 1
✅ sveltekit-stable 26 0 1
✅ vite-stable 26 0 1
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 26 0 1
✅ express-stable 26 0 1
✅ fastify-stable 26 0 1
✅ hono-stable 26 0 1
✅ nextjs-turbopack-stable 27 0 0
✅ nextjs-webpack-stable 27 0 0
✅ nitro-stable 26 0 1
✅ nuxt-stable 26 0 1
✅ sveltekit-stable 26 0 1
✅ vite-stable 26 0 1
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 26 0 1
✅ express-stable 26 0 1
✅ fastify-stable 26 0 1
✅ hono-stable 26 0 1
✅ nextjs-turbopack-stable 27 0 0
✅ nextjs-webpack-stable 27 0 0
✅ nitro-stable 26 0 1
✅ nuxt-stable 26 0 1
✅ sveltekit-stable 26 0 1
✅ vite-stable 26 0 1
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 27 0 0
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 3 0 0
❌ mongodb 26 1 0
✅ redis-dev 3 0 0
❌ redis 26 1 0
✅ starter-dev 3 0 0
❌ starter 19 8 0
✅ turso-dev 3 0 0
❌ turso 26 1 0

📋 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.

2 participants