NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2106 most downloaded on npm
The missing standard library for TypeScript, for writing production-grade software.
Last release 4 days ago
01 Oct 2026
Ships on a steady schedule
a new release about every 9 days
Rarely documented
notes for 2 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
485 releases · first in 2022
One column per quarter.
Both servers now accept a websocket option that is forwarded to the underlying implementation, with the wiring/lifecycle options the server manages ex
#6723 081f4d8 Thanks @tim-smart! - add platform literal to HttpPlatform
#6802 f1bc827 Thanks @tim-smart! - Allow configuring cluster RPC serialization buffer limits.
#6898 c0a1534 Thanks @tim-smart! - Add HTTP response compression support. Node.js, Bun, and Deno use asynchronous
node:zlib one-shot compression for byte-array bodies, preserving an exact
Content-Length; stream and raw bodies remain streaming transforms.
#6680 23e176a Thanks @tim-smart! - Fix worker runner disconnect notifications and event listener cleanup.
#6691 6a5e86f Thanks @t3dotgg! - Allow configuring the WebSocket server in NodeHttpServer and BunHttpServer.
Both servers now accept a websocket option that is forwarded to the underlying implementation, with the wiring/lifecycle options the server manages excluded from the type:
// Node: forwarded to the `ws` WebSocketServer
NodeHttpServer.layer(() => createServer(), {
port: 3000,
websocket: { perMessageDeflate: true },
});
// Bun: merged into Bun.serve's websocket handler
BunHttpServer.layer({
port: 3000,
websocket: { perMessageDeflate: true },
});
#6828 48f22a7 Thanks @tim-smart! - Use layered storage for Context, making Context.add O(1) and eliminating per-request service map clones in the HTTP servers. Docgen now omits @internal option properties from generated signatures.
#6813 705d1f1 Thanks @tim-smart! - Optimize Node HTTP streaming responses and ensure HEAD completion and stream backpressure are handled once.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6715 75f340e Thanks @tim-smart! - Add a Deno Terminal implementation and keep NodeTerminal input readers alive until stdin ends under Deno.
#6914 0b4a3c4 Thanks @spencerbeggs! - NodePath: layerPosix and layerWin32 now convert between paths and file: URLs using their own platform flavor instead of the host's.
#6679 9f02491 Thanks @tim-smart! - NodeTerminal: preserve buffered input across sequential readLine calls
#6676 381c141 Thanks @chenxin-yan! - NodeTerminal: end key input and fail readLine with QuitError at stdin EOF instead of hanging
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
#6696 b6d3e67 Thanks @tim-smart! - remove file descriptor type
#6705 7bde6cc Thanks @tylergibbs1! - Restore the recursive option for FileSystem.watch, with non-recursive watching as the default.
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6857 79db8e5 Thanks @fubhy! - Fix IndexedDB-backed key-value writes to wait for transaction commit before reporting success.
#6852 ef6eca7 Thanks @fubhy! - Fix IndexedDB query range, ordering, streaming, and transaction semantics.
#6683 5f87bc7 Thanks @tim-smart! - Fix BrowserCrypto.randomBytes for requests larger than the Web Crypto per-call limit.
#6680 23e176a Thanks @tim-smart! - Fix worker runner disconnect notifications and event listener cleanup.
#6854 39ed94a Thanks @fubhy! - Abort IndexedDB versionchange transactions when schema migrations fail.
#6659 cc27b19 Thanks @tim-smart! - Preserve prototype accessors when code is compiled with loose object spread transforms.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6904 0d83916 Thanks @fubhy! - Isolate delta metric baselines for each registered metric reader
#6902 ab0859b Thanks @fubhy! - Preserve trace state and locality when adapting active OpenTelemetry parent contexts.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6781 acee269 Thanks @gcanti! - Deduplicate equivalent fallback definitions when compiling JSON Schema, and reconstruct only definitions reachable from multi-document roots.
Remove SchemaMultiDocument and fromSchemaMultiDocument; multi-document import and revival now return the ordered root schemas directly.
Stop the OpenAPI generator from emitting component schemas that are not reachable from a generated root.
#6777 8e7c706 Thanks @tim-smart! - Bound pending SSE decoder state with a configurable maximum event size.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
#6770 f0c8151 Thanks @tim-smart! - Decode Effect SSE event schemas as complete events, including reserved failure events, in generated HTTP clients.
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6672 83d571c Thanks @andrskr! - Scope useAtomSuspense promises to their atom registry so concurrent registries resolve independently.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6777 8e7c706 Thanks @tim-smart! - Bound pending SSE decoder state with a configurable maximum event size.
#6921 4686265 Thanks @fubhy! - Emit specialized OpenAI tool results only once.
#6722 9344742 Thanks @mrtdurdenthe2! - Fix OpenAI stable web search response decoding by preserving the provider action in tool call parameters.
#6675 4cc95ae Thanks @danieljvdm! - Accept image generation-specific lifecycle statuses and nullable results in OpenAI response items.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
#6920 da10211 Thanks @fubhy! - Terminate OpenAI HTTP and WebSocket response streams when a response.failed event arrives.
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6667 5283841 Thanks @tim-smart! - Surface parsed chat completion stream events that do not match the expected schema as UnknownChatCompletionEvent.
#6777 8e7c706 Thanks @tim-smart! - Bound pending SSE decoder state with a configurable maximum event size.
#6882 25a029c Thanks @tim-smart! - Decode streaming and non-streaming tool call parameters with the provider-facing OpenAI schema codec.
#6719 20b9660 Thanks @IMax153! - Group consecutive tool calls into one assistant message when using Chat Completions APIs.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6777 8e7c706 Thanks @tim-smart! - Bound pending SSE decoder state with a configurable maximum event size.
#6918 a913136 Thanks @fubhy! - Fix malformed JSON in streamed Anthropic code-execution tool parameters.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6793 b2f95a9 Thanks @tim-smart! - Add Semaphore.takeIfAvailable for non-blocking manual permit acquisition.
#6693 aeba0c8 Thanks @lloydrichards! - Expose object-shaped Toolkit success schemas as MCP tool output schemas.
#6807 d0f1a22 Thanks @alecbuffi! - Separate wall-clock timestamps from monotonic elapsed time.
Clock.Clock now requires monotonicTimeNanosUnsafe() and monotonicTimeNanos for measuring elapsed time. Custom Clock implementations must provide both members. The live clock's currentTimeNanos now re-anchors its high-resolution Unix wall-clock timestamp when it drifts from Date.now(), while Effect.timed, duration metric tracking, and Sink.withDuration use monotonic time so wall-clock corrections do not distort elapsed durations.
#6697 e56cd8f Thanks @schickling-assistant! - Add a configurable filter for HTTP client request and response header span attributes.
#6883 f77c120 Thanks @gcanti! - Add support for converting JSON Schema documents to Draft-04, preserve literal $ref values, $ref sibling constraints, not, readOnly, and writeOnly in Draft-07 conversions, correct the Draft-07 meta-schema URI, and prevent OpenAPI component-key collisions during conversion.
#6564 04fd44a Thanks @AVtheking! - Run shared-table SQL persistence expiration cleanup in indexed, bounded background batches.
#6911 b74333d Thanks @fubhy! - Update existing HashRing nodes when adding a value with the same primary key.
#6909 1c40b28 Thanks @AlfGoto! - Add DateTime.toEpochSeconds and DateTime.fromEpochSeconds for converting date-time values to and from Unix epoch seconds.
#6693 aeba0c8 Thanks @lloydrichards! - MCP tool handler defects now return a stable internal error without exposing defect details.
#6874 b3901d2 Thanks @fubhy! - Fix Equal.equals and Hash.hash to handle invalid dates and DataView values without throwing.
#6869 4a0984a Thanks @fubhy! - Fix SQL-backed Persistence getMany to preserve duplicate key positions.
#6868 fffd88b Thanks @fubhy! - Ensure clearing an empty Redis-backed persistence store succeeds.
#6903 f3f6c1e Thanks @fubhy! - Preserve equals signs in inline CLI option values after the first separator.
#6876 ef07642 Thanks @fubhy! - Fix Sink.reduceWhileArray applying its reducer more than once per input array.
#6802 f1bc827 Thanks @tim-smart! - Cap incomplete RPC frames buffered by the NDJSON and MessagePack streaming decoders, and close socket transports when the limit is exceeded.
#6693 aeba0c8 Thanks @lloydrichards! - RPC servers now suppress responses after a client cancels an in-flight request.
#6723 081f4d8 Thanks @tim-smart! - add platform literal to HttpPlatform
#6788 5287b24 Thanks @gcanti! - Refine the ConfigProvider interface so lookup absence uses undefined and
path transformation is provider behavior.
ConfigProvider.load and the lookup function accepted by
ConfigProvider.make now return Node | undefined. Use undefined when a path
does not exist and return the Node directly when it does.
ConfigProvider now exposes mapInput as a capability. The exported
ConfigProvider.mapInput combinator delegates to it, preserving transformation
order and composition through orElse without requiring provider
representation state.
#6863 13d31cf Thanks @fubhy! - Decode percent-encoded OTLP environment header values.
#6781 acee269 Thanks @gcanti! - Deduplicate equivalent fallback definitions when compiling JSON Schema, and reconstruct only definitions reachable from multi-document roots.
Remove SchemaMultiDocument and fromSchemaMultiDocument; multi-document import and revival now return the ordered root schemas directly.
Stop the OpenAPI generator from emitting component schemas that are not reachable from a generated root.
#6717 31170c1 Thanks @IMax153! - Document that CommandOptions.extendEnv defaults to false and that providing env without enabling it replaces the inherited child environment.
#6657 205ebc7 Thanks @tim-smart! - Use cancellable microtasks when dispatching yielded work from synchronous Effect runs.
#6661 ed0ebf8 Thanks @tim-smart! - Fix hydrated atoms with Atom.withReactivity to refresh after reactive mutations.
#6665 a3fd084 Thanks @tim-smart! - Fix HttpRouter.toWebHandler context inference for services provided by the application layer.
#6681 ee29ddf Thanks @tim-smart! - Add Web Stream interoperability for Channel and Sink, plus byte limiting and ArrayBuffer collection for Stream.
#6730 6086309 Thanks @tim-smart! - Support replaying initial WebSocket messages and normalize ArrayBuffer frames to Uint8Array.
#6763 4a57af2 Thanks @tim-smart! - Validate cookie names, domains, and paths before constructing or serializing cookies.
#6771 660875b Thanks @tim-smart! - Strip credential headers on cross-origin HTTP redirects and align redirected request methods with fetch.
#6777 8e7c706 Thanks @tim-smart! - Bound pending SSE decoder state with a configurable maximum event size.
#6772 5f63adb Thanks @tim-smart! - Reject empty, . and .. keys in file-backed key-value stores.
#6773 053bc42 Thanks @tim-smart! - Escape terminal control characters in unstable CLI error output.
#6898 c0a1534 Thanks @tim-smart! - Add HTTP response compression support. Node.js, Bun, and Deno use asynchronous
node:zlib one-shot compression for byte-array bodies, preserving an exact
Content-Length; stream and raw bodies remain streaming transforms.
#6859 f1e3a37 Thanks @fubhy! - Fix String.snakeToCamel and String.snakeToPascal to return an empty string for empty input.
#6746 cedb01a Thanks @fubhy! - Prefer explicit OTLP resource configuration over environment configuration.
#6677 1747440 Thanks @tim-smart! - Expose runtime schemas for AI prompt parts and message-specific part unions.
#6693 aeba0c8 Thanks @lloydrichards! - MCP servers now advertise logging and honor each client's selected log level when sending log notifications.
#6693 aeba0c8 Thanks @lloydrichards! - Preserve MCP sampling request preferences and response content.
#6878 b4f1ee2 Thanks @fubhy! - Fix Array index operations handling NaN and fractional indexes.
#6751 a4757f1 Thanks @tim-smart! - Fix Atom dependency tracking and re-entrant invalidation during batch rebuilds.
#6870 cd122b9 Thanks @fubhy! - Ensure BigInt.gcd and BigInt.lcm return non-negative values and handle zero operands in BigInt.lcm.
#6844 5de588b Thanks @fubhy! - Prevent an interrupted cache lookup from removing a newer value written with Cache.set.
#6879 3895b9c Thanks @fubhy! - Preserve failure annotations when mapping errors with Cause.map.
#6820 89ce5f3 Thanks @fubhy! - Fix ChannelSchema.decodeUnknown to accept unknown input chunks while keeping ChannelSchema.decode typed to the schema's encoded input.
#6899 985de09 Thanks @fubhy! - Ensure Chunk.take and Chunk.drop produce valid chunks for fractional counts.
#6579 9800e3a Thanks @marbemac! - Scope cluster reply serialization failures and peer-delivered defects to their own request instead of the whole runner connection
#6800 4dc35f6 Thanks @tim-smart! - Fix persisted cluster stream recovery when SQL drivers return a null reply kind.
#6814 e8eb62b Thanks @gcanti! - Preserve provider input evidence when Config.orElse recovers a configuration failure.
#6873 ecd9993 Thanks @fubhy! - Propagate the FiberSet.runtime interruption option when registering managed fibers.
#6872 5ab9c08 Thanks @fubhy! - Fix Formatter.format handling of shared references and ensure Formatter.formatJson always returns valid JSON.
#6867 f5cf965 Thanks @fubhy! - Remove stale content-length headers when replacing an HTTP client request body with one of unknown length.
#6924 a94cbed Thanks @fubhy! - Ignore uniqueItems when set to false while importing JSON Schema documents.
#6871 9160ad7 Thanks @fubhy! - Fix LayerMap preload options so configured entries are acquired during construction.
#6693 aeba0c8 Thanks @lloydrichards! - MCP completion handlers now receive resolved argument context, and completion responses are limited to one hundred values.
#6693 aeba0c8 Thanks @lloydrichards! - MCP servers now return protocol errors for invalid tool, prompt, completion, resource, and logging requests.
#6901 52494be Thanks @fubhy! - Prevent distinct metric attribute sets from sharing registry state.
#6822 5441c8e Thanks @fubhy! - Fix Metric.isMetric to recognize metrics using their current runtime brand.
#6821 c9b56ab Thanks @fubhy! - Fix Metric.linearBoundaries to space boundaries by the configured width.
#6847 8ef7257 Thanks @fubhy! - Fix MutableList.prepend on empty lists and handle non-positive toArrayN bounds.
#6865 1519406 Thanks @fubhy! - Fix OtlpResource to decode percent-encoded environment attributes and preserve bigint precision.
#6805 9716990 Thanks @tim-smart! - Prevent replay-enabled PubSubs from retaining values beyond each subscription's replay window.
#6711 733f75b Thanks @andrskr! - Preserve serialization and retention metadata on reactive AtomRpc and AtomHttpApi queries.
#6855 48155c8 Thanks @fubhy! - Fix Schedule.during to recur until the configured duration has elapsed.
#6712 951d06b Thanks @gcanti! - Make Schema.isPattern deterministic for regular expressions with global or sticky flags.
#6782 d767b65 Thanks @gcanti! - SchemaRepresentation: generate references from encoded AST identity, suffix colliding identifiers instead of throwing, and preserve sharing across property-key context. This avoids false-positive duplicate identifier errors while keeping referentially distinct schemas addressable; generated fallback definitions now use the clearer Encoded suffix.
#6704 5d52d9d Thanks @gcanti! - Fix Union candidate selection for recovering middleware and suspended members.
#6848 f4151e1 Thanks @fubhy! - Keep the current ScopedRef resource alive when acquiring its replacement fails.
#6910 e02fbb6 Thanks @z4p5a9! - Fix Semaphore.withPermits leaking permits when interrupted between acquiring them and installing their release.
#6877 724ce09 Thanks @tim-smart! - Fix Stream.aggregateWithin and Stream.groupedWithin retaining fiber continuations on every schedule tick while upstream is idle.
#6889 dbe91f6 Thanks @tim-smart! - Fix Stream.withExecutionPlan retry limits resetting after partial stream emissions.
#6823 4c008d2 Thanks @fubhy! - Fix data-first dispatch for Stream.mapAccumArrayEffect.
#6900 b650832 Thanks @fubhy! - Ensure Stream.range emits the full range when the chunk size is zero.
#6849 b46c92f Thanks @fubhy! - Fix SubscriptionRef.getAndUpdateSome to return the current value when no update is selected.
#6808 5335797 Thanks @fubhy! - Fix SubscriptionRef.getAndUpdateEffect to execute the effectful update.
#6862 4b3460d Thanks @fubhy! - Fix Trie.longestPrefixOf returning a valued sibling that does not match the input key.
#6856 6301fd7 Thanks @fubhy! - Fix Trie to preserve entries whose value is undefined.
#6850 aebc5c6 Thanks @fubhy! - Fix TxPubSub.publishAll dropping values from one-shot iterables when a transaction retries.
#6851 52b2d7b Thanks @fubhy! - Ensure TxQueue.poll and TxQueue.clear complete a closing queue after draining its buffered items.
#6853 eec5744 Thanks @fubhy! - Fix TxQueue.offerAll to preserve one-shot iterables across transaction retries and repeated runs.
#6783 24e0e93 Thanks @tim-smart! - Propagate trace context through persisted cluster workflow requests.
#6693 aeba0c8 Thanks @lloydrichards! - MCP servers now return standard JSON-RPC errors for malformed requests, unknown methods, and invalid parameters.
#6693 aeba0c8 Thanks @lloydrichards! - MCP servers now enforce revision-specific JSON-RPC batch and protocol-version header requirements.
#6707 1a7ce81 Thanks @gcanti! - Mark Schema.UnknownFromJsonString as internal and remove its type-level interface. Use Schema.fromJsonString(Schema.Unknown) instead. Add reviver, callback or array replacer, and space options to Schema.fromJsonString, and make SchemaTransformation.fromJsonString a configurable factory.
#6828 48f22a7 Thanks @tim-smart! - Use layered storage for Context, making Context.add O(1) and eliminating per-request service map clones in the HTTP servers. Docgen now omits @internal option properties from generated signatures.
#6780 c96b7f6 Thanks @tim-smart! - Include typed tool output schemas in MCP tools/list responses.
#6733 6d2a942 Thanks @gcanti! - Avoid validating Schema.Class fields twice when decoding.
#6659 cc27b19 Thanks @tim-smart! - Preserve prototype accessors when code is compiled with loose object spread transforms.
#6912 8f9499f Thanks @gcanti! - Remove actual fields from every SchemaIssue variant, together with
SchemaIssue.getActual, SchemaIssue.redact, and Schema.redact. Built-in
formatters now use static messages that do not interpolate rejected input,
while paths, AST metadata, union successes, and user-provided messages and
annotations are preserved unchanged.
Runtime performance was measured across the 16 Effect fixtures in the
schema-benchmarks suite. These are the scenarios used for the cross-library
comparison with Valibot and Zod. The paired HEAD-versus-main run classified 3
fixtures as improvements, 0 as regressions, and 13 as inconclusive. Negative
changes are faster. Absolute library values are medians from the same
cross-library run; — means that the corresponding adapter does not expose
that scenario.
| Scenario | Effect (ns/op) | Valibot (ns/op) | Zod (ns/op) | HEAD vs main | Classification |
|---|---|---|---|---|---|
initialization-schema |
108191.30 | 30549.81 | 212715.66 | -0.92% | inconclusive |
initialization-decoder |
109796.34 | — | — | +1.98% | inconclusive |
validation-valid |
5221.80 | 5070.81 | — | +2.06% | inconclusive |
validation-invalid |
1279.77 | 234.92 | — | +0.59% | inconclusive |
parsing-all-valid |
5144.58 | 5192.19 | 7176.19 | -3.79% | inconclusive |
parsing-all-invalid |
7594.49 | 15236.82 | 37780.35 | -5.94% | improvement |
parsing-first-valid |
5188.33 | 5135.75 | — | -1.49% | inconclusive |
parsing-first-invalid |
1330.82 | 243.64 | — | +1.01% | inconclusive |
standard-all-valid |
5722.01 | 5200.05 | 3801.26 | -1.78% | inconclusive |
standard-all-invalid |
12024.65 | 15528.50 | 30982.17 | -7.78% | improvement |
standard-first-valid |
5655.33 | — | — | +3.84% | inconclusive |
standard-first-invalid |
2001.69 | — | — | -4.56% | inconclusive |
codec-typed-encode |
342.59 | — | 39.29 | -7.62% | inconclusive |
codec-typed-decode |
418.78 | — | 50.14 | -10.89% | improvement |
codec-unknown-encode |
328.38 | — | — | -5.55% | inconclusive |
codec-unknown-decode |
347.35 | — | — | -5.25% | inconclusive |
#6692 3eeea73 Thanks @schickling-assistant! - Fix unstable CLI subcommands dropping operands after the -- end-of-options terminator.
#6625 0a532e5 Thanks @lloydrichards! - Add adapter-valued MCP server protocol declarations, route requests through the selected protocol before schema decoding, and add built-in support for MCP 2025-06-18.
#6864 f398149 Thanks @fubhy! - Honor HTTP-date Retry-After values when retrying OTLP exports.
#6693 aeba0c8 Thanks @lloydrichards! - MCP Streamable HTTP servers now validate content negotiation, session lifecycle, negotiated protocol versions, and browser Origins before dispatching requests.
#6824 ace903e Thanks @tim-smart! - Skip HTTP server span attribute collection when the span is not sampled.
#6814 e8eb62b Thanks @gcanti! - Refine Config loading and absence semantics. Config.schema now derives a provider loading policy from the encoded StringTree schema, materializes mixed-shape union members independently, and leaves separated scalar parsing to Config.Array and Config.Record. Schemas whose canonical StringTree encoding remains opaque, such as Schema.Any, Schema.Unknown, or Schema.Json, are rejected when the config is constructed; use a concrete shape or Schema.fromJsonString(Schema.Json) for scalar JSON. Missing or unavailable representations are decoded as undefined before Config.withDefault and Config.option decide absence. Partially supplied Config.all groups are rejected, successful values such as undefined and explicitly present empty structures are preserved, and the internal path prefix is removed from the public Config.parse signature.
#6693 aeba0c8 Thanks @lloydrichards! - MCP servers now refresh roots after capable clients report that their root list changed.
#6828 48f22a7 Thanks @tim-smart! - Remove Context.mutate and Context.getReferenceUnsafe. Context updates now use overlays, and Context.get resolves reference defaults.
#6649 d48506d Thanks @gcanti! - Remove the keyValueCombiner option from Schema.Record and the corresponding
SchemaAST.KeyValueCombiner and SchemaAST.IndexSignature.merge APIs.
For transformed key collisions, sequential parsing keeps the later selected
value, while concurrent parsing keeps the value applied last in completion
order.
#6693 aeba0c8 Thanks @lloydrichards! - MCP servers now support session-scoped resource subscriptions on transports that can deliver server notifications and filter resource updates by each client's subscribed URIs.
#6649 d48506d Thanks @gcanti! - Preserve untouched Result branches by identity in Result.map and
Result.mapError.
#6649 d48506d Thanks @gcanti! - Improve Schema parsing, schema construction and adapter runtime performance
while preserving current parsing behavior.
The effect@beta, Valibot and Zod timing cases from
open-circle/schema-benchmarks
were reproduced as a dedicated runtimeperf suite. The table includes every
case exposed by each upstream adapter; — means that the adapter does not
provide that benchmark.
Effect main (45e781088) and the branch based on d775bf4b2 were compared
with five paired processes per case, 150 ms measurement time and 50 ms warmup.
The two initially inconclusive Effect cases were repeated with 15 paired
processes, 500 ms measurement time and 150 ms warmup. Valibot and Zod values
use five processes, 300 ms measurement time and 100 ms warmup. Environment:
Node v24.12.0, macOS arm64, Apple M3.
Zod parsing uses safeParse with { jitless: true }; its Standard Schema and
codec cases use the corresponding native adapter APIs. All values are median
microseconds per operation (µs/op), lower is better. Cross-library values are
diagnostic because they are independent rather than paired measurements.
| Scenario | Effect main |
Effect branch | Valibot | Zod 4 | Delta | 95% CI | Classification |
|---|---|---|---|---|---|---|---|
| Initialize schema | 137.28 | 118.23 | 40.24 | 318.56 | -12.69% | -21.02% to -5.35% | improvement |
| Initialize schema and decoder | 144.81 | 130.50 | — | — | -10.88% | -14.22% to -3.29% | improvement |
| Validate valid product | 8.478 | 5.415 | 5.63 | — | -35.18% | -41.65% to -32.83% | improvement |
| Validate invalid product | 1.516 | 1.348 | 0.2431 | — | -11.59% | -13.81% to -6.31% | improvement |
| Parse valid product, all errors | 8.360 | 5.366 | 5.22 | 7.16 | -36.28% | -54.41% to -31.67% | improvement |
| Parse invalid product, all errors | 11.302 | 9.100 | 15.70 | 41.58 | -19.42% | -21.32% to -13.12% | improvement |
| Parse valid product, first error | 8.201 | 5.294 | 5.37 | — | -35.44% | -37.75% to -34.59% | improvement |
| Parse invalid product, first error | 1.510 | 1.352 | 0.2572 | — | -10.51% | -12.52% to -9.53% | improvement |
| Standard Schema valid, all errors | 9.284 | 5.935 | 5.35 | 3.83 | -35.96% | -53.29% to -33.49% | improvement |
| Standard Schema invalid, all errors | 16.718 | 15.203 | 16.51 | 32.85 | -11.31% | -13.97% to -7.65% | improvement |
| Standard Schema valid, first error | 8.889 | 5.843 | — | — | -34.17% | -35.13% to -33.94% | improvement |
| Standard Schema invalid, first error | 2.435 | 2.244 | — | — | -8.44% | -12.76% to -4.82% | improvement |
| Typed codec encode | 0.4692 | 0.3420 | — | 0.0405 | -27.60% | -32.35% to -22.50% | improvement |
| Typed codec decode | 0.5191 | 0.3762 | — | 0.0463 | -27.19% | -34.75% to -22.71% | improvement |
| Unknown codec encode | 0.4910 | 0.3472 | — | — | -28.58% | -30.42% to -27.59% | improvement |
| Unknown codec decode | 0.5061 | 0.3637 | — | — | -29.26% | -29.82% to -21.70% | improvement |
Overall Effect classification: 16 improvements and no regressions.
#6896 52262be Thanks @tim-smart! - Bind event-log read and write requests to the identities authenticated on their RPC connection.
#6735 1284aa1 Thanks @gcanti! - Fix three issues in the public Optic API:
Iso and Prism setters no longer try to read a source value before writing.notUndefined on an Optional now returns an Optional, because writing can still fail.node property is no longer exposed by public optic types.#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
#6875 979ce39 Thanks @fubhy! - Fix protobuf serialization of negative signed integers to use ten-byte two's-complement varints.
#6696 b6d3e67 Thanks @tim-smart! - remove file descriptor type
#6860 adf6c6c Thanks @fubhy! - Honor custom split and strip regular expressions passed to String.noCase.
#6866 7314d60 Thanks @fubhy! - Fix partial file-backed HTTP bodies to report the selected byte range as their content length.
#6693 aeba0c8 Thanks @lloydrichards! - MCP HTTP servers now reject requests sent before initialization with the required lifecycle response.
#6759 1acbd8b Thanks @tim-smart! - Harden JSON-RPC wire message classification against inherited properties.
#6705 7bde6cc Thanks @tylergibbs1! - Restore the recursive option for FileSystem.watch, with non-recursive watching as the default.
#6798 a959a8b Thanks @tim-smart! - Namespace PostgreSQL advisory shard locks by the SqlRunnerStorage table prefix.
This changes the advisory-lock protocol. PostgreSQL clusters using advisory locks require a full cluster stop before upgrading; a rolling deploy is unsafe because old and new runners use different lock keys and can both acquire the same shard.
83c7497 Thanks @tim-smart! - Require Vitest 4.1 or later and read suite state from TestRunner, removing the direct @vitest/runner import and support for Vitest 3 and 4.0.#6843 4a394bd Thanks @fubhy! - Ensure throws and throwsAsync fail when the supplied operation returns or resolves without throwing.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6923 34ced69 Thanks @fubhy! - Close OPFS access handles when the SQLite worker shuts down.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6908 8a45ec3 Thanks @fubhy! - Preserve fractional JavaScript numbers in inferred ClickHouse parameters.
#6907 c8fd57e Thanks @fubhy! - Close the ClickHouse client when the startup connection check times out.
#6906 5ed5692 Thanks @fubhy! - Propagate ClickHouse result decoding failures as SqlError values.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6766 f9ba412 Thanks @tim-smart! - Breaking: Secure Microsoft SQL Server connections by default by enabling encryption and validating server certificates.
Users connecting to SQL Server instances without TLS must now explicitly set encrypt: false. Users connecting with untrusted or self-signed certificates must explicitly set trustServer: true.
#6922 c53591f Thanks @fubhy! - Preserve fractional numbers and Unicode strings in default Microsoft SQL Server parameters.
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
#6858 9fb59a5 Thanks @fubhy! - Release transaction serialization when beginning a libSQL transaction fails, allowing later operations to retry.
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
c5bf174 Thanks @nr1brolyfan! - Add D1Client.batch for executing a collection of SQL statements as a single atomic D1 batch.#6701 9867b9f Thanks @fubhy! - Removed explicit ./index entrypoints
Updated dependencies [e56cd8f, f77c120, b2f95a9, 04fd44a, b74333d, 1c40b28, aeba0c8, b3901d2, 4a0984a, fffd88b, f3f6c1e, ef07642, f1bc827, aeba0c8, 081f4d8, 5287b24, 13d31cf, acee269, 31170c1, 205ebc7, ed0ebf8, a3fd084, ee29ddf, 6086309, 4a57af2, 660875b, 8e7c706, 5f63adb, 053bc42, c0a1534, f1e3a37, cedb01a, 1747440, aeba0c8, aeba0c8, b4f1ee2, a4757f1, cd122b9, 5de588b, 3895b9c, 89ce5f3, 985de09, 9800e3a, 4dc35f6, e8eb62b, ecd9993, 5ab9c08, f5cf965, a94cbed, 9160ad7, aeba0c8, aeba0c8, 52494be, 5441c8e, c9b56ab, 8ef7257, 1519406, 9716990, 733f75b, 48155c8, 951d06b, d767b65, 5d52d9d, f4151e1, e02fbb6, 724ce09, dbe91f6, 4c008d2, b650832, b46c92f, 5335797, 4b3460d, 6301fd7, aebc5c6, 52b2d7b, eec5744, 24e0e93, aeba0c8, aeba0c8, aeba0c8, 1a7ce81, 48f22a7, c96b7f6, 6d2a942, cc27b19, 8f9499f, 3eeea73, 0a532e5, f398149, aeba0c8, ace903e, e8eb62b, aeba0c8, 48f22a7, d48506d, aeba0c8, d48506d, d48506d, 52262be, 1284aa1, 9867b9f, d0f1a22, 979ce39, b6d3e67, adf6c6c, 7314d60, aeba0c8, 1acbd8b, 7bde6cc, a959a8b]:
Update the date, date-time, file, time-zone, cluster, event-log, persistence, socket, SQL, and DevTools schemas to reject invalid non-finite or non-in
#6608 0e50ec7 Thanks @gcanti! - Add Schema.Natural for non-negative safe integers and use canonical Schema.Int, Schema.Finite, and Schema.Natural schemas for numeric domain values across Effect, AI protocols, and OpenAPI patches.
Update the date, date-time, file, time-zone, cluster, event-log, persistence, socket, SQL, and DevTools schemas to reject invalid non-finite or non-integer values where appropriate. Correct the decoded schema of Schema.NumberFromString, and allow Schema.DurationFromMillis and Schema.DurationFromNanos to represent negative durations.
#6567 5101e92 Thanks @gcanti! - Add Record.assignProperty and safely handle dynamic record keys such as __proto__ and inherited property names.
#6572 c0f9fc9 Thanks @tim-smart! - Regenerate the Generated module against OpenRouter's current published specification. This preserves nullable
generation statistics and streamed usage cost metadata while incorporating the broader upstream schema changes.
Notable generated schema renames include ChatGenerationParams to ChatRequest, ChatGenerationTokenUsage to
ChatUsage, AssistantMessage to ChatAssistantMessage, ChatStreamingResponseChunk to ChatStreamingResponse,
and ChatMessageContentItemCacheControl to ChatContentCacheControl. Handwritten public aliases such as
ChatStreamingResponseChunkData, ReasoningDetails, and FileAnnotation retain their existing names.
Updated dependencies [b6392e1, 7ed9450, 45762bd, a6e8391, 4ac7e8b, 4cd40f5, 6956bc0, 0e50ec7, 9fcdade, 57367d5, 35c445f, c917bb9, bc1f358, 0e0c9d7, 73d40aa, 4f1e318, 9d8d85c, 6079fda, 5101e92, d0b3265, 7a03c89, cea1d9c, 078e1f5, 97bafea, fab0ab8, c323d8b, 6966353, 0444004, 028bbb3, ff5d6e2, 1bfce93, 7ce815c, 7271a7f, 475fe5c]:
#6608 0e50ec7 Thanks @gcanti! - Add Schema.Natural for non-negative safe integers and use canonical Schema.Int, Schema.Finite, and Schema.Natural schemas for numeric domain values across Effect, AI protocols, and OpenAPI patches.
Update the date, date-time, file, time-zone, cluster, event-log, persistence, socket, SQL, and DevTools schemas to reject invalid non-finite or non-integer values where appropriate. Correct the decoded schema of Schema.NumberFromString, and allow Schema.DurationFromMillis and Schema.DurationFromNanos to represent negative durations.
#6650 acd385e Thanks @IMax153! - Redact OpenAI organization and project headers from client errors.
#6549 64c6ab1 Thanks @xianjianlf2! - Encode OpenAI Responses API system messages as typed input text content.
#6567 5101e92 Thanks @gcanti! - Add Record.assignProperty and safely handle dynamic record keys such as __proto__ and inherited property names.
Updated dependencies [b6392e1, 7ed9450, 45762bd, a6e8391, 4ac7e8b, 4cd40f5, 6956bc0, 0e50ec7, 9fcdade, 57367d5, 35c445f, c917bb9, bc1f358, 0e0c9d7, 73d40aa, 4f1e318, 9d8d85c, 6079fda, 5101e92, d0b3265, 7a03c89, cea1d9c, 078e1f5, 97bafea, fab0ab8, c323d8b, 6966353, 0444004, 028bbb3, ff5d6e2, 1bfce93, 7ce815c, 7271a7f, 475fe5c]:
#6618 7a03c89 Thanks @tim-smart! - unstable/cluster: hash over-length SQL message deduplication keys to prevent message_id overflow, closes #6317.
The composed request deduplication key (entityType/entityId/tag/primaryKey) can legally exceed the 255-character message_id column — the address columns alone allow 458 characters before the RPC primary key is appended. SqlMessageStorage now stores a SHA-256 digest (64 hex characters) of the composed key in the unique message_id column when the key exceeds 255 characters, so keys of any length work on PostgreSQL, MySQL, MSSQL, and SQLite. Keys that fit are stored as plaintext, byte-compatible with rows written by previous versions, so existing deployments keep deduplicating with no migration or schema change.
SqlMessageStorage.layer/layerWith (and consequently SingleRunner.layer) now require Crypto.Crypto. The Node and Bun cluster convenience layers provide the platform Crypto implementation internally, so their requirements are unchanged.
Updated dependencies [b6392e1, 7ed9450, 45762bd, a6e8391, 4ac7e8b, 4cd40f5, 6956bc0, 0e50ec7, 9fcdade, 57367d5, 35c445f, c917bb9, bc1f358, 0e0c9d7, 73d40aa, 4f1e318, 9d8d85c, 6079fda, 5101e92, d0b3265, 7a03c89, cea1d9c, 078e1f5, 97bafea, fab0ab8, c323d8b, 6966353, 0444004, 028bbb3, ff5d6e2, 1bfce93, 7ce815c, 7271a7f, 475fe5c]:
19eeda6 Thanks @fubhy! - Migrate @effect/docgen into the Effect monorepo and update it to Effect 4 while retaining existing behavior.#6567 5101e92 Thanks @gcanti! - Add Record.assignProperty and safely handle dynamic record keys such as __proto__ and inherited property names.
Updated dependencies [b6392e1, 7ed9450, 45762bd, a6e8391, 4ac7e8b, 4cd40f5, 6956bc0, 0e50ec7, 9fcdade, 57367d5, 35c445f, c917bb9, bc1f358, 0e0c9d7, 73d40aa, 4f1e318, 9d8d85c, 6079fda, 5101e92, d0b3265, 7a03c89, cea1d9c, 078e1f5, 97bafea, fab0ab8, c323d8b, 6966353, 0444004, 028bbb3, ff5d6e2, 1bfce93, 7ce815c, 7271a7f, 475fe5c]:
#6563 b6392e1 Thanks @tim-smart! - unstable/reactivity Atom: add withEquality combinator for customizing how the registry detects value changes
#6574 7ed9450 Thanks @tim-smart! - unstable/http HttpClientRequest: add updateHeaders and removeHeader combinators for transforming or removing request headers, closes #6271
#6641 45762bd Thanks @tim-smart! - Add manual flushing to the OTLP exporters through a shared Flusher service exposed by each signal layer. The signal layer output types now include Flusher, and OtlpExporter.make requires it so custom exporters register unconditionally.
#6616 a6e8391 Thanks @tim-smart! - Add Tool.setNeedsApproval for replacing the approval policy of an existing tool.
4ac7e8b Thanks @IMax153! - Add Effect.updateServiceScoped for updating a context service until the current scope closes, with customizable reset behavior.
#6593 4cd40f5 Thanks @tim-smart! - Fix Channel.mergeAll to propagate outer failures promptly and interrupt active inner channels.
#6610 6956bc0 Thanks @ebramanti! - Update McpServer.layerHttp to return 405 for unsupported HTTP methods, reject unsupported MCP-Protocol-Version headers with 400, and return an empty 202 for accepted notifications and responses.
#6608 0e50ec7 Thanks @gcanti! - Add Schema.Natural for non-negative safe integers and use canonical Schema.Int, Schema.Finite, and Schema.Natural schemas for numeric domain values across Effect, AI protocols, and OpenAPI patches.
Update the date, date-time, file, time-zone, cluster, event-log, persistence, socket, SQL, and DevTools schemas to reject invalid non-finite or non-integer values where appropriate. Correct the decoded schema of Schema.NumberFromString, and allow Schema.DurationFromMillis and Schema.DurationFromNanos to represent negative durations.
#6599 9fcdade Thanks @tim-smart! - Interrupt in-flight stream pulls when closing an async iterator.
#6638 57367d5 Thanks @tim-smart! - Fix PartitionedSemaphore.take leaking partially acquired permits when interrupted.
#6615 35c445f Thanks @tim-smart! - Expose the tool call ID to AI tool handlers and Toolkit.WithHandler.handle wrappers.
#6561 c917bb9 Thanks @hsubra89! - Reject unexpected positional arguments left after command parsing, including values exceeding Argument.variadic maximum bounds.
#6613 bc1f358 Thanks @tim-smart! - Ignore duplicate chunk indexes when joining event log messages.
#6552 0e0c9d7 Thanks @xianjianlf2! - Fix a race where FiberHandle.clear could remove a newer fiber installed while the previous fiber was still interrupting.
#6598 73d40aa Thanks @tim-smart! - Fix LanguageModel.streamText to apply the configured concurrency limit to tool call resolution, including approval checks.
#6637 4f1e318 Thanks @tim-smart! - Fix Latch open/release resuming waiters that registered after a subsequent close.
Latch.open and Latch.release schedule the waiter flush on the fiber's
dispatcher. Previously the flush drained whatever waiters existed at flush
time, so a waiter that registered after the latch was closed again could be
resumed by the stale flush. The waiters are now snapshotted at schedule time,
so only waiters covered by an open/release call are resumed.
#6614 9d8d85c Thanks @tim-smart! - Fix histogram and summary maximum values for negative-only observations.
#6634 6079fda Thanks @fubhy! - Fix OTLP exporter shutdown to await in-flight and final buffered exports up to the configured shutdown timeout.
#6567 5101e92 Thanks @gcanti! - Add Record.assignProperty and safely handle dynamic record keys such as __proto__ and inherited property names.
#6592 d0b3265 Thanks @tim-smart! - Fix Stream.haltWhen to observe halt effects at pull boundaries for synchronous streams.
#6618 7a03c89 Thanks @tim-smart! - unstable/cluster: hash over-length SQL message deduplication keys to prevent message_id overflow, closes #6317.
The composed request deduplication key (entityType/entityId/tag/primaryKey) can legally exceed the 255-character message_id column — the address columns alone allow 458 characters before the RPC primary key is appended. SqlMessageStorage now stores a SHA-256 digest (64 hex characters) of the composed key in the unique message_id column when the key exceeds 255 characters, so keys of any length work on PostgreSQL, MySQL, MSSQL, and SQLite. Keys that fit are stored as plaintext, byte-compatible with rows written by previous versions, so existing deployments keep deduplicating with no migration or schema change.
SqlMessageStorage.layer/layerWith (and consequently SingleRunner.layer) now require Crypto.Crypto. The Node and Bun cluster convenience layers provide the platform Crypto implementation internally, so their requirements are unchanged.
#6577 cea1d9c Thanks @tim-smart! - ManagedRuntime: add Symbol.asyncDispose, enabling await using syntax
import { Effect, Layer, ManagedRuntime } from "effect";
await using runtime = ManagedRuntime.make(Layer.empty);
await runtime.runPromise(Effect.log("Hello, world!"));
// runtime is disposed automatically at the end of the scope
#6644 078e1f5 Thanks @gcanti! - Improve the performance of Array.dedupe, Array.union, Array.intersection, Array.difference, and Schema unique item validation by using hash-based equality lookup.
#6609 97bafea Thanks @tim-smart! - Allow embedding usage input tokens to be omitted during decoding, including after JSON serialization.
#6606 fab0ab8 Thanks @tim-smart! - Allow optional AI response fields to be omitted during decoding, including after JSON serialization.
#6607 c323d8b Thanks @ebramanti! - Prevent MCP tool failures from exposing Cause rendering, stack traces, and internal paths while preserving actionable validation messages.
#6576 6966353 Thanks @tim-smart! - Record: make fromIterableBy dual, allowing data-last usage in pipe
import { pipe, Record } from "effect";
const users = [
{ id: "2", name: "name2" },
{ id: "1", name: "name1" },
];
pipe(
users,
Record.fromIterableBy((user) => user.id),
);
#6622 0444004 Thanks @gcanti! - Remove the experimental SchemaUtils module and its getNativeClassSchema helper. The helper duplicated a composition already available through the primary Schema APIs and did not justify a separate public module.
#6653 028bbb3 Thanks @tim-smart! - Remove Effect.withConcurrency, the References.CurrentConcurrency reference backing it, and the "inherit" option from Types.Concurrency. Use an explicit number or "unbounded" concurrency value instead.
#6620 ff5d6e2 Thanks @gcanti! - Make Schema.Date reject invalid dates and remove the redundant Schema.DateValid, Schema.isDateValid, and Schema.isDateValidReviver APIs.
Schema.DateFromString and Schema.DateFromMillis now fail decoding when their input would produce an invalid date.
Remove Schema.Annotations.ToArbitrary.GenerationConstraint.valid; Schema.Date arbitraries now generate only valid dates by default.
#6575 1bfce93 Thanks @gcanti! - Schema: make schemas directly extendable as classes with static method support
and remove Schema.asClass.
Bottom and BottomLazy now include the class-compatible new signature,
while BottomWithoutNew and BottomLazyWithoutNew expose the schema protocol
without it for schema types that define a specialized construct signature.
Example
import { Schema } from "effect";
class MyString extends Schema.String {
static readonly decodeUnknownSync = Schema.decodeUnknownSync(this);
}
MyString.decodeUnknownSync("a"); // "a"
#6424 7ce815c Thanks @gcanti! - Refactor the SchemaRepresentation module to improve clarity and maintainability.
The representation pipeline is now open and compiler-extensible. The same encoded-side representation is used for JSON persistence, runtime reconstruction, JSON Schema Draft 2020-12 compilation, TypeScript code generation, AI structured output, and HTTP / OpenAPI schemas.
RepresentationAnnotation and CheckRepresentationAnnotation, which identify declarations and checks with a stable id, JSON payload, and optional schema dependencies.meta unions.SchemaRepresentation.ToJsonSchema and SchemaRepresentation.Generation.SchemaMultiDocument, fromSchemaMultiDocument, and fromRepresentations so several live schemas and named definitions can be converted and reconstructed together. Explicit definitions are preserved even when no root references them.toJson, fromJson, toJsonMultiDocument, and fromJsonMultiDocument as the persistence boundary for representation documents.{ type, value } tagged unions so their runtime types remain distinct across persistence formats, canonically encodes structural bigint and global symbol values, keeps JSON-valued annotations, and removes runtime-only callbacks and other non-JSON annotation values.DeclarationReviver, FilterReviver, and FilterGroupReviver contracts. Add makeDeclarationReviver, makeFilterReviver, and makeFilterGroupReviver, which infer their payload type from payloadSchema.Schema.suspend wrappers for recursive back-edges. Acyclic alias chains may be normalized while preserving the outer reference identifier.Schema. Consumers opt in to exactly the revivers accepted when reconstructing persisted documents:
OptionReviver, ResultReviver, RedactedReviver, CauseReasonReviver, CauseReviver, ErrorReviver, ExitReviver, ReadonlyMapReviver, HashMapReviver, ReadonlySetReviver, HashSetReviver, ChunkReviver, RegExpReviver, URLReviver, DateReviver, DurationReviver, BigDecimalReviver, FileReviver, FormDataReviver, URLSearchParamsReviver, Uint8ArrayReviver, DateTimeUtcReviver, TimeZoneOffsetReviver, TimeZoneNamedReviver, TimeZoneReviver, DateTimeZonedReviver, JsonReviver, and MutableJsonReviverisTrimmedReviver, isPatternReviver, isStringFiniteReviver, isStringBigIntReviver, isStringSymbolReviver, isUUIDReviver, isGUIDReviver, isULIDReviver, isBase64Reviver, isBase64UrlReviver, isStartsWithReviver, isEndsWithReviver, isIncludesReviver, isUppercasedReviver, isLowercasedReviver, isCapitalizedReviver, isUncapitalizedReviver, isFiniteReviver, isGreaterThanReviver, isGreaterThanOrEqualToReviver, isLessThanReviver, isLessThanOrEqualToReviver, isBetweenReviver, isMultipleOfReviver, isIntReviver, isDateValidReviver, isGreaterThanDateReviver, isGreaterThanOrEqualToDateReviver, isLessThanDateReviver, isLessThanOrEqualToDateReviver, isBetweenDateReviver, isGreaterThanBigIntReviver, isGreaterThanOrEqualToBigIntReviver, isLessThanBigIntReviver, isLessThanOrEqualToBigIntReviver, isBetweenBigIntReviver, isMinLengthReviver, isMaxLengthReviver, isLengthBetweenReviver, isMinSizeReviver, isMaxSizeReviver, isSizeBetweenReviver, isMinPropertiesReviver, isMaxPropertiesReviver, isPropertiesLengthBetweenReviver, isPropertyNamesReviver, and isUniqueReviverpayloadSchema, and report missing or duplicate reviver identifiers.Annotations.Filter.toJsonSchema without modifying a central metadata registry.FromJsonSchemaOptions type for the importer onEnter callback.toCode annotations on declarations and checks. Compiler callbacks receive generated type parameters or schema dependencies and can emit multiple import declarations.CodeDocument and preserve all explicit definitions during multi-document code generation.Schema.Json and Schema.MutableJson as already canonical. JSON validation now rejects sparse arrays, and non-finite numbers decode only from the canonical strings "Infinity", "-Infinity", and "NaN" rather than raw non-finite numeric inputs.toCodecJson or toCodec now use JSON validation as their fallback instead of silently encoding to null. toCodecJson callbacks may return undefined when a declaration is already canonical.Annotations.Declaration.toCodecStringTree; StringTree derivation now requires a declaration to provide a structural StringTree, JSON, or general codec instead of silently encoding an opaque declaration to undefined.SchemaRepresentation.fromAST -> SchemaRepresentation.toRepresentationSchemaRepresentation.fromASTs -> SchemaRepresentation.toRepresentationsSchemaRepresentation.toSchema with fromRepresentation, and add fromRepresentations for multi-root documents. Both reconstruction functions require { revivers: [...] }; no default reviver is installed implicitly.SchemaRepresentation.toSchemaDefaultReviver. Pass the required built-in revivers exported by Schema, or custom revivers created with the new constructors.DocumentFromJson and MultiDocumentFromJson with the toJson / fromJson and toJsonMultiDocument / fromJsonMultiDocument functions.Document and MultiDocument format is incompatible with the previous format. Nodes now contain checks; encoded literal values, enum values, and property signature names use tagged { type, value } objects while decoded documents expose their native scalar values; declarations no longer contain encodedSchema; persisted opaque declarations and leaf filters require a { id, payload } representation identity; and checks no longer contain closed meta payloads. Regenerate stored documents from their source schemas with the new API, or migrate their shape before passing them to fromJson.Reviver<T> function type with DeclarationReviver<P>, FilterReviver<P>, FilterGroupReviver<P>, CheckReviver<P>, Reviver<P>, and AnyReviver.StringMeta, NumberMeta, BigIntMeta, ArraysMeta, ObjectsMeta, DateMeta, SizeMeta, DeclarationMeta, and Meta from SchemaRepresentation.PrimitiveTree: $PrimitiveTree, $Annotations, $Null, $Undefined, $Void, $Never, $Unknown, $Any, $StringMeta, $String, $NumberMeta, $Number, $Boolean, $BigInt, $Symbol, $LiteralValue, $Literal, $UniqueSymbol, $ObjectKeyword, $Enum, $TemplateLiteral, $Element, $Arrays, $PropertySignature, $IndexSignature, $ObjectsMeta, $Objects, $Union, $Reference, $DateMeta, $SizeMeta, $DeclarationMeta, $Declaration, $Suspend, $Representation, $Document, and $MultiDocument.Annotations.Bottom.meta and Annotations.Filter.metaAnnotations.Declaration.typeConstructor; use representationAnnotations.Declaration.generation; use the toCode callbackAnnotations.Filter.representation, toJsonSchema, and toCodeAnnotations.Augment.contentSchema as a JSON-valued annotationAnnotations.Declaration.toCodecJson and toCodecStringTree to return undefinedcontentMediaType and contentSchema fields from SchemaRepresentation.String. Content metadata is now carried in ordinary annotations, and contentSchema is a JSON Schema value rather than a nested Effect representation.Schema.Annotations.BuiltInMetaDefinitions, BuiltInMeta, MetaDefinitions, and Meta. Custom checks should carry a representation identity and compiler callbacks instead of augmenting the metadata registry.fromJsonSchemaDocument now returns Schema.Top instead of a representation Document. fromJsonSchemaMultiDocument now returns SchemaMultiDocument instead of MultiDocument; call fromSchemaMultiDocument when a representation multi-document is required.toCodeDocument now accepts only a live MultiDocument; remove its reviver option. Reconstruct persisted documents first so revivers can restore runtime compiler callbacks.generation field of Artifact values for symbols and enums to code. Declaration generation no longer has an Encoded output, and importDeclaration is replaced by importDeclarations on callback output.sanitizeJavaScriptIdentifier, topologicalSort, and TopologicalSort helpers.0.{ errors: "all" }, structural checks run only after their base array, object, or declaration parses successfully; they are no longer added to an already failing child parse.#6646 7271a7f Thanks @gcanti! - Precompile union formatters and equivalences, select transformed union members using their decoded type, and allow deriving an equivalence for Never.
#6516 475fe5c Thanks @tim-smart! - Prevent SQL runner lock refreshes from hanging when reserved connections become unresponsive.
### Patch Changes - #6545 `731bea1` Thanks @tim-smart! - Interrupt and await concurrent traversal workers when mapper or refill callbacks throw. - #65
#6545 731bea1 Thanks @tim-smart! - Interrupt and await concurrent traversal workers when mapper or refill callbacks throw.
#6545 731bea1 Thanks @tim-smart! - Preserve current stack frame annotations on terminal root failures.
#6545 731bea1 Thanks @tim-smart! - Store interrupting fiber stack frames separately from interrupted target stack frames.
#6545 731bea1 Thanks @tim-smart! - Avoid allocating a scheduler dispatcher when runSyncExit completes without yielding.
#6545 731bea1 Thanks @tim-smart! - Make awaitAllChildren child selection linear in the number of fibers.
#6523 b35ed29 Thanks @gcanti! - Simplify the displayed Type, Encoded, and Iso types of required readonly Schema.Struct fields, closes #6521.
#6514 dd44624 Thanks @tim-smart! - Fix MutableList.filter leaving an invalid empty bucket when no values match.
#6545 731bea1 Thanks @tim-smart! - Deliver pending interrupts when interruptibleMask restores fiber interruptibility.
#6526 2bae1ac Thanks @tim-smart! - Fix HttpRouter.toWebHandler middleware inference to exclude request services supplied by the HTTP adapter.
### Patch Changes - #6501 `c1288dd` Thanks @gcanti! - Add a discriminants tuple to schemas augmented with Schema.toTaggedUnion and reject duplicate di
#6501 c1288dd Thanks @gcanti! - Add a discriminants tuple to schemas augmented with Schema.toTaggedUnion and reject duplicate discriminant
property keys.
#6475 2b58a3d Thanks @fubhy! - Normalize cron month and weekday aliases independently of the host locale.
#6492 6dc83f2 Thanks @gcanti! - Preserve nested class construction when applying constructor defaults, closes #6491.
#6476 c1e2fe0 Thanks @fubhy! - Add Cron day and weekday intersection semantics in inspection representations.
#6474 f3fbae8 Thanks @fubhy! - Validate Cron.make field constraints and treat weekday 7 as Sunday consistently with cron parsing.
#6472 e000f80 Thanks @fubhy! - Fix Cron.prev day-of-month rollover across shorter months and non-leap years.
#6471 f4ee765 Thanks @fubhy! - Fix Cron.prev weekday wrapping to always return a matching instant before the input.
#6477 510b55f Thanks @fubhy! - Make Cron equality and hashing include the optional timezone consistently.
#6433 31d3fc4 Thanks @coyaSONG! - Fix the published declaration for HttpEffect.appendPreResponseHandlerUnsafe.
#6487 875e618 Thanks @rvaccone! - Fix doubled Expected: Expected ... prefixes in CLI InvalidValue error messages, closes #6312.
#6496 688d46a Thanks @tim-smart! - Port Effect.reduce from Effect v3.
#6480 6ff5023 Thanks @fubhy! - Correct the diagnostic for cron step values above a field's maximum.
#6484 c0333e7 Thanks @tim-smart! - Fix fiber self-interuption from inside a running operation
#6493 06e7e8c Thanks @tim-smart! - Make multipart errors respond with an HTTP status based on their reason and ignore them in the error reporter.
#6498 eb9b102 Thanks @thewilkybarkid! - Don’t create a table when it’s not needed
#6494 8b155da Thanks @tim-smart! - only interrupt cache lookup when all awaiters are gone
#6495 3a87335 Thanks @tim-smart! - clean up more references on fiber exit
For example, provide an explicit list that omits GlobalFlag.LogLevel to remove the built-in --log-level flag:
#6397 8ce4795 Thanks @IMax153! - Add a scoped CliConfig service for customizing the built-in global flags used by CLI command runners.
For example, provide an explicit list that omits GlobalFlag.LogLevel to remove the built-in --log-level flag:
import { Effect } from "effect";
import { CliConfig, Command, GlobalFlag } from "effect/unstable/cli";
const program = Command.run(command, { version: "1.0.0" }).pipe(
Effect.provide(
CliConfig.layer({
builtIns: [GlobalFlag.Help, GlobalFlag.Version, GlobalFlag.Completions],
}),
),
);
#6409 80b539f Thanks @IMax153! - Reintroduce interactive CLI wizard mode through the --wizard flag and Command.wizard.
#6394 88a54cc Thanks @lloydrichards! - add a radius option to Graph search configuration, allowing dfs, bfs, and dfsPostOrder traversals to limit returned nodes by edge distance from the configured start nodes. Traversals can also use direction: "undirected" to follow edges in either direction.
#6457 e6e6dba Thanks @fubhy! - Improve Graph.dijkstra and Graph.astar priority queue performance.
#6468 bfb203e Thanks @gcanti! - Distribute HttpApiBuilder handler requirements per service so request middleware layers can provide them, closes #6464.
#6389 2e9a34a Thanks @IMax153! - Report an error when a CLI flag, including --completions, is provided without its required value.
#6359 55d4eb3 Thanks @evermake! - - Fix Command.withSubcommands collapsing the inferred requirements type to never when given more than one subcommand
Command.Services utility type to extract the required services from a Command#6462 bddb010 Thanks @fubhy! - Fix immutable Graph equality and hashing to include future node and edge identifier allocation.
#6425 a328835 Thanks @fubhy! - Fix Graph.bellmanFord to detect reachable negative cycles when the source and target are the same node.
#6454 5560d05 Thanks @fubhy! - Fix standalone data-last Graph.getNode and Graph.getEdge inference.
#6418 8f6e3ad Thanks @fubhy! - Fix Graph.mapEdges and Graph.filterMapEdges to preserve Graph.Edge instances when transforming edge data.
#6426 46997fa Thanks @fubhy! - Reject NaN and -Infinity edge weights in Graph shortest-path algorithms.
#6461 9e6e12d Thanks @fubhy! - Fix mutable Graph equality and hashing to use reference identity while preserving structural semantics for immutable graphs.
#6456 3394b93 Thanks @fubhy! - Fix topological walkers silently completing with an incomplete order when a mutable graph becomes cyclic after walker creation.
#6460 febeabc Thanks @fubhy! - Restrict Graph.topo to directed graphs at the type level while retaining runtime validation for unsafe undirected inputs.
#6455 54161c9 Thanks @fubhy! - Fix Graph.Walker to create a fresh iterable for each direct iteration.
#6414 385f7a4 Thanks @fubhy! - Fix Graph.toGraphViz to quote DOT graph names and escape labels as literal text.
#6438 7eea4d0 Thanks @tim-smart! - Fix one-shot iterable handling in Array.rotate, Iterable.cartesian, and in-memory RunnerStorage acquisition
#6371 7543afe Thanks @polRk! - Tool: preserve the tool kind when cloning provider-defined and dynamic tools.
Tool.addDependency, setParameters, setSuccess, setFailure, annotate, and annotateMerge previously rebuilt the tool as a user-defined tool, which flipped Tool.isProviderDefined to false, corrupted the provider id (e.g. anthropic.memory_20250818), and crashed Tool.getStrictMode. These operations now clone the tool while preserving its prototype, id, and kind. Provider-defined tools also now carry an empty annotations context so Tool.getStrictMode/annotate work on them. Closes #2615.
#6421 44b9cf3 Thanks @fubhy! - Preserve null edge data in Graph.floydWarshall costs.
#6438 7eea4d0 Thanks @tim-smart! - ensure one-shot iterables work with Fiber apis
#6420 0a8aa6a Thanks @fubhy! - Fix Graph.isAcyclic to detect cycles formed by parallel undirected edges.
#6417 c8d9fcf Thanks @fubhy! - Reject Graph mutation operations on mutable handles after Graph.endMutation finalizes them.
#6423 9ca7f9a Thanks @fubhy! - Fix Graph.isGraph narrowing for mutable and undirected graphs.
#6459 e7aca89 Thanks @fubhy! - Reject asynchronous Graph mutation callbacks and finalize scoped mutable handles when callbacks fail.
#6458 55d7560 Thanks @fubhy! - Fix undirected Graph equality and hashing to ignore stored edge endpoint orientation.
#6415 f809189 Thanks @fubhy! - Fix Graph.Walker iteration for receiver-sensitive iterables.
#6394 88a54cc Thanks @lloydrichards! - added graph set operations for combining and comparing graphs
Graph.make - creates a graph constructor for a dynamically selected graph kindGraph.compose - composition of two graphs, merging nodes by identityGraph.intersection - intersection of two graphs, keeping only common nodes and edgesGraph.difference - difference of two graphs, removing edges present in the second graphGraph.symmetricDifference - symmetric difference of two graphs, keeping edges present in exactly one graph#6395 0ebdbe7 Thanks @Chaoran-Huang! - Fix multipart parser limit violations being silently swallowed
#6419 7517d09 Thanks @fubhy! - Make the public Graph interfaces opaque by hiding internal mutable storage fields from their TypeScript surface.
#6390 212493b Thanks @alvarosevilla95! - Fix Redis script evaluation so transient SCRIPT LOAD failures are retried instead of being cached indefinitely.
#6394 88a54cc Thanks @lloydrichards! - add advanced graph set operations for deriving related graph structures
Graph.complement - complement over the existing node set, adding missing edges between distinct nodesGraph.neighborhood - induced subgraph containing nodes within a radius of a nodeGraph.sum - disjoint union of two graphs without merging equal node data#6430 80ea8cb Thanks @fubhy! - Fix Graph BFS, topological sort, and DFS postorder iterators to skip nodes removed from a MutableGraph without recursive self-calls.
#6465 8df19f4 Thanks @gcanti! - Fix isInt32 to apply custom annotations only to its filter group.
Your coding agent can read these notes before it upgrades. Set up the MCP server →