All versions since 4.0.0-beta.27
4.0.0-beta.27
Patch Changes
-
#1621
903a839Thanks @kitlangton! - unstable/http Headers: addremoveManycombinator for removing multiple headers at once -
#1622
91a0168Thanks @tim-smart! - AddModel.BooleanSqlite, a model field schema that uses0 | 1encoding for database variants and plainbooleanencoding for JSON variants. -
#1631
c890f9aThanks @gcanti! - unstable/httpapi HttpApiBuilder: fix void responses producing a non-empty body instead ofResponse.empty, closes #1628. -
#1618
1e985f2Thanks @tim-smart! - DefaultEffect.context()toEffect.context<never>()when no type parameter is provided.
4.0.0-beta.28
Minor Changes
- #1637
42bc7ceThanks @tim-smart! - Add a neweffect/unstable/http/HttpStaticServermodule for static file serving with MIME resolution, directory index fallback, SPA fallback, and safe path resolution.
Patch Changes
-
#1659
ff533f2Thanks @tim-smart! - Persist MCP HTTP session and protocol headers after initialize so follow-up JSON-RPC requests includeMCP-Protocol-Version. -
#1663
dc803eeThanks @tim-smart! - AddHttpServerResponse.fromClientResponsefor directly converting client responses into server responses. -
#1657
d660b1cThanks @tim-smart! - AddCtrl-Uline clearing support to editable CLI prompts. -
#1645
93a05e3Thanks @gijsbartman! - ensure transformed Atom’s don’t extend idle ttl -
#1655
2a65cf6Thanks @tim-smart! - MakeAtomRpc.queryandAtomHttpApi.queryreturn serializable atoms by default when query results are schema-backed.The atom serialization key now uses each API’s built-in request schemas so dehydrated state can be keyed consistently across server and client.
-
#1662
a561a40Thanks @tim-smart! - AddHttpServerRequest.toClientRequestfor direct server-to-client request conversion. -
#1648
29cd24dThanks @gcanti! - FixTypes.VoidIfEmptyto correctly detect empty object types. Remove deprecatedTypes.MatchRecordin favor of the simplified implementation, closes #1647. -
#1664
662a8e6Thanks @tim-smart! - AddHttpServerRequest.fromClientRequestfor direct client-request-backed server request conversion. -
#1656
d2b52baThanks @tim-smart! - Persist MCP client capability context across HTTP requests by resolving initialized payloads through the standardMcp-Session-IdHTTP header inMcpServer.Adds a regression test that initializes an MCP HTTP client, verifies the MCP server echoes
Mcp-Session-Id, and then checks a later tool call can still readMcpServer.clientCapabilities. -
#1639
407c3b4Thanks @tim-smart! - AddScheduler.PreventSchedulerYieldand expose it viaReferencesso fibers can skip schedulershouldYieldchecks when needed. -
#1649
e741322Thanks @tim-smart! - SetSchema.TaggedErrorClassinstancenameto the tag value, matchingData.TaggedErrorbehavior. -
#1646
5c75fa8Thanks @tim-smart! - Simplify internal and documented request usage by passing request resolvers directly toEffect.requestinstead of wrapping them withEffect.succeed. -
#1641
747177bThanks @tim-smart! - Don’t transform Tool result schemas, as they aren’t sent to the providers as json schemas -
#1636
326cd48Thanks @tim-smart! - AddCookies.expireCookie/expireCookieUnsafeandHttpServerResponse.expireCookie/expireCookieUnsafefor emitting expired cookies. -
#1653
627e922Thanks @tim-smart! - expose mcp client capabilities -
#1660
662287eThanks @tim-smart! - AddHttpServerResponse.toClientResponsefor converting server responses intoHttpClientResponsevalues.
4.0.0-beta.29
Patch Changes
-
#1677
b52721cThanks @gcanti! - FixSchema.isUUIDso theversionparameter is optional in its public signature. -
#1667
a891c7bThanks @tim-smart! - PreserveAtom.withReactivity(...)refresh behavior when registry initial values seed the wrapped atom. -
#1678
ef26cdfThanks @tim-smart! - Abort HTTP client requests when response streams are consumed only partially. -
#1665
82fd3edThanks @tim-smart! - Remove placeholder fallback behavior from CLI prompt inputs now that default values are prefilled.
4.0.0-beta.30
Patch Changes
-
#1675
c88e5b7Thanks @gijsbartman! - Fix consolePretty ignoring explicit colors option in non-TTY environments.When colors is explicitly set to true, prettyLoggerTty was still gating it with processStdoutIsTTY check, making it impossible to enable colors in non-TTY environments like Vite dev server.
-
#1690
947d0e4Thanks @gcanti! - FixCause.hasInterruptsOnlyto returnfalsefor empty causes. -
#1620
7517908Thanks @kitlangton! - FixTaggedUnion.matchto useUnifyfor return types, allowing branches to return distinct Effect types that are properly merged. -
#1680
a49ecd5Thanks @KhraksMamtsov! - make HttpClientResponse pipeable -
#1681
6993e33Thanks @mikearnaldi! - Add an optionalmessagefield toEffect.ignoreandEffect.ignoreCausefor custom log output. -
#1695
514f2a2Thanks @gcanti! - Remove unused APIs from theUtilsmodule. -
#1644
3214b47Thanks @patroza! - fix: update Service interface to use ‘this: void’ in ‘of’ method signatures -
#1693
95ec5edThanks @tim-smart! - fix cli subcommand context
4.0.0-beta.31
Patch Changes
-
#1696
5a84853Thanks @krzkaczor! - AddDurationObjecttoDuration.Inputto support Temporal-style object input.Durations can now be created from objects with named unit properties like
{ hours: 1, minutes: 30 }, similar toTemporal.Duration.from(). Supported fields:weeks,days,hours,minutes,seconds,millis,micros,nanos. -
#1705
6f23f0eThanks @tim-smart! - Preserve message item ordering in the default logger when logging aCausewith message values. -
#1711
654aaecThanks @tim-smart! - FixRpcGroup.toLayerandRpcGroup.toLayerHandlerservice requirement inference so handler dependencies are preserved for non-stream RPC handlers. -
#1712
2958a42Thanks @tim-smart! - Expose CLI completions as a public unstable module ateffect/unstable/cli/Completions. -
#1713
95d27a2Thanks @tim-smart! - MakeLayer.mocka dual API so it supports bothLayer.mock(Service)(impl)andLayer.mock(Service, impl). -
#1704
0fbaea8Thanks @tim-smart! - Support toolkit unions inLanguageModeloptions. -
#1701
21d5d5eThanks @tim-smart! - wrap httpapi request context with HttpRouter.Request -
#1696
5a84853Thanks @krzkaczor! - allow assigning Temporal types to DateTime & Duration input -
#1698
6e49959Thanks @tim-smart! - Include toolkit tool handler requirements in AI generation API environment inference. -
#1703
8f5805dThanks @tim-smart! - RelaxNdjsonbyte-stream channel signatures to accept plainUint8Array. -
#1710
990df2cThanks @gcanti! - Schema:toCodecJsonnow returnsCodec<T, Json, RD, RE>instead ofCodec<T, unknown, RD, RE>.Http: the
jsonproperty onHttpIncomingMessage,HttpClientResponse,HttpServerRequest, andHttpServerResponsenow returnsEffect<Schema.Json, E>instead ofEffect<unknown, E>.
4.0.0-beta.32
Patch Changes
-
#1717
bf8fff8Thanks @gcanti! - Schema: addOptionFromOptionalNullOrschema, closes #1707. -
#1722
1af3ef3Thanks @tim-smart! - FixRpcSerialization.jsondecode so JSON array payloads are not wrapped in an extra outer array. -
#1725
27fea0fThanks @tim-smart! - Improve unstable HttpApi runtime failures for missing server middleware and missing group implementations.- HttpApiBuilder.applyMiddleware now resolves middleware services via Context.getUnsafe, so missing middleware fails with a clear “Service not found:
” error instead of an opaque is not a function TypeError. - HttpApiBuilder.layer now reports missing groups with actionable context (group identifier, service key, suggested HttpApiBuilder.group(…) call, and available group keys).
- Added regression tests in packages/platform-node/test/HttpApi.test.ts covering:
- addHttpApi + API-level middleware applied across merged groups
- missing middleware service diagnostics
- missing addHttpApi group layer diagnostics
- HttpApiBuilder.applyMiddleware now resolves middleware services via Context.getUnsafe, so missing middleware fails with a clear “Service not found:
-
#1727
2ad6c1bThanks @tim-smart! - Make all built-inHttpApiErrorclasses implementHttpServerRespondable, so they can be returned directly from plain HTTP server handlers outside ofHttpApi. -
#1739
398ac3eThanks @tim-smart! - Use predicate-baseddualdispatch forStream.mergeso data-last calls with optionaloptionsare handled correctly. -
#1741
51fe22fThanks @tim-smart! - AddLayer.tap,Layer.tapError, andLayer.tapCauseAPIs for effectful observation of layer success and failure without changing layer outputs. -
#1740
4605db6Thanks @tim-smart! - Refactor call sites with multipleContextmutations to useContext.mutatefor batched updates. -
#1750
f4de1b0Thanks @gcanti! - Improve unstable AI structured output handling for empty tool params and addTool.EmptyParams, closes #1749. -
#1525
60214f2Thanks @tim-smart! - use Option instead of undefined | A -
#1747
c4b8b0fThanks @tim-smart! - seperate scheduler dispatch from yield decisions -
#1753
6de4efeThanks @tim-smart! - Add dtslint coverage forStream.catchIfto lock in predicate and refinement inference behavior in both data-first and data-last forms. -
#1716
4f969d1Thanks @gcanti! - Remove unusedeffect/NullOrmodule. -
#1721
6cc67c8Thanks @IMax153! - Correct the type of the schema parameter accepted by thefileSchemamethods in the CLI to beSchema.Decoder<A> -
#1709
8531a22Thanks @mikearnaldi! - Add module-level helpers forSemaphore,Latch, and extractedPartitionedSemaphoreoperations. -
#1743
47a51abThanks @tim-smart! - default ws close codes to 1001 in case they are undefined -
#1728
1521d02Thanks @tim-smart! - add graceful shutdown to http servers
4.0.0-beta.33
Patch Changes
4.0.0-beta.34
Patch Changes
-
#1758
f2f75eeThanks @tim-smart! - Use a normal Map in ResponseIdTracker and clear it on divergence / reset instead of reallocating a WeakMap. -
#1764
342fc4bThanks @tim-smart! - Add unstable EmbeddingModel support across core and OpenAI providers.- Add the unstable EmbeddingModel module API surface in
effect, including service, request, response, and provider types. - Implement the unstable EmbeddingModel runtime constructor in
effect, withRequestResolverbatching,embed/embedManyspans, provider error propagation, deterministic ordering, and empty-inputembedManyfast-path behavior. - Add and align EmbeddingModel behavior tests in
effectfor embedding usage, batching, ordering, and error handling. - Add
OpenAiEmbeddingModelin@effect/ai-openai, including model / make / layer constructors, config overrides, and provider output index validation with deterministic reordering. - Add OpenAI-compatible EmbeddingModel provider support in
@effect/ai-openai-compat, including config overrides, layer constructors, and output index validation.
- Add the unstable EmbeddingModel module API surface in
-
#1766
5d704eeThanks @tim-smart! - Fix JSDoc wording forEffect.catchto consistently reference the current API name. -
#1771
00add69Thanks @tim-smart! - AddEmbeddingModel.ModelDimensionsand require dimensions in embedding providermodelconstructors. -
#1767
58217d3Thanks @gcanti! - AddisMutableHashMapandisMutableHashSet, and align nominal guard implementations and tests across collections and transactional data types. -
#1765
f4e2abaThanks @tim-smart! - retry incremental prompt on invalid request -
#1756
e3b44b6Thanks @tim-smart! - add HttpApiMiddleware.layerSchemaErrorTransform -
#1732
e1472b7Thanks @KhraksMamtsov! - port Url module from v3 -
#1761
7686320Thanks @gcanti! - FixTool.maketype and runtime behavior whenparametersis not provided.
4.0.0-beta.35
Patch Changes
-
#1784
7daf387Thanks @gcanti! - AddConfig.Successtype utility, closes #1783. -
#1778
e1664a3Thanks @tim-smart! - AllowEffect.acquireReleaserelease finalizers to depend on the surrounding environment. -
#1777
fdaa6e0Thanks @tim-smart! - Remove an unreachable array branch indecodeJsonRpcRawto simplify JSON-RPC decode logic without changing behavior. -
#1774
19aa47eThanks @tim-smart! - Align CLI help flag and global flag descriptions to a single column even when some flag names are very long. -
#1780
c667dadThanks @tim-smart! - FixLanguageModelincremental prompt fallback to reliably retry with the full prompt when an incremental request fails withInvalidRequestError. -
#1781
764d150Thanks @gcanti! - FixDateTime.makeUnsafeincorrectly appending “Z” to date strings containing “GMT” -
#1772
3c27098Thanks @tim-smart! - make Layer.mock work with Stream and Channel
4.0.0-beta.36
Patch Changes
-
#1793
60fcbccThanks @tim-smart! - Ensure streamed tool results are emitted before the finish part so chat history includes tool outputs before stream termination. -
#1762
0a60837Thanks @kitlangton! - Allow unstable HttpApi middleware to declare multiple error schemas with arrays.Middleware errors now follow endpoint error behavior for response status resolution, client decoding, and generated API schemas.
-
#1805
49164d2Thanks @tim-smart! - FixEffect.cachedWithTTLandEffect.cachedInvalidateWithTTLto start TTL expiration when the cached value is produced instead of when computation starts. -
#1808
334b6e4Thanks @tim-smart! - BackportCron.prevwith reverse lookup tables and cron stepping logic, including DST-aware reverse traversal. -
#1789
5700695Thanks @mikearnaldi! - FixStream.scanEffecthanging and repeatedly emitting the initial state. -
#1810
f8f4456Thanks @tim-smart! - Support key-derivedidleTimeToLiveinLayerMapoptions (make,fromRecord, andLayerMap.Service) and addLayerMaptests for dynamic TTL behavior. -
#1802
969d24fThanks @kitlangton! - PubSub.publish and PubSub.publishAll now return false on shutdown instead of interrupting, matching Queue.offer semantics. -
#1796
851eda0Thanks @tim-smart! - ImprovePrompt.fileto support incremental filtering while typing, including backspace and ctrl-u handling. -
#1806
8059c1cThanks @tim-smart! - Fix a regression inPubSub.shutdownso shutting down a pubsub interrupts suspended subscribers (includingtakeAll) by ensuring subscriptions are scoped under the pubsub shutdown scope. -
#1797
6f83295Thanks @tim-smart! - Add `Ctrl-A` and `Ctrl-E` key handling for editable CLI text prompts to move the cursor to the beginning or end of the current input line. -
#1633
65f7f57Thanks @kitlangton! - Schema: adddecodeUnknownResult/decodeResultandencodeUnknownResult/encodeResulthelpers for synchronousResult-based parsing. -
#1798
e7fabd2Thanks @gcanti! - Schema: allow usingStructtype helpers directly, e.g.Schema.Struct.Type<F>instead ofSchema.Schema.Type<Schema.Struct<F>>. -
#1794
89c3e98Thanks @tim-smart! - Fix ai LanguageModel streaming finish parts so finish events are always emitted when a toolkit is provided. -
#1785
53794abThanks @KhraksMamtsov! - add missing Equivalence.Date
4.0.0-beta.37
Patch Changes
-
#1812
f7a0b71Thanks @tim-smart! - Consolidate the SqlError changes to the new reason-based shape across effect and the SQL drivers, classifying native failures into structured reasons with Unknown fallback where native codes are unavailable. -
#1816
1e223c3Thanks @tim-smart! - unstable/http HttpClientRequest: add toWeb and fromWeb conversions for web Request objects -
#1829
53740f4Thanks @tim-smart! - Fix sql migrator lock handling to only treat duplicate migration-row inserts as a concurrent migration lock. -
#1831
8c7cf89Thanks @tim-smart! - FixSchedule.fixedto run the next iteration immediately when the previous action takes longer than the configured interval. -
#1833
b6b81a9Thanks @tim-smart! - FixUnify.unifyso unions ofEffectvalues collapse to a single unifiedEffecttype again. -
#1825
8f4c1f9Thanks @skoshx! - Fix DevToolsClient not flushing final span events on teardown.The stream consumer was
forkScoped, causing it to be interrupted before it could drain remaining queue items. Replaced withforkChildandFiber.awaitin the finalizer so the stream drains naturally after the queue is failed. -
#1824
f2479f9Thanks @tim-smart! - Ignore unsupported Ctrl key combinations in interactive CLI prompts to avoid rendering control characters such as Ctrl+L form feed into prompt input. -
#1819
c919921Thanks @j! - HttpServerResponse: fixfromWebto preserve Content-Type header when response has a bodyPreviously, when converting a web
Responseto anHttpServerResponseviafromWeb, theContent-Typeheader was not passed toBody.stream(), causing it to default toapplication/octet-stream. This affected any code usingHttpApp.fromWebHandlerto wrap web handlers, as JSON responses would incorrectly have their Content-Type set toapplication/octet-streaminstead ofapplication/json. -
#1821
7af90c2Thanks @gcanti! - Schema: relaxassertsandisconstraints. -
#1822
f3be185Thanks @tim-smart! - improve runSync error when executing async effects
4.0.0-beta.38
Patch Changes
-
#1842
f4dbe5bThanks @gcanti! - Schema: renameMakeOptions.disableValidationtodisableChecks. Apply constructor defaults whendisableChecksis true, closes #1841. -
#1837
a71a607Thanks @kitlangton! - FixHttpApiBuildersecurity middleware caching so separate handler builds do not reuse the first provided middleware implementation. -
#1840
66a0494Thanks @tim-smart! - Rename HttpApiClient request optionwithResponsetoresponseModeand add support forresponseMode: "response-only"to return the rawHttpClientResponsewithout decoding. -
#1838
5ef7218Thanks @tim-smart! - UpdateHttpApiClient.urlBuilderto mirror client shape, and encode params/query via endpoint schemas before building URLs. -
#1700
472d260Thanks @tim-smart! - adduseCodecsoption to HttpClientEndpoint constructors
4.0.0-beta.39
Patch Changes
-
#1844
f91fd3dThanks @tim-smart! - RelaxHttpApiClient.urlBuilderto acceptHttpApi.Anyinstead of requiringHttpApi.AnyWithProps. This allows use in helpers generic overHttpApi.Anywhile preserving inferred URL builder types. -
#1851
edaae9dThanks @tim-smart! - Re-export additional core runtime references fromeffect/References, including logger and error reporter references. -
#1856
b47db0bThanks @gcanti! - FixStructutility return types (for examplepick) to preserve the previous simplified shape instead of exposing raw utility types likePick<T, K>, closes #1855. -
#1849
82d3c8eThanks @tim-smart! - Fix theQueue.takeNdocumentation example to end the queue before showing a partial batch. -
#1848
7c22b31Thanks @tim-smart! - RemoveSchedule.composein favor ofSchedule.both, and update schedule examples to useSchedule.both.
4.0.0-beta.40
Patch Changes
4.0.0-beta.41
Patch Changes
-
#1881
36f5c21Thanks @gcanti! - AddedBigDecimal.sumAllandBigDecimal.multiplyAllfor feature parity withNumberandBigInt, closes #1880. -
#1869
d8ce758Thanks @gcanti! - Schema: collapse same-type literal branches in JSON Schema output into a singleenumarray, closes #1868.Before:
{"anyOf": [{ "type": "string", "enum": ["A"] },{ "type": "string", "enum": ["B"] }]}After:
{"type": "string","enum": ["A", "B"]} -
#1879
11aab4cThanks @tim-smart! - Highlight active option labels inPrompt.selectandPrompt.multiSelectusing cyan text so selection state is visible beyond the pointer / checkbox icon. -
#1884
3bc1efbThanks @tim-smart! - Fail RpcClient HTTP requests when the server response contains no RPC messages instead of leaving requests pending. -
#1875
70e724eThanks @IMax153! - Fix AI text method toolkit typing to support generic handler toolkits, preserve toolkit union inference, and keep response part narrowing by tool name. -
#1876
738dee7Thanks @tim-smart! - Track ManagedRuntime fibers in a scope -
#1886
2111963Thanks @tim-smart! - add ClusterSchema.WithTransaction annotation -
#1877
198a553Thanks @tim-smart! - allow Context.Key to be covariant
4.0.0-beta.42
Patch Changes
-
#1897
924e216Thanks @IMax153! - Append concrete choice values to CLI flag help descriptions so generated help shows valid command-line inputs. -
#1894
80e7f0cThanks @tim-smart! - FixMutableList.appendAll/appendAllUnsafeso empty arrays are treated as a no-op instead of leaving behind an empty internal bucket. -
#1895
f8328bfThanks @tim-smart! - Changed socket close handling so all close codes are treated as errors by default unlesscloseCodeIsErroris overridden. -
#1899
66d1c06Thanks @gcanti! - SchemaRepresentation: supportanyOf/oneOfwith sibling keywords infromJsonSchemaMultiDocument -
#1893
bee800bThanks @gcanti! -Number.remainder: fix incorrect results for small floats in scientific notation (e.g.1e-7). -
#1898
8930441Thanks @mikearnaldi! - RenameEffect.transactiontoEffect.txandEffect.retryTransactiontoEffect.txRetry, removeEffect.transactionWith/Effect.withTxState, make nestedEffect.txcalls compose into the active transaction, and make the publicTx*APIs establish atomic transactions without requiringTransactionin common usage.
4.0.0-beta.43
Patch Changes
-
#1904
2ae33d0Thanks @juliusmarminge! - Fix JSON-RPC serialization foridvalues that are falsey but valid, including0and"", while still mappingnullto Effect’s internal notification sentinel. -
#1900
979811aThanks @tim-smart! - Fix AI structured output schema generation forSchema.ClassandSchema.ErrorClassby resolving top-level$refentries before passing JSON Schema to providers and default codec transformers. -
#1908
eb7dbefThanks @tim-smart! - Fix stream requests in Entity.toLayerQueue -
#1907
cf50eb4Thanks @tim-smart! - add WorkflowEngine interruptUnsafe -
#1903
1d046feThanks @kitlangton! - AddLayer.suspendas a lazy constructor for dynamically choosing a layer while preserving normal layer sharing.
4.0.0-beta.44
Patch Changes
-
#1943
e3f0621Thanks @gcanti! - AddDateFromString,BigIntFromString,BigDecimalFromString,TimeZoneNamedFromString,TimeZoneFromString, andDateTimeZonedFromStringschemas, closes #1941. -
#1996
5b476abThanks @gcanti! - Schema: addStringFromBase64,StringFromBase64Url,StringFromHex, andStringFromUriComponentschemas for decoding encoded strings into UTF-8 strings, closes #1995. -
#1952
6b40e5aThanks @tim-smart! - Effect.repeat now uses effect return value when using options -
#1961
7bb5dceThanks @IMax153! - Rename Atom’sContexttype toAtomContext -
#1975
3b09fb3Thanks @tim-smart! - catch defects when building Entity handlers -
#2000
2370410Thanks @tim-smart! - fix cache constructor inference by moving the lookup option -
#1928
dabc272Thanks @tim-smart! - Addschema.makeEffect(input, options?)toSchema.Bottomand schema-backed classes, matching the existing constructor behavior exposed bymakeUnsafe/makeOptionwhile returning anEffectfailure withSchema.SchemaError. -
#1949
08b63c3Thanks @tim-smart! - Update the unstable HTTP middleware logger to annotate only the request path inhttp.urlinstead of including the full URL (query / fragment), and add a regression test. -
#1962
dfff04cThanks @tim-smart! - AddKeyValueStore.layerSqlto back key-value storage with a SQL database viaSqlClient. -
#1963
9baed9eThanks @tim-smart! - FixUnify.unifyso Layer unions merge correctly, and add type tests covering Layer unification. -
#2004
7846792Thanks @tim-smart! - FixStream.toQueuetypes and implementation to return aQueue.Dequeuein both overloads and delegate toChannel.toQueueArray. -
#1974
1556a24Thanks @juliusmarminge! - Fix unstable CLI boolean flags soFlag.optional(Flag.boolean(...))returnsOption.none()when omitted, and support canonical--no-<flag>negation for boolean flags. -
#1929
b5ea591Thanks @gcanti! - Simplify and align the default-value APIs.Schema.withConstructorDefaultnow accepts anEffect<T>instead of(o: Option<undefined>) => Option<T> | Effect<Option<T>>.Schema.withDecodingDefault/Schema.withDecodingDefaultKeynow accept anEffect<T>instead of() => T, enabling effectful defaults.SchemaGetter.withDefaultfollows the same change, acceptingEffect<T>instead of() => T. -
#1966
0853afaThanks @gcanti! - Reuse existing references when duplicate identifiers have the same representation, closes #1927. -
#1942
ac845f3Thanks @gcanti! - FixErrorClassandTaggedErrorClasstoStringto match nativeErroroutput format (e.g.E: my messageinstead ofE({"message":"my message"})), closes #1940.Also fix prototype properties (e.g.
name) being lost after.extend(). -
#1956
b80c462Thanks @gcanti! - AddSchema.resolveAnnotationsKeyAPI to retrieve the context (key-level) annotations from a schema, closes #1947.Also rename
Schema.resolveIntotoSchema.resolveAnnotations. -
#2005
b3f535dThanks @gcanti! - FixStream.splitLinesto correctly handle standalone\ras a line terminator and flush the final unterminated line when the stream ends, closes #2002. -
#1936
6fe2e93Thanks @IMax153! - FixStream.groupedWithindropping partial batches when the upstream ends or goes idle. -
#1965
8335477Thanks @tim-smart! - return resolvers directly from SqlModel.makeResolvers -
#1960
8c836f9Thanks @IMax153! - AddChildProcessHandle.unref, returning anEffectthat restores the child process reference when run. -
#1984
718ff6fThanks @jannabiforever! - MakeEffect.retrywithtimesargument to propagate the original error. -
#1930
7eed84fThanks @mikearnaldi! - AddStream.serviceandStream.serviceOptionfor accessing services as single-element streams. -
#1935
5df46feThanks @gcanti! - Schema: addasClassAPI to turn any schema into a class with static method support.Example
import { Schema } from "effect";class MyString extends Schema.asClass(Schema.String) {static readonly decodeUnknownSync = Schema.decodeUnknownSync(this);}MyString.decodeUnknownSync("a"); // "a" -
#1958
82dd0f2Thanks @gcanti! - Schema: addMissingSelfGenericcompile-time error forClass,TaggedClass,ErrorClass, andTaggedErrorClasswhen theSelftype parameter is omitted. -
#1957
03ae41eThanks @gcanti! - Schema: remove"~annotate.in"type fromBottominterface, inlining it where needed -
#1951
4677a0aThanks @gcanti! - RenameSchema.makeUnsafeinstance method back toSchema.makeon all schemas and schema-backed classes.Also remove the
static readonly makeoverride fromShardIdto avoid conflicting with the inherited schemamakemethod. The module-levelShardId.make(group, id)function is still available. -
#1999
87e1fc8Thanks @tim-smart! - use NoInfer in Layer constructors to prevent type erasure -
#1971
c1af1b7Thanks @joepjoosten! - Allow unstable CLI fallback prompts to be created dynamically from anEffect. -
#1961
7bb5dceThanks @IMax153! - Rename theServiceMapmodule toContextacross exports, docs, and tests. -
#1973
c8a877bThanks @joepjoosten! - Underline the active label in CLI multi-select prompts and add a scratchpad example for manual verification.
4.0.0-beta.45
Patch Changes
4.0.0-beta.46
Patch Changes
4.0.0-beta.47
Patch Changes
-
#2017
c584726Thanks @gcanti! - Schema: addannotateEncodedfunction for annotating the encoded side of a schema. -
#2013
86a91a4Thanks @gcanti! - Schema: add withDecodingDefaultTypeKey / withDecodingDefaultType, closes #2012 -
#2018
131caf9Thanks @gcanti! - Schema: allowClassconstructors to acceptvoidwhen all fields are optional, closes #2015. -
#2016
c3615c8Thanks @gcanti! - Schema: rename"~rebuild.out"to"Rebuild"
4.0.0-beta.48
Patch Changes
-
#2029
a5e6f77Thanks @tim-smart! - omit scope from HttpApi handlers -
#2023
f1ba5b8Thanks @tim-smart! - EventLog Identity string encodes to base 64 -
#2023
f1ba5b8Thanks @tim-smart! - disable tracer propagation for otlp exporter
4.0.0-beta.49
Patch Changes
-
#2035
7d87873Thanks @tim-smart! - Add support for common HTTP status string literals inHttpApiSchema.status(for example,HttpApiSchema.status("Created")resolves to status code201). -
#2034
216f13cThanks @IMax153! - Fix issue with exported CLICompletionstypes
4.0.0-beta.50
Patch Changes
-
#2038
07be594Thanks @tim-smart! - add support for deferred responses in rpc -
#2040
ae02433Thanks @tim-smart! - require a option to make AtomRpc.query atoms serializatable
4.0.0-beta.51
Patch Changes
-
#2049
778d2afThanks @bohdanbirdie! - AddRpcSerialization.makeMsgPackfor creating MessagePack serialization with custom msgpackr options. On Cloudflare Workers withallow_eval_during_startup(default forcompatibility_date >= 2025-06-01), pass{ useRecords: false }to prevent msgpackr’s JIT code generation vianew Function(), which is blocked during request handling. Also fixes silent error swallowing in themsgPackdecode path — non-incomplete errors are now rethrown instead of returning[]. -
#2010
4e24dcfThanks @tim-smart! - process schema properties / elements concurrently -
#2052
4b1c015Thanks @gcanti! - Schema: expandFilterOutputand addFilterIssuefor richer filter failures.The return type of a
Schema.makeFilterpredicate now supports two additional shapes:{ path, issue }whereissueisstring | SchemaIssue.Issue(previously only{ path, message: string }was accepted). Theissuearm lets you attach a fully-formedIssueat a nested path without manually constructing aPointer.ReadonlyArray<Schema.FilterIssue>to report several failures at once. An empty array is success, a single-element array is equivalent to returning that element, and multi-entry arrays are grouped into anIssue.Composite. This removes the need to importSchemaIssueand hand-build aCompositefor multi-field validators.
The single-failure shapes (
undefined,true,false,string,SchemaIssue.Issue) are unchanged.Breaking: the object shape renamed from
{ path, message }to{ path, issue }. Call sites that used the old shape must rename the field; the migration is mechanical.// beforeSchema.makeFilter((o) => ({ path: ["a"], message: "bad" }));// afterSchema.makeFilter((o) => ({ path: ["a"], issue: "bad" }));Also renamed
{ path, message }to{ path, issue }in the accepted return type ofSchemaGetter.checkEffect. -
#2047
454f8adThanks @gcanti! - FixSchemaAST.isJsonrejecting DAGs as cycles, closes #2021.The previous implementation marked every visited object in a single
seenset and never removed it, so any value that referenced the same object through two different paths (a DAG, e.g.{ x: shared, y: shared }) was treated as a cycle and returnedfalse. Cycle detection now tracks only the current recursion path (popping on exit) and memoizes fully validated subtrees, so DAGs are accepted while true cycles are still rejected. -
#2051
6754a0cThanks @tim-smart! - disable sql traces for EventLog, RunnerStorage -
#2053
90f7fd5Thanks @tim-smart! - remove use of bigint literals -
#2046
d7e1519Thanks @gcanti! - Remove theoptionsparameter fromOpenApi.fromApi.The parameter only carried
additionalProperties, but the function caches results in aWeakMapkeyed solely on theapiinstance. Passing different options across calls for the same api was silently ignored, making the parameter order-dependent and effectively single-shot. No call sites were using it, so the signature is now simplyfromApi(api). -
#2044
72a8122Thanks @tim-smart! - ensure envelope payloads are correctly encoded for notify path
4.0.0-beta.52
Patch Changes
-
#2057
8e04bfcThanks @tim-smart! - add HttpApiSchemaError for determining where a schema error originates from -
#2055
cf3a311Thanks @tim-smart! - ensure tagged enum _tag is correctly set -
#2057
8e04bfcThanks @tim-smart! - make HttpApi schema errors defects unless transformed -
#2058
131fdd5Thanks @tim-smart! - mcp http request with no session header is 404 response
4.0.0-beta.53
Patch Changes
-
#2068
0768509Thanks @tim-smart! - FixAtomHttpApiquery and mutation error inference to include endpoint middleware and client middleware errors, matchingHttpApiClientbehavior (including response-only mutation mode). -
#2062
476aedeThanks @aldotestino! - FixHttpIncomingMessage.schemaBodyJsonto forward parse options via theparseOptionsannotation key. -
#2069
4be6a7cThanks @mikearnaldi! - FixTestClock.currentTimeNanosUnsafe()to floor fractional millisecond instants before converting them toBigInt.
4.0.0-beta.54
Patch Changes
-
#2075
4c72808Thanks @tim-smart! - ensure workflow failures are not squashed by suspension interrupts
4.0.0-beta.55
Patch Changes
-
#2081
42cc744Thanks @gcanti! - Export theSchema.encodeKeysinterface, closes #2070.Previously the interface was internal, so exporting a value whose inferred type referenced it triggered TypeScript error
TS4023: Exported variable has or is using name 'encodeKeys' from external module ... but cannot be named, e.g.: -
#2067
04855ceThanks @mrazauskas! - fixisNullish()type predicate
4.0.0-beta.56
4.0.0-beta.57
Patch Changes
4.0.0-beta.58
Patch Changes
-
#2097
11993d4Thanks @Leka74! - Add an exhaustive finalizer to the AsyncResult builder. -
#2098
96c8b22Thanks @tim-smart! - generate binary arrays from streams with less copying -
#2098
96c8b22Thanks @tim-smart! - improve http body consumption
4.0.0-beta.59
Patch Changes
- #2106
56837eaThanks @IMax153! - Fix entity proxy RPC handlers to provide the context expected by RpcServer.
4.0.0-beta.60
Patch Changes
-
#2119
7909c95Thanks @gcanti! - RemoveInspectable.stringifyCircularand fixFormatter.formatJsonso shared object references are preserved while only circular references are omitted. -
bbb4dccThanks @tim-smart! - allow using Duration.Input with accessors -
#2117
7af2207Thanks @gcanti! - AddSchema.DurationFromStringandSchemaTransformation.durationFromString, support"Infinity"and"-Infinity"inDuration.fromInput, and simplify config duration parsing around the shared schema codec, closes #2092. -
#2116
848b40aThanks @gcanti! - Add aConfig.literalsconvenience constructor forSchema.Literals, closes #2091.
4.0.0-beta.61
Patch Changes
-
#2130
50790afThanks @tim-smart! - Record fiber runtime start metrics when fibers are constructed so yielded fibers are only counted once. -
#2120
71f7c3dThanks @tim-smart! - PortEffect.firstSuccessOffrom Effect v3. -
#2122
aae8797Thanks @tim-smart! - fix empty body decoding in HttpApiBuilder
4.0.0-beta.62
Patch Changes
- #2131
4ab4b90Thanks @tim-smart! - Allow Kubernetes pod conditionlastTransitionTimevalues to be null in K8sHttpClient schemas.
4.0.0-beta.63
Patch Changes
4.0.0-beta.64
Patch Changes
- #2137
7d4877aThanks @tim-smart! - Add optional soft delete column support to SqlModel repositories and resolvers.
4.0.0-beta.65
Patch Changes
-
#2148
6f11454Thanks @tim-smart! - AddUniqueViolationas a new SQL error reason. Supported unique constraint violations now classify asUniqueViolationinstead of the broaderConstraintErrorreason.This covers PostgreSQL, PGlite, MySQL, MSSQL, and the shared SQLite classification used by the SQLite-family clients.
UniqueViolation.constraintcontains the best available constraint, index, or key identifier and falls back to exactly"unknown"when no reliable identifier is available.
4.0.0-beta.66
Patch Changes
-
#2161
cd7d1fbThanks @wking-io! - Fix request ID tracking in the RPC server HTTP protocol finalizer. -
#2158
19a7033Thanks @ColaFanta! - ChangeType_<>implementation, from usingExclude<F, O | M>type util tokeyof F as xx, this implementation keeps IDE provenance link. This enables clicking “Go to definition (F12)” in VSCode on an object made from Schema Struct jumps to the correct Struct field definition. -
#2153
33d26b4Thanks @Gabrola! - AllowHttpApiTest.groupsto accept an optionalbaseUrloverride while preserving the existing default of"http://localhost:3000". -
#2160
856766bThanks @tim-smart! - Remove the auto-incrementing suffix from HTTP server logger log span names. -
#2164
079c7dfThanks @tim-smart! - Add the unstable workflow DurableQueue module.
4.0.0-beta.67
Patch Changes
-
#2111
35594f8Thanks @thiagofelix! - FixEntityProxyServer.layerHttpApiusingpath.entityIdinstead ofparams.entityId -
#2201
8bddd62Thanks @sjh9714! - FixMutableList.filterandMutableList.removelength updates. -
#2181
4be4c8dThanks @zeyuri! - Fix workflow proxy RPC handlers to provide the context expected by RpcServer. -
#2177
0c9d3abThanks @mikearnaldi! - Add forked memo maps so nested layer scopes can reuse parent allocations without leaking sibling-local layers. Update@effect/vitestto fork memo maps for nestedit.layersuites, isolating sibling setup while preserving parent sharing. -
#2206
b156accThanks @tim-smart! - addavailableShardGroupsto ShardingConfig, to ensure advisory locks do not conflict -
#2184
d16c034Thanks @gcanti! - Restore support for passing schema parse options when creating decode and encode helpers, closes #2174. -
#2176
b559d68Thanks @patroza! - Allow Schema decoding defaults to require Effect services.The
Effectpassed toSchema.withDecodingDefault,Schema.withDecodingDefaultKey,Schema.withDecodingDefaultType, andSchema.withDecodingDefaultTypeKeynow accepts a contextRin its third type parameter. The required services are propagated into the resulting schema’sDecodingServices.SchemaGetter.withDefaultis widened in the same way. -
#2113
a3de5d9Thanks @patroza! - Allow Schema constructor and decoding defaults to fail withSchemaError.The
Effectpassed toSchema.withConstructorDefault,Schema.withDecodingDefault,Schema.withDecodingDefaultKey,Schema.withDecodingDefaultType, andSchema.withDecodingDefaultTypeKeynow acceptsSchemaErrorin its error channel. When a default fails, the parser unwraps the underlyingSchemaIssue.Issueand propagates it as a parse failure with the surrounding path attached. This makes it easy to use another schema’smakeEffect/decode*as the default value. -
#2172
7e6c12eThanks @gcanti! - RenameSchemaParser.makeUnsafetoSchemaParser.make.
4.0.0-beta.68
Patch Changes
-
#2210
af8267fThanks @tim-smart! - Add Stream.broadcastN for fixed-size stream broadcasts. -
#2180
0176eafThanks @IMax153! - Add a platform-agnosticCryptoservice for cryptographic random bytes, secure random generators, UUIDv4 / UUIDv7 generation, and digest operations. UUID generation should now use theCryptoservice’srandomUUIDv4orrandomUUIDv7, which format bytes from the platformCryptoservice; UUIDv7 also uses theClockservice timestamp.Random.nextUUIDv4has been removed because the baseRandomservice is not cryptographically secure. -
#2221
f136bb7Thanks @gcanti! - ChangeSchema.assertsandSchemaParser.assertsto assert a value directly withasserts(schema, input)and removeSchema.Codec.ToAsserts. -
#2209
6f38f07Thanks @tim-smart! - Fix Channel.decodeText corrupting UTF-8 characters split across chunk boundaries. -
#2207
aec9c40Thanks @tim-smart! - rename Model.Generated to Model.GeneratedByDb
4.0.0-beta.69
Patch Changes
-
#2227
70ea04aThanks @avallete! - AddFlag.withHidden(andParam.withHidden) to hide flags from--helpoutput and shell completions while keeping them fully parseable on the command line.Useful for experimental, internal, or deprecated flags that should be accepted but not advertised, e.g.
--experimental-foo, debug toggles, or escape hatches that are not yet committed to the public CLI surface.import { Flag } from "effect/unstable/cli";const experimental = Flag.boolean("experimental-foo").pipe(Flag.withHidden); -
#2240
d0ea8b0Thanks @tim-smart! - pass workflow parent on discard -
#2237
a57674bThanks @notkadez! - FixStream.scopedandChannel.scopedso pull effects run with the scoped resource scope. -
#2239
59aa334Thanks @tim-smart! - fix RpcWorker Protocol service key -
#2242
8f4208eThanks @tim-smart! - Accept.mjsand.mtsmigration files in SQL migrator loaders.
4.0.0-beta.70
Patch Changes
-
#2228
af7782dThanks @avallete! - AddCommand.withHiddento hide subcommands from--helpoutput, shell completions, and “did you mean?” suggestions, while keeping them fully invocable by exact name.Useful for experimental or internal subcommands that should be accepted but not advertised on the public CLI surface.
import { Command } from "effect/unstable/cli";const experimental = Command.make("experimental").pipe(Command.withHidden);const root = Command.make("mycli").pipe(Command.withSubcommands([experimental]),); -
#2244
7212d70Thanks @tim-smart! - Fix TestClock adjustment when its layer is provided to programs run without an ambient Scope.
4.0.0-beta.71
Patch Changes
-
#2252
d8ac76bThanks @tim-smart! - AddedSchedule.tap, which allows observing full schedule metadata without altering schedule inputs or outputs. -
#2261
2c3c00aThanks @gcanti! - Add JSON Schema custom annotation passthrough option, closes #2260 -
#2269
3751e7cThanks @gcanti! - Schema: reintroduce.valueonSchema.ArrayandSchema.NonEmptyArrayfor consistency with other collection wrappers (Chunk,HashSet, etc.), closes #2268. -
#2272
fc5f25bThanks @gcanti! - Clarify thatData.$is(tag)only checks the_tagfield, not the full structure, closes #2271. -
#2257
7ccced4Thanks @bwbuchanan! - Fixed thecatch*combinators silently dropping unhandled error types -
#2263
a2e1fe5Thanks @patroza! - UseWeakMapforpendingBatchesinstead ofMap, to allow GC to collect resolvers -
#2266
4a4a36bThanks @gcanti! - Fix schema arbitrary constraints for exclusive BigInt, Date, and integer number bounds. -
#2249
d350292Thanks @tim-smart! - allow encoding Redacted by default, and add option to disallow encoding -
#2276
730afb6Thanks @tim-smart! - Fix AtomRef notifications when a listener re-subscribes itself during notification. -
#2250
df1b008Thanks @tim-smart! - FixArgument.variadic(argument)so it supports direct calls without options. -
#2277
6d469d5Thanks @tim-smart! - Fix string messages and annotations being double-quoted by simple and logfmt loggers.
4.0.0-beta.72
Patch Changes
-
#2287
73e67d1Thanks @tim-smart! - Ensure ClusterWorkflowEngine routes durable clock wakeups and registered workflow deferred completions through the owning workflow’s shard group. -
#2286
01d71ecThanks @tim-smart! - Add default value support toPrompt.file. -
#2285
fcd707eThanks @tim-smart! - Add default value support to CLI integer prompts.
4.0.0-beta.73
Patch Changes
-
#2291
361ca30Thanks @tim-smart! - Add HttpApiSecurity.http for passing custom schemes -
#2289
b9598c6Thanks @tim-smart! - make EntityResource lazy by default
4.0.0-beta.74
Patch Changes
- #2295
b1fc6a4Thanks @jgoux! - Fix CLI parsing so command-local flags can override globals without breaking global flags before subcommands.
4.0.0-beta.75
Patch Changes
-
#2294
81b187cThanks @mattiamanzati! - Align workflow tags with RPCs by changingWorkflow.maketo accept the tag as its first argument, exposing workflow tags as_tag, and supportingclass MyWorkflow extends Workflow.make(...) {}. -
#2312
ad4b535Thanks @gcanti! - ValidateSchema.StructWithRestfixed fields against rest index signatures at the type level so schemas cannot be constructed with incompatible decoded, encoded, or make shapes. This keepsStructWithResttypes sound and updates the generated OpenAI conversation-items request schema to keep accepting arbitrary additional fields under the stricter validation. -
#2314
a29c2e7Thanks @gcanti! - PreserveSchema.Redactedoptions when roundtripping through schema representations. This keepslabelvalidation anddisallowJsonEncodebehavior intact when schemas are revived from a representation or emitted through code generation. -
#2298
1fdd9aeThanks @gcanti! - Remove theTypes.MergeRecordalias. UseTypes.MergeLeftinstead. -
#2298
1fdd9aeThanks @gcanti! - Align Schema adapter failures:Schemaresult, promise, and sync adapters now surfaceSchemaError, whileSchemaParserresult, promise, and sync adapters exposeSchemaIssue.Issue. MarkSchemaParseroption adapters as internal because their error details are discarded. -
#2313
ffea4ecThanks @MohanedMashaly! - Add -v alias for version flag -
#2306
4255c9bThanks @sam-goodwin! - FixHttpApiSecuritybearer/http credential decoding
4.0.0-beta.76
Patch Changes
-
#2320
016108aThanks @gcanti! - AddSchema.isGUIDand updateSchema.isUUIDto accept the RFC 9562 max UUID. -
#2319
95c03d2Thanks @fubhy! - Add support for configuring Scalar API reference pages with a custom fetch implementation. -
#2318
07299a3Thanks @gcanti! - Replace theSchema.ErrorandSchema.Defectschema constants with constructor functions,Schema.Error()andSchema.Defect().Unify
Schema.ErrorWithStackintoSchema.Error({ includeStack: true })andSchema.DefectWithStackintoSchema.Defect({ includeStack: true }).Error causes are encoded by default using the same JSON defect encoding semantics used by
Schema.Defect; pass{ excludeCause: true }to omit nested cause data.Equivalent
Schema.ErrorandSchema.Defectoptions are canonicalized, so repeated constructor calls with the same option values reuse the same schema.Schema.Defect()now models defects asunknownvalues with a JSON encoded form. Error-shaped JSON objects with a stringmessagedecode to JavaScriptErrorvalues, so non-Errorobjects such as{ message: "boom" }do not round-trip unchanged. Other non-Errorvalues are normalized through JSON serialization, with non-JSON values falling back to Effect’s formatted string representation.
4.0.0-beta.77
Patch Changes
-
#2326
6e9a5caThanks @fubhy! - Prefer OTEL resource environment variables over explicitOtlpResource.fromConfigoptions. -
#2325
302f398Thanks @fubhy! - Add OTEL environment variable configuration for unstable OTLP observability.
4.0.0-beta.78
Patch Changes
-
#2333
7836b8eThanks @tim-smart! - Fix Schema.Defect JSON encoding for Error values whose message property is not a string. -
#2329
35d49a3Thanks @alvarosevilla95! - Retry Redis scripts afterNOSCRIPTand declare the token bucket refill key
4.0.0-beta.79
Patch Changes
-
#2364
b9704dcThanks @mikearnaldi! - Fix module-level side effects that defeated bundler tree-shaking.Bare top-level statements cannot be
#__PURE__-annotated by the build, so bundlers must retain them and everything they reference, even in bundles that never use the code:Option: the standaloneObject.defineProperty(SomeProto, "valueOrUndefined", ...)statement anchored the wholeOptionproto chain into every bundle. It is now folded into theSomeProtoinitializer.Headers: same pattern withObject.defineProperties(Proto, ...), folded into the initializer.Logger: module-levelprocess.stdout.isTTYproperty reads (potential getters, never droppable) moved insideconsolePretty.Utils: wheninternalCallwas unused, its dropped binding left behind a retained initializer tail (standard/forcedprobe with computed property reads). The selection is now wrapped in a single pure-annotated call.
A minimal
Effect.succeed(123).pipe(Effect.runFork)bundle shrinks by ~1.3% gzipped; bundles that don’t useOptionorHeadersno longer pay for them. -
#2339
a207113Thanks @tim-smart! - Fix EntityManager defect restarts so in-flight requests are replayed instead of being dropped when the old entity scope is interrupted. -
#2362
5e9b9e2Thanks @fubhy! - Fix Graph traversal and shortest-path algorithms to traverse undirected edges independently of their stored source/target orientation. -
#2366
7c128aeThanks @IMax153! - Fix string seed encoding in Random.withSeed so short, trailing, and astral UTF-8 bytes affect deterministic streams. -
#2352
0ada457Thanks @alvarosevilla95! - Fix the RedisRateLimiterStoretoken-bucket failing with opaque errors under memory pressure: it now writes its keys with a TTL and guards against a missing refill timestamp. -
#2359
d7cc5a2Thanks @gcanti! - FixStructkey renaming andSchema.encodeKeysto support symbol keys, and reject duplicate encoded keys. -
#2365
aad63beThanks @gcanti! - FixSchemaencoding so container-level checks are validated against the decoded value instead of the encoded output.Disallow adding checks directly to
Schema.suspend(...); add the checks to the suspended schema instead.Fix
StructWithRestso index signatures do not re-parse or overwrite fixed properties. -
#2342
09809f6Thanks @gcanti! - Use generic ordered constraints for schema arbitrary derivation.Range checks such as
isGreaterThan,isLessThan, andisBetweennow populatectx.constraints.orderedinstead of type-specific range fields onnumber,date, orbigintconstraints. CustomtoArbitraryannotations that read range constraints should migrate toctx.constraints.ordered.This also fixes BigDecimal arbitrary generation by adapting decimal bounds to the generated scale, avoiding invalid fast-check bigint ranges for narrow decimal intervals.
-
#2368
2fddda5Thanks @IMax153! - Encode HTTP API client path parameters when building request URLs. -
#2348
5f21768Thanks @gcanti! - Update Schema arbitrary derivation to use the new filter metadata, candidate generation, optional derivation reports, recursion-aware generation, and the renamedOrderedConstraint<T>model.Migration from the previous v4 API:
- Replace filter annotations from
toArbitraryConstraint: constrainttoarbitrary: { constraint }. When a filter cannot be described as a constraint, usearbitrary: { candidate }to add a weighted source that is still checked by the filter. - Replace bucketed constraints with the flat
Schema.Annotations.ToArbitrary.Constraintshape:string.minLength,array.minLength, object property counts, collection sizes ->minLengthstring.maxLength,array.maxLength, object property counts, collection sizes ->maxLengthstring.patterns->patternsnumber.isInteger->integernumber.noNaN->noNaNnumber.noDefaultInfinity->noInfinitydate.noInvalidDate->validarray.comparatorfor uniqueness ->uniqueusing Effect equalityordered.min/minExcluded/max/maxExcluded->ordered.minimum/exclusiveMinimum/maximum/exclusiveMaximum
- In arbitrary hooks, read
context.constraintinstead ofcontext.constraints. Replacecontext.isSuspendwithcontext.recursion; when combining finite and recursive branches, passcontext.recursiontofc.oneofwith the finite branch first. - Generic declaration hooks now receive type parameters as
{ arbitrary, terminal }. Atomic declarations may still return a bareFastCheck.Arbitrary<T>, but generic declarations should return{ arbitrary, terminal }when they can preserve a finite terminal branch. Schema.toArbitrary(schema, { report: true })now returns{ value, report }; without{ report: true }, it keeps returning the arbitrary directly.Schema.toArbitraryLazyalways returns a lazy arbitrary.
- Replace filter annotations from
-
#2343
f27003eThanks @MohanedMashaly! - Add meta-var that shows log level and bash options in command line.
4.0.0-beta.80
Patch Changes
-
#2205
d944330Thanks @lloydrichards! - add support for merging external events intoPrompt.customrender loops via an optionaleventsdequeue andreceivehandler.The prompt races user input against events from the dequeue, allowing background events to trigger re-renders without waiting for a keypress:
const eventQueue = yield * Queue.make<number>();const prompt = Prompt.custom({ count: 0 },Queue.asDequeue(eventQueue), // <-- provide the event queue as a dequeue to the prompt{render: (state) => Effect.succeed(`Count: ${state.count}`),process: (input, state) =>Effect.succeed(Match.value(input).pipe(// handle user inputMatch.tag("Input", () => Action.Submit({ value: state.count })),// handle external events from the queueMatch.tag("Event", (input) =>Action.NextFrame({ state: { count: state.count + input.value } }),),Match.exhaustive,),),clear: () => Effect.succeed(""),},); -
#2369
f48659fThanks @gcanti! - Round fractional durations symmetrically when normalizing to nanoseconds. -
#2373
7652aaaThanks @StarpTech! - Stream.fromReadableStream: swallow thereader.cancel()rejection in the finalizer. Cancelling the reader of an already-errored ReadableStream rejects with the stored error, which turned the typedonErrorfailure into a defect. -
#2371
98630b7Thanks @gcanti! - EmitSchema.ObjectKeywordas an object-or-array JSON Schema union. -
#2376
90ae23cThanks @fubhy! - AddGraph.successorsandGraph.predecessors, deprecateGraph.neighborsDirected, and fix graph algorithm edge cases around reversal, undirected edge queries, shortest-path weight validation, topological sort initials, and strongly connected components.
4.0.0-beta.81
Patch Changes
-
#2387
93cb4f8Thanks @gcanti! -Config.withDefaultnow only recovers from missing data for literal/union schemas. Invalid present values now propagate validation errors instead of using the default, closes #2384. -
#2388
60341d9Thanks @gcanti! -Config.withDefaultno longer recovers from schema filter failures. A filter failure means a present value reached refinement checks, so using the default could hide invalid configuration values. -
#2389
1105ab5Thanks @gcanti! - FixSchema.toTaggedUnion(...).isAnyOfnarrowing for custom discriminant keys, closes #2386.Previously, the type predicate always extracted union members by
_tag, even whentoTaggedUnionwas created with a different discriminant key. Runtime behavior already used the supplied key, so this aligns the type-level narrowing with the existing runtime behavior. -
#2270
4500fbfThanks @IMax153! - Add HTTP API streaming response support
4.0.0-beta.82
Patch Changes
- #2391
193690bThanks @IMax153! - Fix HttpApiEndpoint endpoint error inference when success schemas include streams.
4.0.0-beta.83
Patch Changes
- #2394
1f2e8ceThanks @IMax153! - Fix published HttpApi declaration files by exporting schema metadata types referenced by public declarations.
4.0.0-beta.84
Patch Changes
-
#2420
87f52baThanks @tim-smart! - AddEffect.transposeOptionfor converting anOption<Effect<A, E, R>>into anEffect<Option<A>, E, R>. -
#2374
b8ee07fThanks @gcanti! - Import unconstrained JSON Schema nodes asSchema.Jsoninstead ofSchema.Unknown. -
#2407
867c0d7Thanks @gcanti! - Normalize error behavior for Schema and SchemaParser boundary APIs.SchemaErrornow extendsData.TaggedError, so it is also a nativeError. SchemaParser Promise APIs now reject anErrorwhose cause is theSchemaIssue.Issuefor schema failures.Schema and SchemaParser
EffectandExitadapters now preserve full causes while mapping schema issue failures to their public error type. Theis,asserts,Promise,Sync,Result,Option,make, andmakeOptionadapters now distinguish schema issues from non-schema causes. Schema-only failures are converted to the adapter’s normal representation (false, rejected or thrown schema error,Result.fail, orNone), while non-schema causes throw or reject with anErrorwhose cause is the underlyingCause. -
#2409
b93bc6cThanks @tim-smart! - Fix Stream.runForEachWhile so it continues across chunk boundaries while the predicate returns true and stops when the predicate returns false. -
#2424
57d387fThanks @tim-smart! - Fix cluster workflow activity defect hydration -
#2403
bacca41Thanks @lloydrichards! - align ProcessInput.Input runtime field name with type definition on Prompt.custom -
#2423
0f8ac79Thanks @tim-smart! - RpcGroup.toHandlers is definition first -
#2383
25b4482Thanks @gcanti! - Fix config path composition and directory-backed lookup behavior.ConfigProvider.orElsenow keeps each side’s ownnestedandmapInputbehavior. ApplyingnestedormapInputto a combined provider now applies the same transformation to both sides.ConfigProviderpath transformations now compose as a single path function. This makesnestedandmapInputbehave consistently with normal function composition.Config.nestednow tracks the logical config path inConfigitself instead of wrapping the provider. This keeps lookup paths and schema error paths aligned. The low-levelConfig.makeconstructor is no longer exported; use config constructors and combinators, or implement custom lookup behavior withConfigProvider.make.ConfigProvider.fromDirnow returnsundefinedwhen neither a file nor a directory exists at the requested path, soorElsecan fall back instead of failing withSourceError. -
#2415
9cf3a25Thanks @gcanti! - FixEffect.trythunk usage andEffect.tryPromisemapper and signal handling defects.Effect.trynow supports passing a thunk directly, matchingEffect.tryPromise. Thrown values from direct-thunk usage are mapped toCause.UnknownError.When a promise handled by
Effect.tryPromiserejected and the customcatchmapper threw while mapping that rejection, the effect could remain pending and produce an unhandled rejection. The mapper is now guarded consistently with the synchronous throw path, so a thrown mapper error becomes an Effect defect. The JSDoc forEffect.tryandEffect.tryPromisewas also corrected.Effect.tryPromisenow also only creates anAbortControllerwhen the wrapped thunk declares anAbortSignalparameter. -
#2417
8def767Thanks @tim-smart! - deduplicate SqlResolver.findById requests
4.0.0-beta.85
Patch Changes
-
#2436
328d97cThanks @MohanedMashaly! - change default operation in redis from LPUSH TO RPUSH -
#2431
8441836Thanks @gcanti! - Derive template literal arbitraries from encoded parts, closes #2414. -
#2439
074e436Thanks @gcanti! - Allow schema class.extendto accept aStructand preserve checks from the extension schema, closes #2419. -
#2444
c1dfd60Thanks @bweis! - Avoid throwing whenError.stackTraceLimitis non-writable (frozen intrinsics / SES / deterministic sandboxes such as Temporal).Effect manipulates
Error.stackTraceLimitin several internal spots to capture short or empty stack traces cheaply. In hardened environments whereErroris frozen andstackTraceLimitis read-only, assigning to it throws, which broke Effect entirely. Stack-trace-limit manipulation is now best-effort and silently no-ops when the property cannot be modified, mirroring Node’s own internal guard. Behavior in normal (writable) environments is unchanged. -
#2425
2ba316bThanks @tim-smart! - Add Random.choice for selecting a random element from an iterable. -
#2434
7ce7344Thanks @gcanti! - Use semantic matching for TemplateLiteral parsing and index signature keysReplace regex-based TemplateLiteral parsing with backtracking segmentation over template literal parts, applying part checks during matching.
Use schema membership when selecting Record index signature keys, including checked string, number, symbol, and TemplateLiteral parameters. Tighten valid index signature parameters on both type and encoded sides, and preserve key parameter semantics in codec transformations.
4.0.0-beta.86
Patch Changes
-
#2462
0b5795aThanks @tim-smart! - AddStatement.valuesUnpreparedfor returning unprepared SQL statement rows as arrays. -
#2455
3e3a859Thanks @fubhy! - FixCron.nextskipping earlier matching days when the upcoming day-of-month does not exist in the current month. -
#2454
7dbec24Thanks @StarpTech! - Exclude response metadata from HTTP server span failures after response headers have been sent. -
#2449
d8c00a1Thanks @gcanti! - Fix Schema handling of encoded-side checks for container ASTs.Checks added after
flipare now preserved asencodingChecksacrossDeclaration,Arrays,Objects, andUnion, even when rebuilding the AST does not change child nodes.toTypenow projects those checks consistently, and parsing applies encoded-side checks to the local encoded value when an encoding chain is present without allowing encoded-sideparseOptionsannotations to affect the current parser side. -
#2446
85b6317Thanks @IMax153! - Allow schemas provided to CLI flags / arguments to utilize the environment required by the CLI -
#2452
6d0fda0Thanks @gcanti! - Remove thekeepDeclarationsoption fromSchema.toCodecStringTree. -
#2461
108a933Thanks @tim-smart! - Fail RpcClient HTTP requests with a defect when the response stream closes before the request receives a terminal response. -
#2442
7e1f455Thanks @gcanti! - Improve Schema type-level performance by lazily computing schema views, specializing common struct projections, and using lighter schema constraints at API boundaries that do not need the full schema protocol.This also adds the Schema type-performance benchmark suite, introduces
Schema.toCodecArrayFromSingle, preserves canonical StringTree array codecs, renames the arbitrary-generation annotation constraint for clarity, and updates affected codec, parser, channel, SQL, HTTP API, persistence, RPC, AI, OpenAPI, and workflow typings to match the refined Schema surface. -
#2464
46b3e79Thanks @tim-smart! - do not use performance.timeOrigin and calculate origins lazily
4.0.0-beta.87
Patch Changes
-
#2468
5a0c1a4Thanks @gcanti! - Expose the original input schema onSchema.toType,Schema.toEncoded,Schema.toCodecJson, andSchema.toCodecStringTreeresults via theschemaproperty. This aligns these schema wrappers with other wrappers that retain their source schema for type-level and runtime introspection. -
#2466
1eea2eaThanks @gcanti! - UseURL.canParseto validate URL string schema decoding before constructing aURL. This avoids relying on thrown exceptions for routine validation while preserving the same invalid URL issue and successful decode output.
4.0.0-beta.88
Patch Changes
-
#2472
911f1b8Thanks @tim-smart! - Add adaptive consume and feedback operations to the unstable persistent RateLimiterStore API, including in-memory and Redis-backed bounded cooldown, learning, learned pacing, and expiry behavior for 429 Retry-After feedback. -
#2457
8beeeeaThanks @P0lip! - Localize missing rpc method errors to the provided request id -
#2428
c306fcfThanks @MrGovindan! - AddisOpentoLatchto allow querying the latch’s open state
4.0.0-beta.89
Patch Changes
-
#2475
b7d46abThanks @tim-smart! - UpdateSchema.Voidto model ignoredvoidreturn values.Runtime parsing now accepts any present value and discards it as
undefined. This matches TypeScriptvoidreturn values, where callers do not observe the returned value. UseSchema.Undefinedwhen the input must be exactlyundefined. -
#2479
7777e15Thanks @tim-smart! - Add custom error callbacks to Effect.fromOption. -
#2480
5376197Thanks @tim-smart! - render causes in OtlpTracer exception events
4.0.0-beta.90
Patch Changes
- #2483
d237fdfThanks @tim-smart! - FixConfig.schemaso missing array values are treated as missing data, allowingConfig.withDefaultto apply.
4.0.0-beta.91 Latest
Patch Changes
-
#2498
b135b25Thanks @gcanti! - FixSchedule.andThenResultto emitselfoutputs asFailureandotheroutputs asSuccess, closes #2497. -
#2488
aaa21a3Thanks @fubhy! - FixString.camelCaseandString.pascalCasehandling of numeric word segments, and addString.configCasefor configuration key casing. -
#2485
3475ee6Thanks @tim-smart! - fix RequestResolver interruption