| 1 | --- |
| 2 | title: 2.0.0-beta.50 - Reliable Dev Ports |
| 3 | date: 2026-06-01T22:00:00Z |
| 4 | category: release |
| 5 | excerpt: v2.0.0-beta.50 is a two-fix patch — reliable Worker/Vite port assignment in `alchemy dev`, and a fix for binding an `Output` value (like another Worker's URL) into a Worker's `env` without a deploy-time `RuntimeContext` crash. |
| 6 | --- |
| 7 | |
| 8 | `v2.0.0-beta.50` is a small patch release with two Cloudflare |
| 9 | fixes, both from |
| 10 | **[John Royal](https://github.com/jdrydn)**. |
| 11 | |
| 12 | ## Reliable Worker/Vite ports in `alchemy dev` |
| 13 | |
| 14 | Port-conflict detection in `cloudflare-runtime` wasn't firing |
| 15 | reliably, and it was worst with Vite. beta.50 has Vite listen on |
| 16 | a random port and places a `WorkerProxy` in front of it, so ports |
| 17 | are assigned deterministically and conflicts are actually |
| 18 | detected. The conflict detection and `WorkerProxy` implementation |
| 19 | in `cloudflare-runtime` were both tightened up along the way. |
| 20 | ([#513](https://github.com/alchemy-run/alchemy/pull/513)) |
| 21 | |
| 22 | ## Binding an `Output` into a Worker's `env` |
| 23 | |
| 24 | Passing an `Output` value — like another Worker's URL — into a |
| 25 | Worker's `env` crashed at deploy time with |
| 26 | `Service not found: RuntimeContext`: |
| 27 | |
| 28 | ```typescript |
| 29 | const backend = yield* Cloudflare.Worker(/* ... */); |
| 30 | |
| 31 | const website = yield* Cloudflare.Website.Vite("Website", { |
| 32 | rootDir: path.resolve(import.meta.dirname, "frontend"), |
| 33 | env: { |
| 34 | VITE_API_URL: backend.url.as<string>(), // crashed during deploy |
| 35 | }, |
| 36 | }); |
| 37 | ``` |
| 38 | |
| 39 | `bindWorkerAsyncBindings` was `yield*`ing the value, which called |
| 40 | `.bind()` on the `Output` prematurely — and `bind()` needs |
| 41 | `RuntimeContext`, which doesn't exist at deploy time. beta.50 |
| 42 | checks whether the value is an `Output` before yielding, so |
| 43 | output references thread through to runtime as intended. |
| 44 | ([#514](https://github.com/alchemy-run/alchemy/pull/514)) |
| 45 | |
| 46 | ## Where to go next |
| 47 | |
| 48 | - [CHANGELOG](https://github.com/alchemy-run/alchemy/blob/main/CHANGELOG.md#v200-beta50) |
| 49 | - [Compare v2.0.0-beta.49 → v2.0.0-beta.50](https://github.com/alchemy-run/alchemy/compare/v2.0.0-beta.49...v2.0.0-beta.50) |