Minor Changes
-
#6793
b2f95a9Thanks @tim-smart! - AddSemaphore.takeIfAvailablefor non-blocking manual permit acquisition. -
#6693
aeba0c8Thanks @lloydrichards! - Expose object-shaped Toolkit success schemas as MCP tool output schemas. -
#6807
d0f1a22Thanks @alecbuffi! - Separate wall-clock timestamps from monotonic elapsed time.Clock.Clocknow requiresmonotonicTimeNanosUnsafe()andmonotonicTimeNanosfor measuring elapsed time. CustomClockimplementations must provide both members. The live clock'scurrentTimeNanosnow re-anchors its high-resolution Unix wall-clock timestamp when it drifts fromDate.now(), whileEffect.timed, duration metric tracking, andSink.withDurationuse monotonic time so wall-clock corrections do not distort elapsed durations.
Patch Changes
-
#6697
e56cd8fThanks @schickling-assistant! - Add a configurable filter for HTTP client request and response header span attributes. -
#6883
f77c120Thanks @gcanti! - Add support for converting JSON Schema documents to Draft-04, preserve literal$refvalues,$refsibling constraints,not,readOnly, andwriteOnlyin Draft-07 conversions, correct the Draft-07 meta-schema URI, and prevent OpenAPI component-key collisions during conversion. -
#6564
04fd44aThanks @AVtheking! - Run shared-table SQL persistence expiration cleanup in indexed, bounded background batches. -
#6911
b74333dThanks @fubhy! - Update existingHashRingnodes when adding a value with the same primary key. -
#6909
1c40b28Thanks @AlfGoto! - AddDateTime.toEpochSecondsandDateTime.fromEpochSecondsfor converting date-time values to and from Unix epoch seconds. -
#6693
aeba0c8Thanks @lloydrichards! - MCP tool handler defects now return a stable internal error without exposing defect details. -
#6874
b3901d2Thanks @fubhy! - FixEqual.equalsandHash.hashto handle invalid dates andDataViewvalues without throwing. -
#6869
4a0984aThanks @fubhy! - Fix SQL-backed PersistencegetManyto preserve duplicate key positions. -
#6868
fffd88bThanks @fubhy! - Ensure clearing an empty Redis-backed persistence store succeeds. -
#6903
f3f6c1eThanks @fubhy! - Preserve equals signs in inline CLI option values after the first separator. -
#6876
ef07642Thanks @fubhy! - FixSink.reduceWhileArrayapplying its reducer more than once per input array. -
#6802
f1bc827Thanks @tim-smart! - Cap incomplete RPC frames buffered by the NDJSON and MessagePack streaming decoders, and close socket transports when the limit is exceeded. -
#6693
aeba0c8Thanks @lloydrichards! - RPC servers now suppress responses after a client cancels an in-flight request. -
#6723
081f4d8Thanks @tim-smart! - add platform literal to HttpPlatform -
#6788
5287b24Thanks @gcanti! - Refine theConfigProviderinterface so lookup absence usesundefinedand
path transformation is provider behavior.ConfigProvider.loadand the lookup function accepted by
ConfigProvider.makenow returnNode | undefined. Useundefinedwhen a path
does not exist and return theNodedirectly when it does.ConfigProvidernow exposesmapInputas a capability. The exported
ConfigProvider.mapInputcombinator delegates to it, preserving transformation
order and composition throughorElsewithout requiring provider
representation state. -
#6863
13d31cfThanks @fubhy! - Decode percent-encoded OTLP environment header values. -
#6781
acee269Thanks @gcanti! - Deduplicate equivalent fallback definitions when compiling JSON Schema, and reconstruct only definitions reachable from multi-document roots.Remove
SchemaMultiDocumentandfromSchemaMultiDocument; 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
31170c1Thanks @IMax153! - Document thatCommandOptions.extendEnvdefaults tofalseand that providingenvwithout enabling it replaces the inherited child environment. -
#6657
205ebc7Thanks @tim-smart! - Use cancellable microtasks when dispatching yielded work from synchronous Effect runs. -
#6661
ed0ebf8Thanks @tim-smart! - Fix hydrated atoms withAtom.withReactivityto refresh after reactive mutations. -
#6665
a3fd084Thanks @tim-smart! - FixHttpRouter.toWebHandlercontext inference for services provided by the application layer. -
#6681
ee29ddfThanks @tim-smart! - Add Web Stream interoperability forChannelandSink, plus byte limiting andArrayBuffercollection forStream. -
#6730
6086309Thanks @tim-smart! - Support replaying initial WebSocket messages and normalizeArrayBufferframes toUint8Array. -
#6763
4a57af2Thanks @tim-smart! - Validate cookie names, domains, and paths before constructing or serializing cookies. -
#6771
660875bThanks @tim-smart! - Strip credential headers on cross-origin HTTP redirects and align redirected request methods with fetch. -
#6777
8e7c706Thanks @tim-smart! - Bound pending SSE decoder state with a configurable maximum event size. -
#6772
5f63adbThanks @tim-smart! - Reject empty,.and..keys in file-backed key-value stores. -
#6773
053bc42Thanks @tim-smart! - Escape terminal control characters in unstable CLI error output. -
#6898
c0a1534Thanks @tim-smart! - Add HTTP response compression support. Node.js, Bun, and Deno use asynchronous
node:zlibone-shot compression for byte-array bodies, preserving an exact
Content-Length; stream and raw bodies remain streaming transforms. -
#6859
f1e3a37Thanks @fubhy! - FixString.snakeToCamelandString.snakeToPascalto return an empty string for empty input. -
#6746
cedb01aThanks @fubhy! - Prefer explicit OTLP resource configuration over environment configuration. -
#6677
1747440Thanks @tim-smart! - Expose runtime schemas for AI prompt parts and message-specific part unions. -
#6693
aeba0c8Thanks @lloydrichards! - MCP servers now advertise logging and honor each client's selected log level when sending log notifications. -
#6693
aeba0c8Thanks @lloydrichards! - Preserve MCP sampling request preferences and response content. -
#6878
b4f1ee2Thanks @fubhy! - Fix Array index operations handlingNaNand fractional indexes. -
#6751
a4757f1Thanks @tim-smart! - Fix Atom dependency tracking and re-entrant invalidation during batch rebuilds. -
#6870
cd122b9Thanks @fubhy! - EnsureBigInt.gcdandBigInt.lcmreturn non-negative values and handle zero operands inBigInt.lcm. -
#6844
5de588bThanks @fubhy! - Prevent an interrupted cache lookup from removing a newer value written withCache.set. -
#6879
3895b9cThanks @fubhy! - Preserve failure annotations when mapping errors withCause.map. -
#6820
89ce5f3Thanks @fubhy! - FixChannelSchema.decodeUnknownto accept unknown input chunks while keepingChannelSchema.decodetyped to the schema's encoded input. -
#6899
985de09Thanks @fubhy! - EnsureChunk.takeandChunk.dropproduce valid chunks for fractional counts. -
#6579
9800e3aThanks @marbemac! - Scope cluster reply serialization failures and peer-delivered defects to their own request instead of the whole runner connection -
#6800
4dc35f6Thanks @tim-smart! - Fix persisted cluster stream recovery when SQL drivers return a null reply kind. -
#6814
e8eb62bThanks @gcanti! - Preserve provider input evidence whenConfig.orElserecovers a configuration failure. -
#6873
ecd9993Thanks @fubhy! - Propagate theFiberSet.runtimeinterruption option when registering managed fibers. -
#6872
5ab9c08Thanks @fubhy! - FixFormatter.formathandling of shared references and ensureFormatter.formatJsonalways returns valid JSON. -
#6867
f5cf965Thanks @fubhy! - Remove stalecontent-lengthheaders when replacing an HTTP client request body with one of unknown length. -
#6924
a94cbedThanks @fubhy! - IgnoreuniqueItemswhen set tofalsewhile importing JSON Schema documents. -
#6871
9160ad7Thanks @fubhy! - FixLayerMappreload options so configured entries are acquired during construction. -
#6693
aeba0c8Thanks @lloydrichards! - MCP completion handlers now receive resolved argument context, and completion responses are limited to one hundred values. -
#6693
aeba0c8Thanks @lloydrichards! - MCP servers now return protocol errors for invalid tool, prompt, completion, resource, and logging requests. -
#6901
52494beThanks @fubhy! - Prevent distinct metric attribute sets from sharing registry state. -
#6822
5441c8eThanks @fubhy! - FixMetric.isMetricto recognize metrics using their current runtime brand. -
#6821
c9b56abThanks @fubhy! - FixMetric.linearBoundariesto space boundaries by the configured width. -
#6847
8ef7257Thanks @fubhy! - FixMutableList.prependon empty lists and handle non-positivetoArrayNbounds. -
#6865
1519406Thanks @fubhy! - FixOtlpResourceto decode percent-encoded environment attributes and preserve bigint precision. -
#6805
9716990Thanks @tim-smart! - Prevent replay-enabled PubSubs from retaining values beyond each subscription's replay window. -
#6711
733f75bThanks @andrskr! - Preserve serialization and retention metadata on reactiveAtomRpcandAtomHttpApiqueries. -
#6855
48155c8Thanks @fubhy! - FixSchedule.duringto recur until the configured duration has elapsed. -
#6712
951d06bThanks @gcanti! - MakeSchema.isPatterndeterministic for regular expressions with global or sticky flags. -
#6782
d767b65Thanks @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 clearerEncodedsuffix. -
#6704
5d52d9dThanks @gcanti! - Fix Union candidate selection for recovering middleware and suspended members. -
#6848
f4151e1Thanks @fubhy! - Keep the currentScopedRefresource alive when acquiring its replacement fails. -
#6910
e02fbb6Thanks @z4p5a9! - FixSemaphore.withPermitsleaking permits when interrupted between acquiring them and installing their release. -
#6877
724ce09Thanks @tim-smart! - FixStream.aggregateWithinandStream.groupedWithinretaining fiber continuations on every schedule tick while upstream is idle. -
#6889
dbe91f6Thanks @tim-smart! - FixStream.withExecutionPlanretry limits resetting after partial stream emissions. -
#6823
4c008d2Thanks @fubhy! - Fix data-first dispatch forStream.mapAccumArrayEffect. -
#6900
b650832Thanks @fubhy! - EnsureStream.rangeemits the full range when the chunk size is zero. -
#6849
b46c92fThanks @fubhy! - FixSubscriptionRef.getAndUpdateSometo return the current value when no update is selected. -
#6808
5335797Thanks @fubhy! - FixSubscriptionRef.getAndUpdateEffectto execute the effectful update. -
#6862
4b3460dThanks @fubhy! - FixTrie.longestPrefixOfreturning a valued sibling that does not match the input key. -
#6856
6301fd7Thanks @fubhy! - FixTrieto preserve entries whose value isundefined. -
#6850
aebc5c6Thanks @fubhy! - FixTxPubSub.publishAlldropping values from one-shot iterables when a transaction retries. -
#6851
52b2d7bThanks @fubhy! - EnsureTxQueue.pollandTxQueue.clearcomplete a closing queue after draining its buffered items. -
#6853
eec5744Thanks @fubhy! - FixTxQueue.offerAllto preserve one-shot iterables across transaction retries and repeated runs. -
#6783
24e0e93Thanks @tim-smart! - Propagate trace context through persisted cluster workflow requests. -
#6693
aeba0c8Thanks @lloydrichards! - MCP servers now return standard JSON-RPC errors for malformed requests, unknown methods, and invalid parameters. -
#6693
aeba0c8Thanks @lloydrichards! - MCP servers now enforce revision-specific JSON-RPC batch and protocol-version header requirements. -
#6707
1a7ce81Thanks @gcanti! - MarkSchema.UnknownFromJsonStringas internal and remove its type-level interface. UseSchema.fromJsonString(Schema.Unknown)instead. Addreviver, callback or arrayreplacer, andspaceoptions toSchema.fromJsonString, and makeSchemaTransformation.fromJsonStringa configurable factory. -
#6828
48f22a7Thanks @tim-smart! - Use layered storage for Context, makingContext.addO(1) and eliminating per-request service map clones in the HTTP servers. Docgen now omits@internaloption properties from generated signatures. -
#6780
c96b7f6Thanks @tim-smart! - Include typed tool output schemas in MCPtools/listresponses. -
#6733
6d2a942Thanks @gcanti! - Avoid validatingSchema.Classfields twice when decoding. -
#6659
cc27b19Thanks @tim-smart! - Preserve prototype accessors when code is compiled with loose object spread transforms. -
#6912
8f9499fThanks @gcanti! - Removeactualfields from everySchemaIssuevariant, together with
SchemaIssue.getActual,SchemaIssue.redact, andSchema.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-benchmarkssuite. These are the scenarios used for the cross-library
comparison with Valibot and Zod. The paired HEAD-versus-mainrun 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-schema108191.30 30549.81 212715.66 -0.92% inconclusive initialization-decoder109796.34 — — +1.98% inconclusive validation-valid5221.80 5070.81 — +2.06% inconclusive validation-invalid1279.77 234.92 — +0.59% inconclusive parsing-all-valid5144.58 5192.19 7176.19 -3.79% inconclusive parsing-all-invalid7594.49 15236.82 37780.35 -5.94% improvement parsing-first-valid5188.33 5135.75 — -1.49% inconclusive parsing-first-invalid1330.82 243.64 — +1.01% inconclusive standard-all-valid5722.01 5200.05 3801.26 -1.78% inconclusive standard-all-invalid12024.65 15528.50 30982.17 -7.78% improvement standard-first-valid5655.33 — — +3.84% inconclusive standard-first-invalid2001.69 — — -4.56% inconclusive codec-typed-encode342.59 — 39.29 -7.62% inconclusive codec-typed-decode418.78 — 50.14 -10.89% improvement codec-unknown-encode328.38 — — -5.55% inconclusive codec-unknown-decode347.35 — — -5.25% inconclusive -
#6692
3eeea73Thanks @schickling-assistant! - Fix unstable CLI subcommands dropping operands after the--end-of-options terminator. -
#6625
0a532e5Thanks @lloydrichards! - Add adapter-valued MCP server protocol declarations, route requests through the selected protocol before schema decoding, and add built-in support for MCP2025-06-18. -
#6864
f398149Thanks @fubhy! - Honor HTTP-dateRetry-Aftervalues when retrying OTLP exports. -
#6693
aeba0c8Thanks @lloydrichards! - MCP Streamable HTTP servers now validate content negotiation, session lifecycle, negotiated protocol versions, and browser Origins before dispatching requests. -
#6824
ace903eThanks @tim-smart! - Skip HTTP server span attribute collection when the span is not sampled. -
#6814
e8eb62bThanks @gcanti! - RefineConfigloading and absence semantics.Config.schemanow derives a provider loading policy from the encodedStringTreeschema, materializes mixed-shape union members independently, and leaves separated scalar parsing toConfig.ArrayandConfig.Record. Schemas whose canonicalStringTreeencoding remains opaque, such asSchema.Any,Schema.Unknown, orSchema.Json, are rejected when the config is constructed; use a concrete shape orSchema.fromJsonString(Schema.Json)for scalar JSON. Missing or unavailable representations are decoded asundefinedbeforeConfig.withDefaultandConfig.optiondecide absence. Partially suppliedConfig.allgroups are rejected, successful values such asundefinedand explicitly present empty structures are preserved, and the internal path prefix is removed from the publicConfig.parsesignature. -
#6693
aeba0c8Thanks @lloydrichards! - MCP servers now refresh roots after capable clients report that their root list changed. -
#6828
48f22a7Thanks @tim-smart! - RemoveContext.mutateandContext.getReferenceUnsafe. Context updates now use overlays, andContext.getresolves reference defaults. -
#6649
d48506dThanks @gcanti! - Remove thekeyValueCombineroption fromSchema.Recordand the corresponding
SchemaAST.KeyValueCombinerandSchemaAST.IndexSignature.mergeAPIs.
For transformed key collisions, sequential parsing keeps the later selected
value, while concurrent parsing keeps the value applied last in completion
order. -
#6693
aeba0c8Thanks @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
d48506dThanks @gcanti! - Preserve untouchedResultbranches by identity inResult.mapand
Result.mapError. -
#6649
d48506dThanks @gcanti! - Improve Schema parsing, schema construction and adapter runtime performance
while preserving current parsing behavior.Runtime performance
The
effect@beta, Valibot and Zod timing cases from
open-circle/schema-benchmarks
were reproduced as a dedicatedruntimeperfsuite. 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 ond775bf4b2were 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:
Nodev24.12.0, macOS arm64, Apple M3.Zod parsing uses
safeParsewith{ 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 mainEffect 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
52262beThanks @tim-smart! - Bind event-log read and write requests to the identities authenticated on their RPC connection. -
#6735
1284aa1Thanks @gcanti! - Fix three issues in the publicOpticAPI:- Composed
IsoandPrismsetters no longer try to read a source value before writing. - Calling
notUndefinedon anOptionalnow returns anOptional, because writing can still fail. - The internal
nodeproperty is no longer exposed by public optic types.
- Composed
-
#6701
9867b9fThanks @fubhy! - Removed explicit ./index entrypoints -
#6875
979ce39Thanks @fubhy! - Fix protobuf serialization of negative signed integers to use ten-byte two's-complement varints. -
#6696
b6d3e67Thanks @tim-smart! - remove file descriptor type -
#6860
adf6c6cThanks @fubhy! - Honor custom split and strip regular expressions passed toString.noCase. -
#6866
7314d60Thanks @fubhy! - Fix partial file-backed HTTP bodies to report the selected byte range as their content length. -
#6693
aeba0c8Thanks @lloydrichards! - MCP HTTP servers now reject requests sent before initialization with the required lifecycle response. -
#6759
1acbd8bThanks @tim-smart! - Harden JSON-RPC wire message classification against inherited properties. -
#6705
7bde6ccThanks @tylergibbs1! - Restore therecursiveoption forFileSystem.watch, with non-recursive watching as the default. -
#6798
a959a8bThanks @tim-smart! - Namespace PostgreSQL advisory shard locks by theSqlRunnerStoragetable 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.