Skip to content

Conversation

@VaguelySerious
Copy link
Member

@VaguelySerious VaguelySerious commented Dec 29, 2025

This superseeds #657, which tried to use an npm plugin for this job, but was ugly and didn't work with pre-release versions, so I had claude implement it instead.

Essentially:

  • First time you run the CLI it'll do a sync check to npm (failures being ignored) for new version, caching this for 3 days
  • Update note will be displayed in message header on every invocation in interactive mode, where we would usually just display the version
    • This might not be good enough for notifying users consistently. If this code seems good, I can extract it into utils, and also import it in the builder code to print during build in a shorter format.
  • Changing the package version busts the cache, so upgrading will reset the cache
  • i.e. also users who upgrade to latest won't see the "new version is available" note until at the earliest 3 day after that
  • The message may be off if someone installs @workflow/cli globally separately from workflow, since p i workflow@latest wouldn't resolve the update warning, but this seems like a minor concern.
image

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
@vercel
Copy link
Contributor

vercel bot commented Dec 29, 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 Jan 2, 2026 3:43pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jan 2, 2026 3:43pm
example-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-astro-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-express-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-fastify-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-hono-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-nitro-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-nuxt-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workbench-vite-workflow Ready Ready Preview, Comment Jan 2, 2026 3:43pm
workflow-docs Ready Ready Preview, Comment Jan 2, 2026 3:43pm

@changeset-bot
Copy link

changeset-bot bot commented Dec 29, 2025

🦋 Changeset detected

Latest commit: 3d0d66e

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

This PR includes changesets to release 4 packages
Name Type
@workflow/cli Patch
workflow Patch
@workflow/world-testing 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

@github-actions
Copy link
Contributor

github-actions bot commented Dec 29, 2025

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 308 0 11 319
✅ 💻 Local Development 282 0 8 290
✅ 📦 Local Production 282 0 8 290
✅ 🐘 Local Postgres 282 0 8 290
✅ 🪟 Windows 29 0 0 29
❌ 🌍 Community Worlds 117 11 0 128
Total 1300 11 35 1346

❌ Failed Tests

🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

starter (9 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
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly

turso (1 failed):

  • webhookWorkflow

Details by Category

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

📋 View full workflow run

@github-actions
Copy link
Contributor

github-actions bot commented Dec 29, 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.039s (+5.1% 🔺) 1.014s (~) 0.975s 10 1.00x
🌐 Starter Next.js (Turbopack) 0.040s (+8.6% 🔺) 1.015s (~) 0.974s 10 1.03x
🌐 Redis Next.js (Turbopack) 0.041s (+1.2%) 1.017s (~) 0.975s 10 1.05x
💻 Local Express 0.043s (-1.4%) 1.007s (~) 0.964s 10 1.09x
💻 Local Nitro 0.044s (~) 1.006s (~) 0.962s 10 1.14x
🌐 Turso Next.js (Turbopack) 0.102s (~) 1.015s (~) 0.913s 10 2.60x
🌐 MongoDB Next.js (Turbopack) 0.108s (+7.5% 🔺) 1.014s (~) 0.906s 10 2.77x
🐘 Postgres Express 0.208s (-44.5% 🟢) 1.014s (~) 0.806s 10 5.30x
🐘 Postgres Next.js (Turbopack) 0.215s (-10.8% 🟢) 1.019s (~) 0.804s 10 5.48x
🐘 Postgres Nitro 0.406s (+29.8% 🔺) 1.012s (~) 0.606s 10 10.35x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 0.535s (-11.0% 🟢) 2.450s (+53.0% 🔺) 1.914s 10 1.00x
▲ Vercel Express 0.635s (-16.3% 🟢) 1.869s (+1.6%) 1.234s 10 1.19x
▲ Vercel Nitro 0.725s (-35.1% 🟢) 1.719s (-14.0% 🟢) 0.994s 10 1.35x

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

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Starter 🥇 Next.js (Turbopack) 1.090s (~) 2.010s (~) 0.920s 10 1.00x
💻 Local Next.js (Turbopack) 1.091s (-0.5%) 2.011s (~) 0.920s 10 1.00x
🌐 Redis Next.js (Turbopack) 1.107s (~) 2.012s (~) 0.905s 10 1.02x
💻 Local Express 1.110s (~) 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.012s (~) 0.702s 10 1.20x
🌐 Turso Next.js (Turbopack) 1.310s (+0.7%) 2.013s (~) 0.703s 10 1.20x
🐘 Postgres Next.js (Turbopack) 1.639s (-10.8% 🟢) 2.015s (~) 0.376s 10 1.50x
🐘 Postgres Express 2.260s (+1.3%) 3.014s (~) 0.754s 10 2.07x
🐘 Postgres Nitro 2.285s (+7.7% 🔺) 3.012s (~) 0.727s 10 2.10x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.680s (-3.0%) 3.575s (-2.3%) 0.896s 10 1.00x
▲ Vercel Express 3.185s (~) 4.180s (+0.9%) 0.995s 10 1.19x
▲ Vercel Next.js (Turbopack) 3.223s (+17.8% 🔺) 4.131s (+12.9% 🔺) 0.908s 10 1.20x

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

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Starter 🥇 Next.js (Turbopack) 10.627s (~) 11.013s (~) 0.385s 5 1.00x
💻 Local Next.js (Turbopack) 10.667s (~) 11.019s (~) 0.352s 5 1.00x
🌐 Redis Next.js (Turbopack) 10.687s (~) 11.019s (~) 0.332s 5 1.01x
💻 Local Express 10.771s (~) 11.012s (~) 0.241s 5 1.01x
💻 Local Nitro 10.801s (~) 11.012s (~) 0.212s 5 1.02x
🌐 MongoDB Next.js (Turbopack) 12.178s (~) 13.021s (~) 0.842s 5 1.15x
🌐 Turso Next.js (Turbopack) 12.196s (~) 13.038s (~) 0.842s 5 1.15x
🐘 Postgres Next.js (Turbopack) 14.119s (-5.6% 🟢) 14.429s (-7.7% 🟢) 0.310s 5 1.33x
🐘 Postgres Nitro 20.219s (-1.0%) 21.040s (~) 0.820s 5 1.90x
🐘 Postgres Express 20.436s (+0.8%) 21.032s (~) 0.596s 5 1.92x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 22.176s (-4.8%) 23.160s (-2.6%) 0.984s 5 1.00x
▲ Vercel Express 22.764s (-1.2%) 23.376s (-0.9%) 0.612s 5 1.03x
▲ Vercel Next.js (Turbopack) 22.987s (~) 23.791s (~) 0.804s 5 1.04x

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

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.363s (+0.9%) 2.010s (~) 0.647s 15 1.00x
🌐 Starter Next.js (Turbopack) 1.364s (+1.8%) 2.008s (~) 0.644s 15 1.00x
💻 Local Next.js (Turbopack) 1.388s (-0.6%) 2.012s (~) 0.624s 15 1.02x
💻 Local Express 1.409s (+1.5%) 2.006s (~) 0.597s 15 1.03x
💻 Local Nitro 1.416s (~) 2.005s (~) 0.589s 15 1.04x
🐘 Postgres Next.js (Turbopack) 1.782s (+1.0%) 2.016s (~) 0.234s 15 1.31x
🌐 MongoDB Next.js (Turbopack) 2.127s (-1.3%) 3.012s (~) 0.886s 10 1.56x
🌐 Turso Next.js (Turbopack) 2.235s (+1.1%) 3.016s (~) 0.781s 10 1.64x
🐘 Postgres Express 2.270s (+1.1%) 3.013s (+6.5% 🔺) 0.743s 10 1.67x
🐘 Postgres Nitro 2.494s (+5.9% 🔺) 3.012s (~) 0.519s 10 1.83x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.899s (-11.3% 🟢) 3.762s (-8.6% 🟢) 0.863s 8 1.00x
▲ Vercel Next.js (Turbopack) 3.126s (-2.8%) 3.818s (-5.4% 🟢) 0.692s 8 1.08x
▲ Vercel Nitro 3.531s (+10.3% 🔺) 4.461s (+16.6% 🔺) 0.930s 7 1.22x

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

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 2.154s (~) 3.125s (~) 0.971s 10 1.00x
💻 Local Next.js (Turbopack) 2.207s (+6.6% 🔺) 3.153s (+11.2% 🔺) 0.946s 10 1.02x
💻 Local Nitro 2.257s (+3.3%) 3.195s (+2.3%) 0.938s 10 1.05x
🌐 Starter Next.js (Turbopack) 2.481s (+1.8%) 3.010s (~) 0.529s 10 1.15x
🌐 Redis Next.js (Turbopack) 2.481s (~) 3.013s (~) 0.532s 10 1.15x
🐘 Postgres Next.js (Turbopack) 2.487s (-1.7%) 3.017s (~) 0.530s 10 1.15x
🐘 Postgres Nitro 2.903s (-2.7%) 3.012s (-10.2% 🟢) 0.108s 10 1.35x
🐘 Postgres Express 3.029s (+23.6% 🔺) 3.583s (+19.0% 🔺) 0.554s 9 1.41x
🌐 MongoDB Next.js (Turbopack) 4.617s (~) 5.181s (~) 0.564s 6 2.14x
🌐 Turso Next.js (Turbopack) 4.768s (+2.2%) 5.184s (~) 0.416s 6 2.21x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.497s (-2.5%) 3.933s (-19.4% 🟢) 0.435s 8 1.00x
▲ Vercel Express 3.764s (-7.1% 🟢) 4.574s (-2.9%) 0.811s 7 1.08x
▲ Vercel Next.js (Turbopack) 3.954s (+12.1% 🔺) 4.614s (+4.4%) 0.660s 7 1.13x

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

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Starter 🥇 Next.js (Turbopack) 1.380s (+2.1%) 2.008s (~) 0.628s 15 1.00x
🌐 Redis Next.js (Turbopack) 1.381s (+1.4%) 2.010s (~) 0.629s 15 1.00x
💻 Local Next.js (Turbopack) 1.405s (+0.8%) 2.013s (~) 0.608s 15 1.02x
💻 Local Express 1.409s (+0.9%) 2.006s (~) 0.597s 15 1.02x
💻 Local Nitro 1.426s (+0.9%) 2.005s (~) 0.579s 15 1.03x
🐘 Postgres Nitro 1.669s (-12.6% 🟢) 2.010s (~) 0.341s 15 1.21x
🐘 Postgres Next.js (Turbopack) 1.681s (~) 2.012s (~) 0.331s 15 1.22x
🐘 Postgres Express 1.852s (+4.1%) 2.009s (~) 0.158s 15 1.34x
🌐 MongoDB Next.js (Turbopack) 2.178s (+1.4%) 3.011s (~) 0.833s 10 1.58x
🌐 Turso Next.js (Turbopack) 2.208s (~) 3.014s (~) 0.806s 10 1.60x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.936s (+5.1% 🔺) 3.642s (+1.0%) 0.706s 9 1.00x
▲ Vercel Express 3.054s (+3.3%) 3.979s (+3.1%) 0.925s 8 1.04x
▲ Vercel Next.js (Turbopack) 3.084s (+9.5% 🔺) 3.870s (+3.8%) 0.785s 8 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 🥇 Express 2.208s (+1.2%) 3.162s (~) 0.954s 10 1.00x
💻 Local Next.js (Turbopack) 2.244s (+3.7%) 3.188s (+6.9% 🔺) 0.944s 10 1.02x
💻 Local Nitro 2.250s (+1.8%) 3.196s (+1.3%) 0.946s 10 1.02x
🌐 Redis Next.js (Turbopack) 2.478s (+0.5%) 3.014s (~) 0.536s 10 1.12x
🌐 Starter Next.js (Turbopack) 2.518s (+1.9%) 3.053s (+1.5%) 0.535s 10 1.14x
🐘 Postgres Next.js (Turbopack) 2.554s (+2.6%) 3.024s (~) 0.471s 10 1.16x
🐘 Postgres Express 2.556s (-1.4%) 3.015s (~) 0.460s 10 1.16x
🐘 Postgres Nitro 2.881s (+8.8% 🔺) 3.123s (+3.7%) 0.242s 10 1.30x
🌐 MongoDB Next.js (Turbopack) 4.669s (-0.9%) 5.180s (~) 0.511s 6 2.11x
🌐 Turso Next.js (Turbopack) 4.803s (+3.7%) 5.182s (~) 0.379s 6 2.17x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.200s (-15.6% 🟢) 3.896s (-11.3% 🟢) 0.696s 8 1.00x
▲ Vercel Next.js (Turbopack) 3.438s (-6.0% 🟢) 4.099s (-5.3% 🟢) 0.661s 8 1.07x
▲ Vercel Nitro 3.752s (+10.3% 🔺) 4.560s (+9.1% 🔺) 0.808s 7 1.17x

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

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.141s (+12.4% 🔺) 1.006s (~) 0.000s (~) 1.013s (~) 0.871s 10 1.00x
🌐 Redis Next.js (Turbopack) 0.151s (+4.9%) 1.005s (~) 0.000s (+Infinity% 🔺) 1.014s (~) 0.864s 10 1.07x
💻 Local Next.js (Turbopack) 0.151s (+8.3% 🔺) 1.003s (~) 0.017s (-2.8%) 1.028s (~) 0.877s 10 1.07x
💻 Local Express 0.175s (+0.6%) 0.992s (~) 0.018s (+11.4% 🔺) 1.024s (~) 0.849s 10 1.24x
💻 Local Nitro 0.182s (+2.9%) 0.992s (~) 0.016s (-2.4%) 1.022s (~) 0.840s 10 1.29x
🌐 MongoDB Next.js (Turbopack) 0.482s (-7.5% 🟢) 0.964s (+3.8%) 0.000s (+Infinity% 🔺) 1.013s (~) 0.530s 10 3.41x
🌐 Turso Next.js (Turbopack) 0.525s (+2.7%) 0.930s (-0.7%) 0.000s (NaN%) 1.014s (~) 0.489s 10 3.72x
🐘 Postgres Next.js (Turbopack) 0.696s (-41.2% 🟢) 0.857s (-44.2% 🟢) 0.000s (NaN%) 1.016s (-41.2% 🟢) 0.319s 10 4.93x
🐘 Postgres Express 2.233s (-6.9% 🟢) 2.809s (+6.2% 🔺) 0.000s (NaN%) 3.015s (~) 0.781s 10 15.80x
🐘 Postgres Nitro 2.422s (+9.0% 🔺) 2.621s (-7.2% 🟢) 0.000s (-100.0% 🟢) 3.013s (~) 0.591s 10 17.14x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.743s (-12.9% 🟢) 3.301s (-8.3% 🟢) 0.547s (+10.5% 🔺) 4.287s (-6.9% 🟢) 1.543s 10 1.00x
▲ Vercel Nitro 2.838s (-2.5%) 3.153s (-4.8%) 0.390s (-10.5% 🟢) 4.017s (-4.7%) 1.179s 10 1.03x
▲ Vercel Express 2.964s (~) 3.372s (+4.5%) 0.471s (+16.9% 🔺) 4.415s (+5.5% 🔺) 1.452s 10 1.08x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Next.js (Turbopack) 6/8
🐘 Postgres Next.js (Turbopack) 6/8
▲ Vercel Nitro 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

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Peter Wielander <mittgfu@gmail.com>
@VaguelySerious VaguelySerious merged commit 1a305bf into main Jan 2, 2026
89 checks passed
@VaguelySerious VaguelySerious deleted the peter/cli-check-for-updates-manual branch January 2, 2026 16:45
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.

3 participants