Skip to content

Move swc-playground-wasm into workbench/swc-playground#1704

Merged
TooTallNate merged 3 commits into
mainfrom
move-swc-playground-wasm-to-workbench
Apr 13, 2026
Merged

Move swc-playground-wasm into workbench/swc-playground#1704
TooTallNate merged 3 commits into
mainfrom
move-swc-playground-wasm-to-workbench

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

Summary

  • Moves packages/swc-playground-wasm (Rust/WASM source, build script) into workbench/swc-playground/wasm/ so it is no longer a separate workspace package
  • The WASM build now runs as part of the playground's own prebuild/dev scripts instead of being built by CI's turbo build --filter='./packages/*'
  • This avoids Rust toolchain failures in unrelated CI jobs (e.g. this failure)

What changed

  • packages/swc-playground-wasm/ deleted — Cargo.toml, src/lib.rs, build.js moved to workbench/swc-playground/wasm/
  • Root Cargo.toml workspace member updated to point to new location
  • workbench/swc-playground/package.json: removed @workflow/swc-playground-wasm workspace dep, added build:wasm script, prebuild/dev now invoke wasm/build.js directly
  • scripts/copy-wasm.js updated to read from local wasm/pkg/ instead of packages/swc-playground-wasm/pkg/
  • .changeset/pre.json cleaned up to remove stale package entry

Move the Rust/WASM source from packages/swc-playground-wasm into
workbench/swc-playground/wasm/ so it is no longer built as part of
the packages/* turbo filter in CI. The WASM build now runs as part
of the playground's own prebuild/dev scripts, avoiding Rust toolchain
failures in unrelated CI jobs.
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 11, 2026

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

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Apr 12, 2026 7:03am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Apr 12, 2026 7:03am
example-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-astro-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-express-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-fastify-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-hono-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-nitro-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-nuxt-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-sveltekit-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workbench-vite-workflow Ready Ready Preview, Comment Apr 12, 2026 7:03am
workflow-swc-playground Ready Ready Preview, Comment Apr 12, 2026 7:03am
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
workflow-docs Skipped Skipped Apr 12, 2026 7:03am

@TooTallNate TooTallNate requested a review from a team as a code owner April 11, 2026 21:56
Copilot AI review requested due to automatic review settings April 11, 2026 21:56
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 11, 2026

⚠️ No Changeset found

Latest commit: e0900c8

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

This PR includes no changesets

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

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

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 11, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 923 0 67 990
✅ 💻 Local Development 898 0 182 1080
✅ 📦 Local Production 898 0 182 1080
✅ 🐘 Local Postgres 898 0 182 1080
✅ 🪟 Windows 82 0 8 90
❌ 🌍 Community Worlds 133 74 24 231
✅ 📋 Other 228 0 42 270
Total 4060 74 687 4821

❌ Failed Tests

🌍 Community Worlds (74 failed)

mongodb (7 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KP07Z9ZRW51V34H2PDTERTYC
  • webhookWorkflow | wrun_01KP07ZKE9GZE5DQ02ERA0KV3F
  • fetchWorkflow | wrun_01KP08365TEQ144DJB3EWQBC3W
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KP087HHBK63KE51PA142C923
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KP08EJFSYT1A4N77Y8BJCBHX

redis (7 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KP07Z9ZRW51V34H2PDTERTYC
  • webhookWorkflow | wrun_01KP07ZKE9GZE5DQ02ERA0KV3F
  • fetchWorkflow | wrun_01KP08365TEQ144DJB3EWQBC3W
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KP087HHBK63KE51PA142C923
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KP08EJFSYT1A4N77Y8BJCBHX

turso (60 failed):

  • addTenWorkflow | wrun_01KP07Y1Y5N9JA4H61KZAQK7SH
  • addTenWorkflow | wrun_01KP07Y1Y5N9JA4H61KZAQK7SH
  • wellKnownAgentWorkflow (.well-known/agent) | wrun_01KP07ZEQA9CYJFTG5JF5SDP2S
  • should work with react rendering in step
  • promiseAllWorkflow | wrun_01KP07YADA9RH3PV2J5JS2VDVG
  • promiseRaceWorkflow | wrun_01KP07YF4PNEFTCVK66H74YDK6
  • promiseAnyWorkflow | wrun_01KP07YHEMQ6AS2VRWJHM75XM4
  • importedStepOnlyWorkflow | wrun_01KP07ZTSHSM04TW4QJMZFAFJD
  • hookWorkflow | wrun_01KP07YXPKJG1CVPM6ZY9375MK
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KP07Z9ZRW51V34H2PDTERTYC
  • webhookWorkflow | wrun_01KP07ZKE9GZE5DQ02ERA0KV3F
  • sleepingWorkflow | wrun_01KP07ZSHCMG903W573V925VMR
  • parallelSleepWorkflow | wrun_01KP0805V96FX4AGPV4NHDCPKJ
  • nullByteWorkflow | wrun_01KP0809AVXA18T71ED367A6E1
  • workflowAndStepMetadataWorkflow | wrun_01KP080BJQJVDSGDJ5VE0XPXCH
  • fetchWorkflow | wrun_01KP08365TEQ144DJB3EWQBC3W
  • promiseRaceStressTestWorkflow | wrun_01KP0839NMJEY5EGVM8RSGQ08D
  • 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 catchability FatalError can be caught and detected with FatalError.is()
  • error handling not registered WorkflowNotRegisteredError fails the run when workflow does not exist
  • error handling not registered StepNotRegisteredError fails the step but workflow can catch it
  • error handling not registered StepNotRegisteredError fails the run when not caught in workflow
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KP086W4GBSRV6B9SXJV42WR7
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KP087HHBK63KE51PA142C923
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KP0888FC06CB9M4Q9TQMVD67
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KP088XNYRF5A9B89QED0BHC6
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KP08970G229A26E7GAPGB23F
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KP089CTF5VP1BC3EE7J7VDS2
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KP089F5PZZXV64ABAGHZJKKF
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KP089TW6JF62WJC5EJMGXV35
  • 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 | wrun_01KP08ABFKMMY16CPFCX12DYPB
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KP08AHFYM6FRNP0XY4ZFCNVK
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KP08AR57PV6AJQ6FFG0SHPF9
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KP08AY6CYNTEFSS7KRWP7Z23
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KP08B548J4Q1MDXSZD8W0V3T
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KP08BC9A48ENFHTHXZ5H2MB5
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KP08BKDMFKVD4H4PSF3VC71Q
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KP08BZB1G3KKNFXZ1EWX8V4P
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KP08C8KM5MA4CT5D375G9G21
  • cancelRun - cancelling a running workflow | wrun_01KP08CFJPZ52SQWZXJDRVQQBA
  • cancelRun via CLI - cancelling a running workflow | wrun_01KP08CS7ZYRHTQN3RD3WH5A7F
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KP08D5JM0BJC3XJC6H38PGA4
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KP08DTZ3VXW6H26G0MW9WGPV
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KP08E7045GG15E5TB3N1C662
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KP08EE02MTJA9SMGEV68P290
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KP08EG7MRQCS7VD29JRYW5XP
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KP08EJFSYT1A4N77Y8BJCBHX
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KP08EP27PE4X8F7KXA332EJH

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 83 0 7
✅ example 83 0 7
✅ express 83 0 7
✅ fastify 83 0 7
✅ hono 83 0 7
✅ nextjs-turbopack 88 0 2
✅ nextjs-webpack 88 0 2
✅ nitro 83 0 7
✅ nuxt 83 0 7
✅ sveltekit 83 0 7
✅ vite 83 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 76 0 14
✅ express-stable 76 0 14
✅ fastify-stable 76 0 14
✅ hono-stable 76 0 14
✅ nextjs-turbopack-canary 63 0 27
✅ nextjs-turbopack-stable 82 0 8
✅ nextjs-webpack-canary 63 0 27
✅ nextjs-webpack-stable 82 0 8
✅ nitro-stable 76 0 14
✅ nuxt-stable 76 0 14
✅ sveltekit-stable 76 0 14
✅ vite-stable 76 0 14
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 76 0 14
✅ express-stable 76 0 14
✅ fastify-stable 76 0 14
✅ hono-stable 76 0 14
✅ nextjs-turbopack-canary 63 0 27
✅ nextjs-turbopack-stable 82 0 8
✅ nextjs-webpack-canary 63 0 27
✅ nextjs-webpack-stable 82 0 8
✅ nitro-stable 76 0 14
✅ nuxt-stable 76 0 14
✅ sveltekit-stable 76 0 14
✅ vite-stable 76 0 14
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 76 0 14
✅ express-stable 76 0 14
✅ fastify-stable 76 0 14
✅ hono-stable 76 0 14
✅ nextjs-turbopack-canary 63 0 27
✅ nextjs-turbopack-stable 82 0 8
✅ nextjs-webpack-canary 63 0 27
✅ nextjs-webpack-stable 82 0 8
✅ nitro-stable 76 0 14
✅ nuxt-stable 76 0 14
✅ sveltekit-stable 76 0 14
✅ vite-stable 76 0 14
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 82 0 8
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 6 0 0
❌ mongodb 56 7 8
✅ redis-dev 6 0 0
❌ redis 56 7 8
✅ turso-dev 6 0 0
❌ turso 3 60 8
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 76 0 14
✅ e2e-local-postgres-nest-stable 76 0 14
✅ e2e-local-prod-nest-stable 76 0 14

📋 View full workflow run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 11, 2026

📊 Benchmark Results

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

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.043s (+20.3% 🔺) 1.005s (~) 0.962s 10 1.00x
💻 Local Express 0.044s (+24.6% 🔺) 1.008s (~) 0.964s 10 1.01x
🐘 Postgres Express 0.059s (-18.3% 🟢) 1.009s (-1.1%) 0.950s 10 1.36x
🐘 Postgres Nitro 0.061s (~) 1.010s (~) 0.949s 10 1.40x
workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.123s (+2.2%) 2.006s (~) 0.884s 10 1.00x
💻 Local Nitro 1.141s (+3.7%) 2.006s (~) 0.865s 10 1.02x
🐘 Postgres Nitro 1.142s (~) 2.008s (~) 0.866s 10 1.02x
🐘 Postgres Express 1.150s (~) 2.011s (~) 0.860s 10 1.02x
workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 10.893s (+2.3%) 11.023s (~) 0.129s 3 1.00x
💻 Local Express 10.919s (+2.5%) 11.022s (~) 0.103s 3 1.00x
🐘 Postgres Express 10.948s (~) 11.023s (-2.9%) 0.075s 3 1.01x
🐘 Postgres Nitro 10.978s (+1.0%) 11.020s (~) 0.042s 3 1.01x
workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 14.560s (~) 15.024s (~) 0.463s 4 1.00x
🐘 Postgres Express 14.582s (~) 15.021s (~) 0.440s 4 1.00x
💻 Local Nitro 14.931s (+4.8%) 15.028s (~) 0.097s 4 1.03x
💻 Local Express 14.936s (+4.9%) 15.029s (~) 0.093s 4 1.03x
workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 14.120s (+1.3%) 15.022s (+7.1% 🔺) 0.901s 6 1.00x
🐘 Postgres Express 14.146s (-1.3%) 14.737s (-1.9%) 0.591s 7 1.00x
💻 Local Nitro 16.555s (+10.7% 🔺) 17.030s (+10.8% 🔺) 0.475s 6 1.17x
💻 Local Express 16.762s (+12.5% 🔺) 17.030s (+13.3% 🔺) 0.269s 6 1.19x
Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.264s (~) 2.010s (~) 0.746s 15 1.00x
🐘 Postgres Express 1.273s (-1.5%) 2.009s (~) 0.736s 15 1.01x
💻 Local Express 1.521s (+4.2%) 2.005s (~) 0.484s 15 1.20x
💻 Local Nitro 1.530s (+3.6%) 2.005s (~) 0.475s 15 1.21x
Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.333s (-0.9%) 3.009s (~) 0.676s 10 1.00x
🐘 Postgres Nitro 2.352s (+0.6%) 3.010s (~) 0.658s 10 1.01x
💻 Local Nitro 2.802s (+9.4% 🔺) 3.207s (+6.6% 🔺) 0.405s 10 1.20x
💻 Local Express 3.055s (+7.5% 🔺) 3.677s (+18.3% 🔺) 0.623s 9 1.31x
Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.457s (-0.7%) 4.011s (~) 0.555s 8 1.00x
🐘 Postgres Nitro 3.471s (~) 4.010s (~) 0.539s 8 1.00x
💻 Local Express 7.894s (+11.3% 🔺) 8.521s (+6.3% 🔺) 0.627s 4 2.28x
💻 Local Nitro 8.198s (+18.0% 🔺) 8.770s (+16.7% 🔺) 0.572s 4 2.37x
Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.259s (~) 2.009s (~) 0.750s 15 1.00x
🐘 Postgres Express 1.266s (+0.8%) 2.008s (~) 0.741s 15 1.01x
💻 Local Nitro 1.639s (+8.1% 🔺) 2.074s (+3.4%) 0.434s 15 1.30x
💻 Local Express 1.918s (+30.4% 🔺) 2.391s (+19.2% 🔺) 0.473s 13 1.52x
Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.329s (~) 3.008s (~) 0.679s 10 1.00x
🐘 Postgres Express 2.346s (~) 3.010s (~) 0.665s 10 1.01x
💻 Local Nitro 2.934s (+6.1% 🔺) 3.760s (+20.9% 🔺) 0.826s 8 1.26x
💻 Local Express 3.008s (+11.5% 🔺) 3.760s (+25.0% 🔺) 0.752s 8 1.29x
Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.462s (-0.6%) 4.010s (~) 0.548s 8 1.00x
🐘 Postgres Nitro 3.486s (~) 4.011s (~) 0.525s 8 1.01x
💻 Local Express 8.554s (+11.8% 🔺) 9.025s (+12.6% 🔺) 0.471s 4 2.47x
💻 Local Nitro 8.894s (+19.4% 🔺) 9.270s (+15.6% 🔺) 0.376s 4 2.57x
workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.820s (-3.1%) 1.006s (-1.6%) 0.186s 60 1.00x
🐘 Postgres Nitro 0.841s (+3.1%) 1.023s (~) 0.182s 59 1.03x
💻 Local Express 0.994s (+39.7% 🔺) 1.255s (+22.9% 🔺) 0.261s 48 1.21x
💻 Local Nitro 1.029s (+48.0% 🔺) 1.400s (+39.4% 🔺) 0.371s 43 1.26x
workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.971s (-5.4% 🟢) 2.341s (-20.5% 🟢) 0.370s 39 1.00x
🐘 Postgres Nitro 2.024s (+4.8%) 2.637s (+25.5% 🔺) 0.613s 35 1.03x
💻 Local Nitro 2.976s (+31.7% 🔺) 3.341s (+11.1% 🔺) 0.365s 27 1.51x
💻 Local Express 2.998s (+32.7% 🔺) 3.470s (+15.4% 🔺) 0.471s 26 1.52x
workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.980s (-3.4%) 4.331s (-11.5% 🟢) 0.350s 28 1.00x
🐘 Postgres Nitro 4.085s (+5.3% 🔺) 4.852s (+18.1% 🔺) 0.767s 25 1.03x
💻 Local Nitro 9.062s (+23.2% 🔺) 9.556s (+19.2% 🔺) 0.494s 13 2.28x
💻 Local Express 9.080s (+23.9% 🔺) 9.710s (+21.2% 🔺) 0.630s 13 2.28x
workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.287s (~) 1.007s (~) 0.720s 60 1.00x
🐘 Postgres Express 0.289s (+1.5%) 1.008s (~) 0.718s 60 1.01x
💻 Local Nitro 0.570s (+0.6%) 1.004s (~) 0.434s 60 1.99x
💻 Local Express 0.575s (-3.8%) 1.004s (-1.6%) 0.429s 60 2.01x
workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.492s (-0.5%) 1.006s (~) 0.515s 90 1.00x
🐘 Postgres Nitro 0.502s (-0.5%) 1.007s (~) 0.505s 90 1.02x
💻 Local Nitro 2.514s (+3.4%) 3.009s (~) 0.494s 30 5.11x
💻 Local Express 2.554s (+3.7%) 3.009s (~) 0.455s 30 5.20x
workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.801s (-1.4%) 1.009s (-0.8%) 0.208s 119 1.00x
🐘 Postgres Nitro 0.834s (+4.0%) 1.018s (+1.0%) 0.184s 118 1.04x
💻 Local Nitro 10.995s (+6.5% 🔺) 11.572s (+5.8% 🔺) 0.576s 11 13.73x
💻 Local Express 11.082s (+4.7%) 11.575s (+5.0% 🔺) 0.493s 11 13.84x
Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.200s (+41.3% 🔺) 1.004s (~) 0.011s (+13.0% 🔺) 1.017s (~) 0.817s 10 1.00x
🐘 Postgres Nitro 0.207s (-3.5%) 1.000s (~) 0.001s (-7.7% 🟢) 1.011s (~) 0.804s 10 1.03x
💻 Local Express 0.214s (+52.1% 🔺) 1.004s (~) 0.012s (+26.6% 🔺) 1.018s (~) 0.804s 10 1.07x
🐘 Postgres Express 0.216s (+0.5%) 0.998s (~) 0.001s (-25.0% 🟢) 1.010s (~) 0.794s 10 1.08x
stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.607s (-5.3% 🟢) 1.005s (~) 0.004s (-5.3% 🟢) 1.022s (~) 0.415s 59 1.00x
🐘 Postgres Nitro 0.631s (+2.1%) 1.006s (~) 0.004s (+4.3%) 1.026s (~) 0.395s 59 1.04x
💻 Local Nitro 0.730s (+26.4% 🔺) 1.014s (~) 0.009s (-2.7%) 1.024s (~) 0.295s 59 1.20x
💻 Local Express 0.825s (+23.7% 🔺) 1.012s (~) 0.010s (+1.8%) 1.116s (~) 0.291s 54 1.36x
10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.950s (-3.0%) 1.169s (-8.4% 🟢) 0.000s (+32.7% 🔺) 1.182s (-9.6% 🟢) 0.232s 52 1.00x
🐘 Postgres Express 0.966s (-1.4%) 1.090s (-9.0% 🟢) 0.000s (-7.4% 🟢) 1.112s (-8.6% 🟢) 0.146s 54 1.02x
💻 Local Nitro 1.222s (+3.5%) 2.020s (~) 0.000s (-40.0% 🟢) 2.022s (~) 0.799s 30 1.29x
💻 Local Express 1.227s (+4.0%) 2.020s (~) 0.000s (-22.2% 🟢) 2.022s (~) 0.795s 30 1.29x
fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.818s (+2.9%) 2.105s (-1.6%) 0.000s (~) 2.114s (-1.6%) 0.296s 29 1.00x
🐘 Postgres Nitro 1.822s (+4.7%) 2.173s (+1.5%) 0.000s (-100.0% 🟢) 2.191s (+1.8%) 0.370s 28 1.00x
💻 Local Nitro 3.511s (-6.6% 🟢) 4.099s (-1.6%) 0.000s (-40.0% 🟢) 4.101s (-1.6%) 0.590s 15 1.93x
💻 Local Express 3.559s (+1.4%) 4.099s (+1.7%) 0.001s (+140.0% 🔺) 4.101s (+1.7%) 0.543s 15 1.96x

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Nitro 16/21
🐘 Postgres Express 12/21
Fastest World by Framework

Winner determined by most benchmark wins

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

Worlds:

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

📋 View full workflow run


Some benchmark jobs failed:

  • Local: success
  • Postgres: success
  • Vercel: failure

Check the workflow run for details.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Moves the SWC playground WASM crate from a standalone workspace package (packages/swc-playground-wasm) into workbench/swc-playground/wasm, and updates the playground build/dev flow to build + copy the local WASM artifacts.

Changes:

  • Relocated the Rust/WASM crate into workbench/swc-playground/wasm and updated Cargo workspace membership/path dependencies.
  • Updated the playground to build WASM via local scripts (build:wasm, prebuild, dev) and copy artifacts from wasm/pkg/.
  • Removed the old pnpm workspace package wiring (lockfile importer + changeset pre.json entry + deleted package files).

Reviewed changes

Copilot reviewed 9 out of 11 changed files in this pull request and generated no comments.

Show a summary per file
File Description
workbench/swc-playground/wasm/src/lib.rs New WASM entrypoints (transform, transformAll) that run the SWC workflow transform in-browser.
workbench/swc-playground/wasm/Cargo.toml Updated crate location + path dependency to the SWC transform crate.
workbench/swc-playground/wasm/build.js Builds the WASM package via wasm-pack from within the playground workbench.
workbench/swc-playground/scripts/copy-wasm.js Copies build outputs from the new local wasm/pkg/ location into public/wasm/.
workbench/swc-playground/package.json Adds build:wasm and invokes WASM build during prebuild/dev; removes old workspace dep.
workbench/swc-playground/.gitignore Ignores local WASM build artifacts under wasm/pkg/.
Cargo.toml Updates Cargo workspace members to include the new crate location.
pnpm-lock.yaml Removes the deleted pnpm importer/dependency entries.
.changeset/pre.json Removes the stale pre-release entry for the deleted package.
packages/swc-playground-wasm/* Deletes the old workspace package files (package.json, turbo.json).
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported
Comments suppressed due to low confidence (1)

workbench/swc-playground/wasm/build.js:92

  • runCommand only accepts a single command argument, so the { cwd: workspaceRoot } object passed here is ignored and the command always runs in the current process CWD. Either update runCommand to accept/pass exec options (including cwd), or remove the unused options argument to avoid misleading future changes (and consider avoiding embedding pkgDir into the shell command to better handle paths with spaces).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

The Vercel build environment has rustup installed but no default
toolchain configured. Add a check for this and install stable
if needed. Also check for VERCEL env var in addition to CI.
Comment thread workbench/swc-playground/wasm/build.js
After cargo install wasm-pack, the binary lives in $CARGO_HOME/bin
which may not be in PATH on the Vercel build environment. Always
add the cargo bin directory to PATH after ensuring the toolchain.
@TooTallNate TooTallNate merged commit 1fa6397 into main Apr 13, 2026
104 of 105 checks passed
@TooTallNate TooTallNate deleted the move-swc-playground-wasm-to-workbench branch April 13, 2026 19:30
ijjk pushed a commit that referenced this pull request Apr 15, 2026
* move swc-playground-wasm into workbench/swc-playground

Move the Rust/WASM source from packages/swc-playground-wasm into
workbench/swc-playground/wasm/ so it is no longer built as part of
the packages/* turbo filter in CI. The WASM build now runs as part
of the playground's own prebuild/dev scripts, avoiding Rust toolchain
failures in unrelated CI jobs.

* fix: ensure default rustup toolchain in wasm build

The Vercel build environment has rustup installed but no default
toolchain configured. Add a check for this and install stable
if needed. Also check for VERCEL env var in addition to CI.

* fix: ensure cargo bin dir is in PATH on Vercel

After cargo install wasm-pack, the binary lives in $CARGO_HOME/bin
which may not be in PATH on the Vercel build environment. Always
add the cargo bin directory to PATH after ensuring the toolchain.
@TooTallNate TooTallNate added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 16, 2026
ghost pushed a commit that referenced this pull request Apr 16, 2026
* move swc-playground-wasm into workbench/swc-playground

Move the Rust/WASM source from packages/swc-playground-wasm into
workbench/swc-playground/wasm/ so it is no longer built as part of
the packages/* turbo filter in CI. The WASM build now runs as part
of the playground's own prebuild/dev scripts, avoiding Rust toolchain
failures in unrelated CI jobs.

* fix: ensure default rustup toolchain in wasm build

The Vercel build environment has rustup installed but no default
toolchain configured. Add a check for this and install stable
if needed. Also check for VERCEL env var in addition to CI.

* fix: ensure cargo bin dir is in PATH on Vercel

After cargo install wasm-pack, the binary lives in $CARGO_HOME/bin
which may not be in PATH on the Vercel build environment. Always
add the cargo bin directory to PATH after ensuring the toolchain.
@ghost
Copy link
Copy Markdown

ghost commented Apr 16, 2026

Cherry-pick to stable had conflicts that were resolved by AI. Please review the backport PR: #1772

@ghost
Copy link
Copy Markdown

ghost commented Apr 16, 2026

Backport to stable failed — the cherry-pick could not be applied cleanly.

To resolve manually:

git fetch origin stable
git checkout stable
git cherry-pick 1fa639724180f1d193b32f8ba2c81432c65d1a70
# Fix conflicts, then:
git cherry-pick --continue
git push origin stable

TooTallNate added a commit that referenced this pull request Apr 16, 2026
* move swc-playground-wasm into workbench/swc-playground

Move the Rust/WASM source from packages/swc-playground-wasm into
workbench/swc-playground/wasm/ so it is no longer built as part of
the packages/* turbo filter in CI. The WASM build now runs as part
of the playground's own prebuild/dev scripts, avoiding Rust toolchain
failures in unrelated CI jobs.

* fix: ensure default rustup toolchain in wasm build

The Vercel build environment has rustup installed but no default
toolchain configured. Add a check for this and install stable
if needed. Also check for VERCEL env var in addition to CI.

* fix: ensure cargo bin dir is in PATH on Vercel

After cargo install wasm-pack, the binary lives in $CARGO_HOME/bin
which may not be in PATH on the Vercel build environment. Always
add the cargo bin directory to PATH after ensuring the toolchain.

Co-authored-by: Nathan Rajlich <n@n8.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stable Cherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants