New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

New vercel queue client with v2beta consumers - #1096

Merged
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue
Feb 19, 2026
Merged

New vercel queue client with v2beta consumers#1096
VaguelySerious merged 15 commits into
mainfrom
cgowrie/v2beta-queue

Conversation

@ctgowrie

@ctgowriectgowrie commented Feb 17, 2026

Copy link
Copy Markdown
Contributor
  • Migrate from VQS queue/v1beta to queue/v2beta across all packages
  • Update @vercel/queue SDK usage: Client → QueueClient, .send() → .sendMessage(), and use handleCallback from @vercel/queue/web for consumers
  • Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload for observability
  • Add queue name prefix support in world-vercel

@changeset-bot

changeset-botBot commented Feb 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a1c8f0a

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

This PR includes changesets to release 16 packages
NameType
@workflow/world-vercelPatch
@workflow/sveltekitPatch
@workflow/buildersPatch
@workflow/webPatch
@workflow/cliPatch
@workflow/corePatch
workflowPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/world-testingPatch
@workflow/web-sharedPatch
@workflow/nuxtPatch

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

vercelBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Nitro0.032s (-7.3% 🟢)1.004s (~)0.973s101.00x
💻 LocalExpress0.032s (-0.9%)1.005s (~)0.973s101.00x
💻 LocalNext.js (Turbopack)0.044s1.004s0.961s101.38x
🌐 RedisNext.js (Turbopack)0.048s1.005s0.957s101.50x
🌐 MongoDBNext.js (Turbopack)0.117s1.007s0.890s103.70x
🐘 PostgresExpress0.174s (-60.4% 🟢)1.009s (~)0.835s105.48x
🐘 PostgresNitro0.259s (-48.3% 🟢)1.011s (~)0.752s108.18x
🐘 PostgresNext.js (Turbopack)0.449s1.009s0.560s1014.18x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express0.479s (-81.9% 🟢)2.455s (-35.5% 🟢)1.975s101.00x
▲ VercelNitro0.500s (-50.4% 🟢)1.964s (-19.8% 🟢)1.464s101.04x
▲ VercelNext.js (Turbopack)0.511s (-82.4% 🟢)1.916s (-52.4% 🟢)1.405s101.07x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.096s2.005s0.909s101.00x
💻 LocalExpress1.102s (~)2.005s (~)0.903s101.00x
💻 LocalNitro1.104s (~)2.004s (~)0.900s101.01x
🌐 RedisNext.js (Turbopack)1.105s2.006s0.901s101.01x
🌐 MongoDBNext.js (Turbopack)1.315s2.008s0.692s101.20x
🐘 PostgresNext.js (Turbopack)1.820s2.011s0.191s101.66x
🐘 PostgresExpress2.297s (~)3.014s (~)0.717s102.10x
🐘 PostgresNitro2.426s (+4.2%)3.015s (+3.5%)0.589s102.21x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.616s (+11.7% 🔺)3.826s (+25.3% 🔺)1.210s101.00x
▲ VercelNitro2.874s (+21.3% 🔺)4.388s (+34.6% 🔺)1.515s101.10x
▲ VercelNext.js (Turbopack)3.242s (+40.6% 🔺)4.258s (+39.9% 🔺)1.016s101.24x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)10.723s11.023s0.300s31.00x
💻 LocalNext.js (Turbopack)10.729s11.021s0.292s31.00x
💻 LocalExpress10.806s (~)11.021s (~)0.216s31.01x
💻 LocalNitro10.827s (~)11.023s (~)0.196s31.01x
🌐 MongoDBNext.js (Turbopack)12.258s13.022s0.764s31.14x
🐘 PostgresNext.js (Turbopack)15.229s16.044s0.816s21.42x
🐘 PostgresNitro20.257s (+32.8% 🔺)21.061s (+31.2% 🔺)0.804s21.89x
🐘 PostgresExpress20.424s (+1.3%)21.058s (~)0.634s21.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express15.877s (-12.8% 🟢)16.741s (-12.8% 🟢)0.864s21.00x
▲ VercelNitro16.308s (-15.4% 🟢)17.419s (-14.9% 🟢)1.111s21.03x
▲ VercelNext.js (Turbopack)16.497s (-9.3% 🟢)18.127s (-7.6% 🟢)1.631s21.04x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.873s27.057s0.184s31.00x
💻 LocalNext.js (Turbopack)27.239s28.052s0.813s31.01x
💻 LocalExpress27.452s (~)28.049s (~)0.597s31.02x
💻 LocalNitro27.458s (-0.5%)28.050s (~)0.592s31.02x
🌐 MongoDBNext.js (Turbopack)30.477s31.039s0.562s21.13x
🐘 PostgresNext.js (Turbopack)37.801s38.090s0.289s21.41x
🐘 PostgresNitro38.084s (+0.7%)38.602s (+1.3%)0.519s21.42x
🐘 PostgresExpress50.181s (~)51.131s (~)0.949s21.87x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express39.408s (-12.1% 🟢)40.703s (-11.1% 🟢)1.295s21.00x
▲ VercelNitro40.194s (-15.9% 🟢)41.178s (-15.9% 🟢)0.984s21.02x
▲ VercelNext.js (Turbopack)40.464s (-9.0% 🟢)41.886s (-8.5% 🟢)1.422s21.03x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.340s55.097s0.756s21.00x
💻 LocalNext.js (Turbopack)56.895s57.099s0.204s21.05x
💻 LocalNitro57.166s (~)58.101s (~)0.935s21.05x
💻 LocalExpress57.169s (~)58.096s (~)0.926s21.05x
🌐 MongoDBNext.js (Turbopack)61.022s61.570s0.549s21.12x
🐘 PostgresNitro75.227s (-1.0%)75.688s (-0.6%)0.461s21.38x
🐘 PostgresNext.js (Turbopack)76.519s77.176s0.658s21.41x
🐘 PostgresExpress100.360s (~)101.249s (~)0.889s11.85x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro83.784s (-12.4% 🟢)84.474s (-13.1% 🟢)0.690s21.00x
▲ VercelNext.js (Turbopack)84.058s (-9.1% 🟢)85.199s (-8.3% 🟢)1.141s21.00x
▲ VercelExpress85.156s (-6.5% 🟢)86.432s (-6.1% 🟢)1.276s21.02x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.253s2.006s0.753s151.00x
💻 LocalNitro1.392s (-1.1%)2.005s (~)0.613s151.11x
💻 LocalExpress1.404s (-1.2%)2.005s (~)0.601s151.12x
💻 LocalNext.js (Turbopack)1.420s2.006s0.585s151.13x
🐘 PostgresNitro1.829s (-20.7% 🟢)2.400s (-20.4% 🟢)0.571s131.46x
🐘 PostgresNext.js (Turbopack)1.911s2.396s0.485s131.53x
🌐 MongoDBNext.js (Turbopack)2.155s3.008s0.853s101.72x
🐘 PostgresExpress2.380s (-3.2%)3.014s (~)0.634s101.90x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.487s (+6.2% 🔺)3.418s (+11.9% 🔺)0.931s91.00x
▲ VercelNitro2.604s (+0.9%)3.493s (-0.6%)0.889s91.05x
▲ VercelExpress2.962s (+28.0% 🔺)4.074s (+30.4% 🔺)1.113s81.19x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.483s3.008s0.524s101.00x
💻 LocalNext.js (Turbopack)2.550s3.007s0.457s101.03x
💻 LocalNitro2.553s (~)3.008s (~)0.454s101.03x
💻 LocalExpress2.567s (+0.5%)3.006s (~)0.439s101.03x
🌐 MongoDBNext.js (Turbopack)4.756s5.177s0.421s61.92x
🐘 PostgresNitro8.383s (+1.0%)8.784s (-2.8%)0.400s43.38x
🐘 PostgresExpress8.548s (+8.1% 🔺)9.029s (+5.9% 🔺)0.482s43.44x
🐘 PostgresNext.js (Turbopack)11.899s12.368s0.470s34.79x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.976s (+10.8% 🔺)4.324s (+30.0% 🔺)1.348s71.00x
▲ VercelExpress3.185s (+17.6% 🔺)4.208s (+21.4% 🔺)1.024s81.07x
▲ VercelNitro3.399s (+24.6% 🔺)4.339s (+15.6% 🔺)0.940s71.14x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.038s4.724s0.686s71.00x
💻 LocalNitro7.192s (-1.5%)8.022s (~)0.830s41.78x
💻 LocalExpress7.241s (~)8.017s (~)0.776s41.79x
💻 LocalNext.js (Turbopack)7.470s8.014s0.544s41.85x
🌐 MongoDBNext.js (Turbopack)9.729s10.349s0.619s32.41x
🐘 PostgresExpress47.287s (+20.8% 🔺)48.142s (+20.0% 🔺)0.855s111.71x
🐘 PostgresNitro48.285s (-5.2% 🟢)49.117s (-3.9%)0.832s111.96x
🐘 PostgresNext.js (Turbopack)53.091s53.119s0.028s113.15x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.642s (-14.2% 🟢)3.570s (-10.6% 🟢)0.928s91.00x
▲ VercelNitro2.796s (-34.3% 🟢)3.465s (-34.4% 🟢)0.669s91.06x
▲ VercelExpress2.898s (-15.7% 🟢)3.944s (-16.1% 🟢)1.046s81.10x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.286s2.006s0.720s151.00x
💻 LocalNitro1.408s (-2.9%)2.005s (~)0.598s151.09x
💻 LocalExpress1.421s (+0.6%)2.005s (~)0.584s151.11x
💻 LocalNext.js (Turbopack)1.459s2.006s0.547s151.14x
🐘 PostgresNitro1.952s (-15.4% 🟢)2.154s (-21.4% 🟢)0.202s141.52x
🌐 MongoDBNext.js (Turbopack)2.142s3.008s0.866s101.67x
🐘 PostgresNext.js (Turbopack)2.183s2.739s0.556s111.70x
🐘 PostgresExpress2.230s (+2.6%)2.596s (~)0.366s121.73x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.232s (-36.8% 🟢)3.309s (-25.1% 🟢)1.077s101.00x
▲ VercelNext.js (Turbopack)2.308s (-12.3% 🟢)3.367s (+0.5%)1.059s91.03x
▲ VercelExpress2.629s (-14.0% 🟢)4.028s (+3.5%)1.399s81.18x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.498s3.008s0.509s101.00x
💻 LocalNitro2.662s (~)3.007s (~)0.346s101.07x
💻 LocalExpress2.663s (~)3.007s (~)0.343s101.07x
💻 LocalNext.js (Turbopack)2.720s3.008s0.288s101.09x
🌐 MongoDBNext.js (Turbopack)4.716s5.177s0.461s61.89x
🐘 PostgresNitro9.586s (-19.3% 🟢)10.031s (-18.9% 🟢)0.445s43.84x
🐘 PostgresExpress11.315s (-1.3%)12.033s (~)0.718s34.53x
🐘 PostgresNext.js (Turbopack)13.820s14.035s0.214s35.53x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro2.298s (-11.4% 🟢)3.687s (+9.2% 🔺)1.389s91.00x
▲ VercelNext.js (Turbopack)2.585s (-24.6% 🟢)5.073s (+26.3% 🔺)2.489s61.12x
▲ VercelExpress2.612s (-31.2% 🟢)4.116s (-10.5% 🟢)1.505s81.14x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.086s4.868s0.782s71.00x
💻 LocalExpress7.696s (-3.6%)8.019s (-5.9% 🟢)0.323s41.88x
💻 LocalNitro7.734s (-0.7%)8.023s (~)0.290s41.89x
💻 LocalNext.js (Turbopack)7.808s8.516s0.708s41.91x
🌐 MongoDBNext.js (Turbopack)9.777s10.352s0.575s32.39x
🐘 PostgresNitro48.510s (-4.0%)49.126s (-3.9%)0.616s111.87x
🐘 PostgresExpress54.042s (+3.0%)54.120s (+1.9%)0.078s113.23x
🐘 PostgresNext.js (Turbopack)57.364s58.133s0.769s114.04x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.740s (-20.1% 🟢)3.343s (-22.3% 🟢)0.604s91.00x
▲ VercelNitro2.943s (-25.7% 🟢)3.817s (-28.4% 🟢)0.874s81.07x
▲ VercelExpress3.426s (-11.4% 🟢)4.754s (-1.4%)1.327s71.25x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.145s1.001s0.011s1.017s0.872s101.00x
🌐 RedisNext.js (Turbopack)0.146s1.000s0.001s1.007s0.861s101.01x
💻 LocalExpress0.170s (-1.1%)1.003s (~)0.011s (-2.7%)1.016s (~)0.846s101.17x
💻 LocalNitro0.171s (-7.0% 🟢)1.003s (~)0.010s (~)1.016s (~)0.845s101.18x
🌐 MongoDBNext.js (Turbopack)0.502s0.944s0.001s1.008s0.506s103.47x
🐘 PostgresNext.js (Turbopack)0.988s0.910s0.001s1.211s0.223s106.83x
🐘 PostgresNitro1.357s (+3.8%)1.821s (+5.1% 🔺)0.001s (-7.1% 🟢)2.013s (~)0.656s109.39x
🐘 PostgresExpress2.454s (+14.3% 🔺)2.588s (-10.6% 🟢)0.001s (-13.3% 🟢)3.014s (~)0.560s1016.97x

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro3.327s (+62.5% 🔺)4.138s (+58.1% 🔺)0.176s (-9.2% 🟢)4.752s (+36.6% 🔺)1.425s101.00x
▲ VercelExpress3.961s (+94.5% 🔺)4.653s (+84.2% 🔺)0.187s (-1.0%)5.326s (+62.5% 🔺)1.366s101.19x
▲ VercelNext.js (Turbopack)4.089s (+104.4% 🔺)4.866s (+104.5% 🔺)0.196s (-69.3% 🟢)5.583s (+59.7% 🔺)1.494s101.23x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)6/12
🐘 PostgresNitro6/12
▲ VercelExpress4/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local9/12
Next.js (Turbopack)🌐 Redis7/12
Nitro💻 Local9/12
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

@github-actions

github-actionsBot commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production523049572
✅ 💻 Local Development556068624
✅ 📦 Local Production556068624
✅ 🐘 Local Postgres556068624
✅ 🪟 Windows490352
❌ 🌍 Community Worlds111459165
✅ 📋 Other135021156
Total2486452862817

❌ Failed Tests

🌍 Community Worlds (45 failed)

turso (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4705
✅ example4705
✅ express4705
✅ fastify4705
✅ hono4705
✅ nextjs-turbopack5002
✅ nextjs-webpack5002
✅ nitro4705
✅ nuxt4705
✅ sveltekit4705
✅ vite4705
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4507
✅ express-stable4507
✅ fastify-stable4507
✅ hono-stable4507
✅ nextjs-turbopack-canary4903
✅ nextjs-turbopack-stable4903
✅ nextjs-webpack-canary4903
✅ nextjs-webpack-stable4903
✅ nitro-stable4507
✅ nuxt-stable4507
✅ sveltekit-stable4507
✅ vite-stable4507
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4903
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4903
✅ redis-dev300
✅ redis4903
✅ turso-dev300
❌ turso4453
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4507
✅ e2e-local-postgres-nest-stable4507
✅ e2e-local-prod-nest-stable4507

📋 View full workflow run

Comment thread.changeset/tender-apples-tie.md Outdated
Comment threadpackages/world-vercel/src/queue.ts
Comment threadpackages/world-vercel/src/queue.ts
ctgowrieand others added 3 commits February 18, 2026 17:37
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Signed-off-by: Casey Gowrie <casey.gowrie@vercel.com>
@socket-security

socket-securityBot commented Feb 18, 2026

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatednpm/​@​vercel/​queue@​0.0.0-alpha.36 ⏵ 0.0.0-alpha.3898100100+199+1100

View full report

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ctgowrie@VaguelySerious@karthikscale3