Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

@vercel-release-bot@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} 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

Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

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

Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

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

Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

@vercel-release-bot@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } 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

Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

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

Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

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

Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

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

Version Packages (beta) - #1045

Merged
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main
Feb 19, 2026
Merged

Version Packages (beta)#1045
VaguelySerious merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vercel-release-bot

@vercel-release-botvercel-release-bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@workflow/astro@4.0.0-beta.32

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/builders@4.0.1-beta.49

Patch Changes

@workflow/cli@4.1.0-beta.58

Patch Changes

@workflow/core@4.1.0-beta.58

Patch Changes

  • #9780d5323c Thanks @TooTallNate! - Refactor serialization code to be asynchronous

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #10311c11573 Thanks @karthikscale3! - Refactor and enhance web-shared observability UI components and update builders base behavior.

  • #10519f77380 Thanks @VaguelySerious! - Fix 429 backoff for workflow runtime API calls

  • #1118852e3f1 Thanks @VaguelySerious! - Do not re-throw error when multiple workflow invocations race to complete the workflow

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • Updated dependencies [7046610, c2b4fe9, 6e72b29, ea3254e, 29347b7, 5e06a7c, 5487983, 5487983]:

    • @workflow/world-vercel@4.1.0-beta.33
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/errors@4.1.0-beta.16

Patch Changes

  • #1055c2b4fe9 Thanks @pranaygp! - Detect and fatal error on orphaned/invalid events in the event log instead of silently hanging

@workflow/nest@0.0.0-beta.7

Patch Changes

@workflow/next@4.0.1-beta.54

Patch Changes

@workflow/nitro@4.0.1-beta.53

Patch Changes

@workflow/nuxt@4.0.1-beta.42

Patch Changes

  • Updated dependencies []:
    • @workflow/nitro@4.0.1-beta.53

@workflow/rollup@4.0.0-beta.15

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/sveltekit@4.0.0-beta.47

Patch Changes

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [1c11573, 29347b7]:

    • @workflow/builders@4.0.1-beta.49
    • @workflow/rollup@4.0.0-beta.15
    • @workflow/vite@4.0.0-beta.8

@workflow/vite@4.0.0-beta.8

Patch Changes

  • Updated dependencies [1c11573, 29347b7]:
    • @workflow/builders@4.0.1-beta.49

@workflow/web@4.1.0-beta.34

Patch Changes

@workflow/web-shared@4.1.0-beta.53

Patch Changes

workflow@4.1.0-beta.58

Patch Changes

@workflow/world@4.1.0-beta.5

Patch Changes

  • #9796e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Add optional close() method to the World interface for releasing resources held by a World implementation

@workflow/world-local@4.1.0-beta.33

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@workflow/world-postgres@4.1.0-beta.35

Patch Changes

  • #10575e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #10815487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

@workflow/world-testing@4.1.0-beta.59

Patch Changes

@workflow/world-vercel@4.1.0-beta.33

Patch Changes

  • #10987046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #109629347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5

@vercel

vercelBot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Feb 13, 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🥇 Express0.033s (+20.3% 🔺)1.005s (~)0.972s101.00x
💻 LocalNitro0.034s (+5.6% 🔺)1.005s (~)0.971s101.03x
💻 LocalNext.js (Turbopack)0.041s1.005s0.964s101.22x
🌐 RedisNext.js (Turbopack)0.049s1.005s0.956s101.48x
🌐 MongoDBNext.js (Turbopack)0.096s1.008s0.912s102.90x
🐘 PostgresExpress0.096s (+5.5% 🔺)1.010s (~)0.913s102.90x
🐘 PostgresNitro0.367s (+74.0% 🔺)1.012s (~)0.645s1011.04x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Nitro0.548s (-8.6% 🟢)1.946s (-2.5%)1.397s101.00x
▲ VercelNext.js (Turbopack)0.627s (-9.2% 🟢)1.918s (-10.4% 🟢)1.291s101.14x
▲ VercelExpress0.629s (-16.3% 🟢)1.876s (-7.9% 🟢)1.247s101.15x

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

workflow with 1 step

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)1.100s2.005s0.906s101.00x
🌐 RedisNext.js (Turbopack)1.106s2.006s0.900s101.01x
💻 LocalNitro1.109s (~)2.005s (~)0.895s101.01x
💻 LocalExpress1.110s (+2.8%)2.006s (~)0.896s101.01x
🌐 MongoDBNext.js (Turbopack)1.313s2.009s0.696s101.19x
🐘 PostgresNitro2.015s (-17.3% 🟢)2.314s (-23.3% 🟢)0.298s101.83x
🐘 PostgresExpress2.468s (~)3.014s (~)0.547s102.24x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.951s (+64.3% 🔺)4.824s (+53.3% 🔺)0.873s101.00x
▲ VercelNitro4.154s (+67.6% 🔺)5.038s (+44.5% 🔺)0.884s101.05x
▲ VercelNext.js (Turbopack)4.443s (+70.9% 🔺)5.481s (+59.8% 🔺)1.038s101.12x

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

workflow with 10 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)10.706s11.021s0.315s31.00x
🌐 RedisNext.js (Turbopack)10.724s11.023s0.298s31.00x
💻 LocalExpress10.847s (+2.5%)11.022s (~)0.175s31.01x
💻 LocalNitro10.861s (~)11.023s (~)0.162s31.01x
🌐 MongoDBNext.js (Turbopack)12.290s13.024s0.734s31.15x
🐘 PostgresNitro14.836s (-26.9% 🟢)15.047s (-28.5% 🟢)0.210s21.39x
🐘 PostgresExpress20.323s (~)21.060s (~)0.736s21.90x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)17.822s (-6.0% 🟢)18.699s (-7.6% 🟢)0.877s21.00x
▲ VercelExpress18.160s (-1.2%)18.888s (-4.5%)0.728s21.02x
▲ VercelNitro20.070s (+9.3% 🔺)21.048s (+7.4% 🔺)0.978s21.13x

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

workflow with 25 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)26.890s27.049s0.159s31.00x
💻 LocalNext.js (Turbopack)27.176s28.050s0.874s31.01x
💻 LocalNitro27.549s (~)28.053s (~)0.503s31.02x
💻 LocalExpress27.560s (+2.5%)28.053s (+3.7%)0.493s31.02x
🌐 MongoDBNext.js (Turbopack)30.593s31.044s0.451s21.14x
🐘 PostgresNitro37.612s (-25.4% 🟢)38.091s (-25.5% 🟢)0.479s21.40x
🐘 PostgresExpress50.339s (~)51.133s (+1.0%)0.794s21.87x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)43.196s (-4.8%)44.736s (-3.2%)1.541s21.00x
▲ VercelExpress43.486s (-3.0%)44.442s (-3.5%)0.956s21.01x
▲ VercelNitro43.603s (-1.0%)44.727s (-1.5%)1.124s21.01x

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

workflow with 50 sequential steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)54.297s55.101s0.804s21.00x
💻 LocalNext.js (Turbopack)56.788s57.100s0.311s21.05x
💻 LocalNitro57.319s (~)58.105s (~)0.787s21.06x
💻 LocalExpress57.459s (+2.6%)58.105s (+3.6%)0.645s21.06x
🌐 MongoDBNext.js (Turbopack)61.276s62.087s0.810s21.13x
🐘 PostgresNitro83.579s (-16.7% 🟢)84.199s (-16.8% 🟢)0.620s21.54x
🐘 PostgresExpress94.741s (-5.4% 🟢)95.233s (-5.0%)0.492s11.74x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express89.567s (~)90.243s (-0.9%)0.676s11.00x
▲ VercelNitro90.334s (~)91.272s (~)0.938s11.01x
▲ VercelNext.js (Turbopack)94.106s (+1.9%)94.781s (+1.5%)0.675s11.05x

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

Promise.all with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.247s2.006s0.759s151.00x
💻 LocalNitro1.397s (-1.1%)2.005s (~)0.608s151.12x
💻 LocalExpress1.403s (+2.3%)2.005s (~)0.602s151.12x
💻 LocalNext.js (Turbopack)1.412s2.005s0.593s151.13x
🐘 PostgresExpress2.056s (-7.9% 🟢)2.512s (-16.6% 🟢)0.456s121.65x
🌐 MongoDBNext.js (Turbopack)2.153s3.009s0.856s101.73x
🐘 PostgresNitro2.418s (~)3.014s (~)0.596s101.94x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.526s (-1.6%)3.236s (-6.4% 🟢)0.709s101.00x
▲ VercelNitro2.527s (-1.7%)3.229s (-5.7% 🟢)0.702s101.00x
▲ VercelNext.js (Turbopack)2.763s (-10.2% 🟢)3.600s (-13.4% 🟢)0.837s91.09x

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

Promise.all with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.494s3.008s0.513s101.00x
💻 LocalNext.js (Turbopack)2.526s3.007s0.481s101.01x
💻 LocalNitro2.577s (-1.6%)3.007s (~)0.431s101.03x
💻 LocalExpress2.638s (+12.4% 🔺)3.007s (~)0.370s101.06x
🌐 MongoDBNext.js (Turbopack)4.839s5.346s0.507s61.94x
🐘 PostgresNitro7.490s (-21.6% 🟢)8.029s (-20.0% 🟢)0.539s43.00x
🐘 PostgresExpress9.982s (+13.7% 🔺)10.371s (+11.7% 🔺)0.389s34.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express3.132s (+7.2% 🔺)4.164s (+6.5% 🔺)1.032s81.00x
▲ VercelNext.js (Turbopack)3.440s (+25.4% 🔺)4.608s (+26.8% 🔺)1.168s71.10x
▲ VercelNitro3.442s (-14.8% 🟢)4.280s (-20.0% 🟢)0.838s81.10x

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

Promise.all with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.047s4.725s0.677s71.00x
💻 LocalNitro6.850s (-7.9% 🟢)7.766s (-3.2%)0.917s41.69x
💻 LocalNext.js (Turbopack)7.480s8.017s0.537s41.85x
💻 LocalExpress7.788s (+20.3% 🔺)8.018s (+14.3% 🔺)0.230s41.92x
🌐 MongoDBNext.js (Turbopack)10.012s10.683s0.671s32.47x
🐘 PostgresExpress38.201s (-18.5% 🟢)39.097s (-17.0% 🟢)0.896s19.44x
🐘 PostgresNitro45.981s (~)46.122s (~)0.141s111.36x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express7.837s (+114.9% 🔺)8.751s (+87.8% 🔺)0.914s41.00x
▲ VercelNitro14.359s (+252.5% 🔺)15.176s (+194.4% 🔺)0.817s31.83x
▲ VercelNext.js (Turbopack)18.696s (+346.5% 🔺)19.284s (+269.4% 🔺)0.588s22.39x

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

Promise.race with 10 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)1.252s2.006s0.754s151.00x
💻 LocalNext.js (Turbopack)1.415s2.005s0.591s151.13x
💻 LocalNitro1.431s (+1.8%)2.005s (~)0.574s151.14x
💻 LocalExpress1.436s (+4.7%)2.005s (~)0.569s151.15x
🐘 PostgresNitro1.960s (+8.4% 🔺)2.600s (+8.3% 🔺)0.640s121.57x
🐘 PostgresExpress2.033s (-6.7% 🟢)2.515s (-8.2% 🟢)0.482s121.62x
🌐 MongoDBNext.js (Turbopack)2.157s3.008s0.851s101.72x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)2.429s (-0.8%)3.303s (-5.3% 🟢)0.874s101.00x
▲ VercelNitro3.160s (+32.0% 🔺)4.066s (+20.5% 🔺)0.906s81.30x
▲ VercelExpress4.520s (+55.4% 🔺)5.513s (+44.5% 🔺)0.993s61.86x

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

Promise.race with 25 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)2.519s3.008s0.489s101.00x
💻 LocalNext.js (Turbopack)2.535s3.009s0.474s101.01x
💻 LocalNitro2.602s (-3.5%)3.008s (~)0.405s101.03x
💻 LocalExpress2.744s (+10.5% 🔺)3.008s (~)0.264s101.09x
🌐 MongoDBNext.js (Turbopack)4.759s5.178s0.420s61.89x
🐘 PostgresNitro9.602s (-15.6% 🟢)10.363s (-13.9% 🟢)0.761s33.81x
🐘 PostgresExpress11.747s (-4.3%)12.033s (-2.7%)0.286s34.66x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.551s (-14.9% 🟢)3.481s (-8.3% 🟢)0.931s91.00x
▲ VercelNitro3.381s (+38.6% 🔺)4.096s (+24.5% 🔺)0.715s81.33x
▲ VercelNext.js (Turbopack)5.007s (+73.5% 🔺)6.161s (+60.4% 🔺)1.154s61.96x

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

Promise.race with 50 concurrent steps

💻 Local Development

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
🌐 Redis🥇 Next.js (Turbopack)4.128s4.867s0.739s71.00x
💻 LocalNitro7.375s (-7.1% 🟢)8.021s (-3.0%)0.646s41.79x
💻 LocalNext.js (Turbopack)7.681s8.015s0.334s41.86x
💻 LocalExpress8.299s (+14.4% 🔺)8.774s (+9.4% 🔺)0.475s42.01x
🌐 MongoDBNext.js (Turbopack)10.025s10.684s0.659s32.43x
🐘 PostgresNitro50.642s (+3.1%)51.135s (+2.0%)0.493s112.27x
🐘 PostgresExpress53.673s (+8.9% 🔺)54.152s (+8.0% 🔺)0.479s113.00x
🐘 PostgresNext.js (Turbopack)⚠️missing----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Next.js (Turbopack)9.622s (+33.3% 🔺)10.440s (+21.9% 🔺)0.818s31.00x
▲ VercelExpress13.276s (+203.5% 🔺)14.155s (+158.4% 🔺)0.880s31.38x
▲ VercelNitro15.088s (+109.7% 🔺)16.156s (+89.1% 🔺)1.068s21.57x

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

Stream Benchmarks(includes TTFB metrics)
workflow with stream

💻 Local Development

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
💻 Local🥇 Next.js (Turbopack)0.142s1.001s0.011s1.016s0.875s101.00x
🌐 RedisNext.js (Turbopack)0.143s1.000s0.001s1.007s0.864s101.01x
💻 LocalExpress0.176s (+53.0% 🔺)1.002s (~)0.011s (+4.6%)1.017s (~)0.841s101.24x
💻 LocalNitro0.181s (+4.3%)1.002s (~)0.010s (-5.6% 🟢)1.016s (~)0.835s101.28x
🌐 MongoDBNext.js (Turbopack)0.493s0.957s0.002s1.010s0.516s103.48x
🐘 PostgresExpress1.364s (-40.5% 🟢)1.720s (-37.5% 🟢)0.001s (~)2.013s (-33.2% 🟢)0.649s109.63x
🐘 PostgresNitro1.399s (-42.9% 🟢)1.642s (-36.6% 🟢)0.001s (-15.4% 🟢)2.013s (-33.2% 🟢)0.614s109.88x
🐘 PostgresNext.js (Turbopack)⚠️missing-----

▲ Production (Vercel)

WorldFrameworkWorkflow TimeTTFBSlurpWall TimeOverheadSamplesvs Fastest
▲ Vercel🥇 Express2.050s (-5.8% 🟢)2.615s (-6.4% 🟢)0.221s (-20.2% 🟢)3.397s (-7.6% 🟢)1.347s101.00x
▲ VercelNext.js (Turbopack)2.288s (-3.2%)3.156s (+18.5% 🔺)0.216s (-19.6% 🟢)3.976s (+10.7% 🔺)1.688s101.12x
▲ VercelNitro2.572s (+20.5% 🔺)2.958s (+12.2% 🔺)0.183s (-27.7% 🟢)3.721s (+8.0% 🔺)1.149s101.25x

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

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World🥇 Fastest FrameworkWins
💻 LocalNext.js (Turbopack)8/12
🐘 PostgresNitro8/12
▲ VercelExpress7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework🥇 Fastest WorldWins
Express💻 Local11/12
Next.js (Turbopack)🌐 Redis8/12
Nitro💻 Local12/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 13, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production501038539
✅ 💻 Local Development520068588
❌ 📦 Local Production4754568588
❌ 🐘 Local Postgres4754568588
✅ 🪟 Windows460349
❌ 🌍 Community Worlds105429156
✅ 📋 Other126021147
Total22481322752655

❌ Failed Tests

📦 Local Production (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🐘 Local Postgres (45 failed)

nextjs-turbopack-canary (45 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • webhook route with invalid token
  • sleepingWorkflow
  • 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 endpoint (HTTP) - workflow and step endpoints respond to __health query parameter
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
🌍 Community Worlds (42 failed)

turso (42 failed):

  • addTenWorkflow
  • addTenWorkflow
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • 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
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro4504
✅ example4504
✅ express4504
✅ fastify4504
✅ hono4504
✅ nextjs-turbopack4801
✅ nextjs-webpack4801
✅ nitro4504
✅ nuxt4504
✅ sveltekit4504
✅ vite4504
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
✅ nextjs-turbopack-canary4603
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
❌ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable4207
✅ express-stable4207
✅ fastify-stable4207
✅ hono-stable4207
❌ nextjs-turbopack-canary1453
✅ nextjs-turbopack-stable4603
✅ nextjs-webpack-canary4603
✅ nextjs-webpack-stable4603
✅ nitro-stable4207
✅ nuxt-stable4207
✅ sveltekit-stable4207
✅ vite-stable4207
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack4603
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
✅ mongodb4603
✅ redis-dev300
✅ redis4603
✅ turso-dev300
❌ turso4423
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable4207
✅ e2e-local-postgres-nest-stable4207
✅ e2e-local-prod-nest-stable4207

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 96e8785 to e506eb1CompareFebruary 13, 2026 21:47
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from d118f93 to 55340daCompareFebruary 13, 2026 22:04
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 55340da to 63cb5c3CompareFebruary 13, 2026 22:21
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from 63cb5c3 to d1bb002CompareFebruary 13, 2026 22:22
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.

2 participants

@vercel-release-bot@VaguelySerious