sproutboat 0.35.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,32 @@ maintained going forward by the `release` skill.
10
10
 
11
11
  ## Unreleased
12
12
 
13
+ ## [0.36.0] - 2026-10-26
14
+
15
+ Built on `@sproutboat/runtime` 0.34.0, `@sproutboat/toolchain` 0.19.0 and
16
+ `@sproutboat/wire` 0.20.2.
17
+
18
+ ### Added
19
+
20
+ - **WebSockets everywhere, from compatibility date 2026-11-01.** Standalone executables and the
21
+ platform carry the client end of a 101 response (before the date they answer 501), and the
22
+ platform edge proxies the upgrade.
23
+ - **Outbound WebSockets, from 2026-11-01.** `new WebSocket(url, protocols)` and
24
+ `fetch(url, { headers: { Upgrade: "websocket" } })` (the Response's `webSocket`, then
25
+ `accept()`); returning that Response from a handler relays the client's socket to the upstream.
26
+ `ws`, `wss`, `http` and `https` URLs. `sproutboat check` and `build` accept `WebSocket(` from
27
+ that date and refuse it before. They run on standalone executables and sproutd; `sproutboat dev`
28
+ and the platform (broker transport) reject `fetch` upgrades for now.
29
+ - **Hibernation on sproutd, from 2026-11-01.** A Durable Object's hibernatable socket no longer
30
+ keeps its worker running: the worker is reaped while the socket idles, the auto-response is
31
+ answered without waking it, and a message or close starts a worker that constructs the object
32
+ again with `getWebSockets()` as it was.
33
+
34
+ ### Changed
35
+
36
+ - `types/sproutboat.d.ts` and the README describe the above. The toolchain moves to 0.19.0, so
37
+ compiled apps get a new fingerprint and rebuild once.
38
+
13
39
  ## [0.35.0] - 2026-10-26
14
40
 
15
41
  Built on `@sproutboat/runtime` 0.33.0, `@sproutboat/toolchain` 0.18.0 and
package/README.md CHANGED
@@ -168,8 +168,9 @@ Windows, build from WSL.
168
168
  ## Limits
169
169
 
170
170
  Capability profile `http-sync-v0`: one synchronous `fetch` handler, optional
171
- `scheduled` / `queue` handlers. WebSockets (from compatibility date 2026-10-30) need
172
- a host that carries them (sproutd). Binding values are
171
+ `scheduled` / `queue` handlers. WebSockets (from compatibility date 2026-10-30; standalone
172
+ and platform sprouts from 2026-11-01) and outbound `new WebSocket(url)` (2026-11-01) are
173
+ supported. Binding values are
173
174
  text/JSON, one at a time over a 32 MiB loopback frame. Sprout uploads cap at
174
175
  16 MiB, assets at 64 MiB / 4096 files.
175
176
 
package/SURFACE.md CHANGED
@@ -3,7 +3,7 @@
3
3
  > Generated by `src/surface.test.ts` from `src/surface.ts` + the pinned
4
4
  > toolchain constants. Do not edit by hand — run `UPDATE_SURFACE=1 bun test`.
5
5
 
6
- **Package:** `sproutboat` 0.35.0
6
+ **Package:** `sproutboat` 0.36.0
7
7
 
8
8
  ## Commands
9
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sproutboat",
3
- "version": "0.35.0",
3
+ "version": "0.36.0",
4
4
  "description": "Wrangler-shaped CLI for Sproutboat. Deploys workers to any control plane via --api-url / SPROUTBOAT_API_URL.",
5
5
  "keywords": [
6
6
  "cli",
@@ -64,9 +64,9 @@
64
64
  "@sproutboat/artifact": "^0.3.0",
65
65
  "@sproutboat/assets": "^0.3.0",
66
66
  "@sproutboat/config": "^0.6.0",
67
- "@sproutboat/runtime": "^0.33.0",
68
- "@sproutboat/toolchain": "^0.18.0",
69
- "@sproutboat/wire": "^0.20.1"
67
+ "@sproutboat/runtime": "^0.34.0",
68
+ "@sproutboat/toolchain": "^0.19.0",
69
+ "@sproutboat/wire": "^0.20.2"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@oxlint/plugins": "1.85.0",
@@ -78,10 +78,10 @@
78
78
  "typescript": "7.0.2"
79
79
  },
80
80
  "optionalDependencies": {
81
- "@sproutboat/cli-darwin-arm64": "0.35.0",
82
- "@sproutboat/cli-darwin-x64": "0.35.0",
83
- "@sproutboat/cli-linux-arm64": "0.35.0",
84
- "@sproutboat/cli-linux-x64": "0.35.0"
81
+ "@sproutboat/cli-darwin-arm64": "0.36.0",
82
+ "@sproutboat/cli-darwin-x64": "0.36.0",
83
+ "@sproutboat/cli-linux-arm64": "0.36.0",
84
+ "@sproutboat/cli-linux-x64": "0.36.0"
85
85
  },
86
86
  "engines": {
87
87
  "node": ">=18"
package/src/main.ts CHANGED
@@ -235,7 +235,7 @@ async function readProject(directory = process.cwd()) {
235
235
  } catch (cause) {
236
236
  fail(cause instanceof BundleError ? cause.message : String(cause));
237
237
  }
238
- const supported = validateHttpSyncSource(bundle.code);
238
+ const supported = validateHttpSyncSource(bundle.code, project.config.compatibility_date);
239
239
  if (!supported.ok) fail(supported.errors.join("\n"));
240
240
  return { ...project, sourcePath, source, bundle };
241
241
  }
@@ -275,7 +275,10 @@ declare global {
275
275
  /**
276
276
  * The WebSocket hibernation API, from compatibility date 2026-10-30. Messages and
277
277
  * closes on an accepted socket go to the class's `webSocketMessage` and
278
- * `webSocketClose`. On sproutd an open socket keeps the app's worker running.
278
+ * `webSocketClose`. On sproutd an open socket keeps the app's worker running before
279
+ * compatibility date 2026-11-01; from it the worker is reaped while the socket idles and
280
+ * the object is constructed again (with `getWebSockets()` as it was) when a message or
281
+ * close arrives.
279
282
  */
280
283
  acceptWebSocket(ws: WebSocket, tags?: string[]): void;
281
284
  getWebSockets(tag?: string): WebSocket[];
@@ -289,9 +292,12 @@ declare global {
289
292
  /**
290
293
  * From compatibility date 2026-10-30, as in workerd. Return the client end in a
291
294
  * `new Response(null, { status: 101, webSocket: client })` and talk on the server end.
292
- * Client sockets are carried by sproutd; a standalone or platform sprout answers a 101
293
- * with 501 for now. Inbound messages are capped at 32 MiB (1009 above it). Outbound
294
- * WebSockets (`new WebSocket(url)`) are not supported.
295
+ * Client sockets are carried by sproutd, and from compatibility date 2026-11-01 by
296
+ * standalone and platform sprouts too (before it they answer a 101 with 501). Inbound
297
+ * messages are capped at 32 MiB (1009 above it). From 2026-11-01 `new WebSocket(url,
298
+ * protocols)` and `fetch(url, { headers: { Upgrade: "websocket" } })` connect out; the
299
+ * Response's `webSocket` needs `accept()`, and returning it from a handler relays the client.
300
+ * Outbound sockets need the embedded transport (standalone, sproutd), not `sproutboat dev`.
295
301
  */
296
302
  class WebSocketPair {
297
303
  0: WebSocket;