Repository navigation
Update effect to v4 - #295
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/major-effect
branch
6 times, most recently
from
October 14, 2026 23:21
5c2b43b to
601c4c6
Compare
renovate
Bot
force-pushed
the
renovate/major-effect
branch
from
October 17, 2026 12:31
601c4c6 to
19b335e
Compare
Contributor
|
Held: this is a migration, not a bump. Effect 4 merges This PR stays open for Renovate to keep rebasing. It wakes when that migration lands. At that point it is either closed as superseded or reviewed afresh against what remains. |
renovate
Bot
force-pushed
the
renovate/major-effect
branch
2 times, most recently
from
October 19, 2026 06:16
0e5426f to
43e4e1f
Compare
renovate
Bot
force-pushed
the
renovate/major-effect
branch
from
October 20, 2026 10:46
43e4e1f to
c9296b0
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
0.108.2→4.0.43.22.2→4.0.4Release Notes
Effect-TS/effect (@effect/platform-node)
v4.0.4Compare Source
Patch Changes
95a3ab7Thanks @jayhemnani9910! - Ignore a leading UTF-8 BOM when decoding Node HTTP request and response text, sojsonno longer fails on BOM-prefixed bodies.7547a99,711719d,251f849,8f1ea52,c93485e,37e088f,9314666,a0a26b7,cc843ea,ab90be9,a59b971,fccf660,1bfd8fd,78e4c43,fde67a1,118deef,cea74c9,b7c1ac6,f837966,09738f4,22e7129,fdcb47e,fc349a1,ab90be9,892d14d,077c557,4a999a3,797696a,cf5179b,e1c6053,5726c65]:v4.0.3Compare Source
Patch Changes
#8973
9dbd07eThanks @fubhy! - Accept address inputs inDns.reverseand name server inputs in the platformDnsservices, and addDns.nameServerFromInput.#8880
a9b5148Thanks @fubhy! - Add experimentalHost,Dns, andAddressResolvermodules toeffect/netfor host parsing, DNS queries, and endpoint resolution, with Node, Bun, and Deno services. DNS operations accept and normalize domain-name strings; endpoint resolution also acceptshost:portstrings. Add scoped IPv6 literals and host and DNS record schemas, including JSON codecs for records.Provide the services explicitly; they are not included in the platform
*Serviceslayers. UseNodeAddressResolver.layer.pipe(Layer.provideMerge(NodeDns.layer))to provide both Node services.#8409
b9e7821Thanks @tim-smart! - AddDatagramSocketfor UDP on Node, Bun, and Deno, andNetAddress.inetAddressFromNativeUnsafefor runtime-reported addresses.#8934
8e5ab22Thanks @tim-smart! - Esc now ends terminal key input by default, cancelling CLI prompts withTerminal.QuitError. To keep Esc non-cancelling, pass ashouldQuitpredicate tomake, such as(input) => input.key.ctrl && (input.key.name === "c" || input.key.name === "d")to quit only on Ctrl+C or Ctrl+D.#8978
0b17b9eThanks @tim-smart! - Allow WebSocket clients on Node and Bun to send handshake headers alongside subprotocols through socket constructors, channels, and layers. Preserve browser-compatible constructor calls when headers are not supplied.Updated dependencies [
b4e5af8,b8d6e7a,89d5c88,66257d2,cd2ab19,ca068ce,f686000,e052f1b,c755b69,ebe487f,63bfad8,8598157,76a03f7,182e26d,a46592a,1d3419e,e00eaae,133ceb2,a494a64,d6082a2,ee3a350,7ba976c,9dbd07e,d4f7dc3,a9b5148,e7d84e4,0e2b988,84f48df,48ed32f,59e58a6,b9e7821,aa811e4,bfc5742,f9f7a5a,73fa287,7ff5048,7803e51,93410da,8e5ab22,aef1d1f,d6d515b,ea52c24,7e44402,0b17b9e,9753be9,977096b,cf58cb0]:v4.0.2Compare Source
Patch Changes
#8770
540ecd1Thanks @fubhy! - Tag every module and directly importable export with an explicit@stability.@stability stablefollows strict semver, and@stability unstablemay receive breaking changes in minor releases.#8852
7d8d497Thanks @effect-bot! - Report the101status of a successful WebSocket upgrade to server middleware such asHttpMiddleware.loggerandHttpMiddleware.tracer, instead of the handler's discarded response status.#8846
48a373bThanks @tim-smart! - Fix keep-alive requests hanging during graceful HTTP server shutdown.Updated dependencies [
26c1089,6c59de7,467d3ac,375c1b0,45a70ce,fb757e3,716e358,af114e6,d0b3862,7064da9,eee0eeb,b9d6581,7a721ce,a0cb4c2,3cb395e,540ecd1,aefe05a,c381fbc,c6f2179,0aeb7fd,2fbecc8,7095539,46b75b1,99b6b45,e4cb9f1,2e03688,b817ebe,4153144,2b3c63c,bd00773,146e86a,44defad,22d6f4d,7d8d497,98a5ed7,d350f8e,bd96be0,f6af4b6,7234786,1f74b62,42763ce,5630677,a0e1b87,f5716ad,26931d0,972c80f,efebfa9,a3b4cf3,3ed997b,7b396bd,c07c144,8903b68,a84aa4e,88917eb,50a5686,c419a0e,d85a309,7e7ede6,1803500,495740d,985860d,e36abbb,c6086ee,0ac6ac8,90a1bae,b1d200c,1ba8521,1b35732,763b445,00f1cc7,d4f4bc8,f11526a,8781388,5326527,8409eb4,c5cf8ce,684ccdc,33303ea,b79fcb8,888a189,9b8200d,82303c1,76fcd89,f31e6b7,332d363,a6c7dcb,ec54070]:v4.0.1Compare Source
Patch Changes
#8678
f79b231Thanks @tim-smart! - Fix duplex socket readers throwing when a pull is interrupted or its scope closes during a read. Preserve consumed bytes in order across pull interruption and normal EOF, while discarding them when the reader scope closes.#8705
43416c4Thanks @tim-smart! - Create Node HTTP file response streams lazily and destroy them when body consumption ends, avoiding unused open streams when conditional or range handling discards a response.#8738
0f64715Thanks @tim-smart! - Fail refused WebSocket upgrades withSocketErrorinstead of hanging the request fiber, and skip HTTP response writes on destroyed sockets.Updated dependencies [
ed2cc2f,58a2ee8,bc44526,073bb47,2ec021e,cad1118,1672d9c,a81e4e6,f5c2a91,f79b231,498e72b,cabf123,a5b1d4e,878cb33,5e6f756,18dfb98,04706ef,f157482,f1aedb0,b5a2d4c,1c18c68,43416c4,d6ac8f9,1d9fb8c,20dcd50,42e5750,888e326,0b52bb4,e823e69,962647b,43fdcdc,1f89b8e,e1a521a]:v4.0.0Compare Source
Patch Changes
#8598
988c467Thanks @tim-smart! - Close server WebSockets with 1000 on success, 1001 on interruption, or 1011 on failure, while preserving explicit close codes. HTTP request scopes retain the handler's failure exit through response handling and middleware.#8633
2c552f2Thanks @IMax153! - Effect 4.0 is the first stable release of Effect v4. It replaces the 4.0.0 beta and release-candidate series, whose per-release notes remain below under the4.0.0-beta.*and4.0.0-rc.*headings. To upgrade from Effect 3, follow the migration guide.Packaging and versioning
effectand every@effect/*package.@effect/platform,@effect/rpc,@effect/cluster,@effect/cli,@effect/ai,@effect/sql,@effect/workflow,@effect/experimentaland similar packages are merged intoeffect. Separate packages remain only for platforms (@effect/platform-*), SQL drivers (@effect/sql-*), AI providers (@effect/ai-*), framework bindings (@effect/atom-*), OpenTelemetry, Vitest and tooling.effect/http,effect/http-api,effect/rpc,effect/cluster,effect/workflow,effect/ai,effect/cli,effect/sqlandeffect/schemaimport fromeffect/<area>. APIs tagged@stability unstablemay have breaking changes in minor releases. APIs without a stability tag follow semver.@stability unstable, because that dependency's releases can change them. This coversNodeRedis,DenoRedis,BunRedis,@effect/platform-node/Undiciand the undici dispatcher APIs, thewsoptions and re-exports in the platform packages, driver-specific options and clients in@effect/sql-clickhouse,@effect/sql-d1,@effect/sql-libsql,@effect/sql-mssql,@effect/sql-mysql2,@effect/sql-pgliteand@effect/sql-sqlite-do, the provider clients, models and generated schemas in the@effect/ai-*packages,@effect/opentelemetry, and thevitestre-export in@effect/vitest.effecthas no runtime dependencies.@effect/platform-deno,@effect/sql-pglite,@effect/ai-openai-compat,@effect/ai-typesafe,@effect/atom-react,@effect/atom-solid,@effect/atom-vue,@effect/openapi-generatorand@effect/doctest.@effect/docgennow lives in this repository.Core
Context.Service,FiberRefis replaced byContext.Reference,Causehas a flat structure, and many combinators were renamed. See the migration guide for the full list.Effect.tx, withTxRef,TxQueue,TxHashMap,TxPubSub,TxSemaphoreand relatedTx*data types.Clockseparates wall-clock time from monotonic time.Semaphore,Latch,LayerRef,ErrorReporter,ByteSize,NewtypeandCrypto.Arbitraryis now a native property-based testing module and no longer depends on fast-check.Schema
makeconstructors on every schema, and effectful decoding with services.SchemaRepresentationpowers JSON Schema (Draft-04, Draft-07, 2020-12 and OpenAPI 3.0/3.1) import and export, TypeScript code generation, and AI structured output.SchemaBinaryprovides a compact binary codec and is the default wire format for cluster transports.Platform, HTTP and RPC
HttpApisupports typed response headers, streaming and SSE responses, the HTTPQUERYmethod,HttpApiTestfor in-memory testing, and much faster type checking for large APIs.Sockethas a pull-based reader with backpressure and STARTTLS support. Network addresses are modeled byeffect/net.@effect/platform-denoadds full Deno support. The Node, Bun, Deno and browser packages all provide the platformCryptoservice, and the browser package adds IndexedDB support.Cluster and Workflow
DurableQueueand an in-memoryWorkflowEngineare available.ShardingConfiglimits. Shutdown, entity movement and persisted replies are more reliable.SQL
@effect/sql-pguses a built-in PostgreSQL client with pipelining, prepared statements and binary codecs, and no longer depends onpg.@effect/sql-sqlite-nodeuses Node's built-innode:sqliteand requires Node 22.16 or newer.SqlErrorexposes structured reasons such asUniqueViolation.AI
effect/aiaddsEmbeddingModel, theDecisionModelclassification and rating API, dynamic tools and tool approvals.CLI, Atom, observability and testing
effect/cliadds global flags, command aliases and examples, an interactive wizard mode, and shell completions for Bash, Zsh and Fish.effect/reactivityand the@effect/atom-*bindings add SSR hydration, stale-while-revalidate atoms and serializable RPC and HttpApi queries.@effect/opentelemetryaligns logs and spans with the OpenTelemetry specification.@effect/vitestruns property tests with the nativeArbitrarymodule and supports Vitest fixtures.Requirements
@effect/vitestand@effect/doctestrequire Vitest 5.@effect/atom-reactrequires React 19.@effect/platform-denorequires Deno 2.8.3 or newer.Updated dependencies [
cbfc7b4,5a81a6f,68b6394,5250ca6,5f9c9d1,3278821,83429b4,0af6d0c,927e01e,10d8524,35ac25a,29e0aa7,8783536,df77fff,ef7d77f,035e369,f72790c,aa19472,988c467,735b77b,e5f7d12,2c552f2]:v0.108.3Compare Source
Patch Changes
#8596
b57b7f6Thanks @tim-smart! - Close server-side WebSockets with a code that reflects how the socket run loop exited: 1000 on success, 1001 on interruption, and 1011 on failure.Updated dependencies [
54b7ea6,d0ceca1,97d80c9,e730f59,6bb0ea2,05803bd,0553466,2568ce7,a7209e4,0464667,9c29d45,70d4bdf]:Effect-TS/effect (effect)
v4.0.4Compare Source
Patch Changes
#9030
7547a99Thanks @effect-bot! - Bound sparse array indices inSchemaGetter.makeTreeRecord, used bySchema.fromURLSearchParamsandSchema.fromFormData. An indexed container with more than 20 holes is now returned as an object keyed by its index strings instead of a sparse array, and appending after the maximum array index no longer throws.#9083
711719dThanks @effect-bot! - Bound import-time stack detection probes to the frames they inspect, restoring the caller's stack trace limit afterward.#9041
8f1ea52Thanks @tim-smart! - Stop grouped RequestResolvers from retaining batch keys for the lifetime of the resolver. Equal keys are now matched by the pending batch map, so a key is dropped as soon as its batch stops pending, including after interruption.#9010
c93485eThanks @effect-bot! - Support an explicit clientservernamefor TLS socket upgrades without changing hostname behavior when omitted.#8990
37e088fThanks @bastiankistner! - Use decoded response aliases in generated HTTP clients. Render bare numbers with a standard leading finite check asSchema.Finite, preserving annotations and other checks.#8998
9314666Thanks @gchen0002! - OptimizeContext.pickfor zero or one service.#9048
a0a26b7Thanks @jayhemnani9910! - Fix zonedDateTime.addandDateTime.subtractto apply hours, minutes, seconds and milliseconds as elapsed time across DST transitions.#9008
cc843eaThanks @effect-bot! - AddtoolCallValidation: "deferred"for callers usingdisableToolCallResolution: true. Model-generated tool calls return withunknownparameters, including invalid parameters and undeclared tool names, even without a toolkit. Supported by the Anthropic, OpenAI, and OpenAI-compatible providers. Strict validation remains the default; provider-executed calls remain validated.#8979
ab90be9Thanks @tim-smart! - Add experimentaleffect/graphqlwith typed operations, middleware, HTTP and subscription transports, partial results, serializable errors and cursor pagination.#9052
a59b971Thanks @Tarekkharsa! - FixHttpClient.withRateLimiterreading aRetry-AfterHTTP date as a number of seconds.#9031
fccf660Thanks @effect-bot! - AddMcpServer.layerHttpRequestScopedfor serverless hosts such as Cloudflare Workers. Each POST is served by an MCP server owned by that request, so no fiber or timer outlives the request. The new layer accepts only sessionless protocol adapters such asv2026_07_28, with no subscription or session termination options.McpServer.layerHttpretains its long-lived server behavior.#9081
1bfd8fdThanks @hsyntax! - Tighten colliding bounds in place when exporting JSON Schema, instead of moving them intoallOf. This applies to numeric, length, item-count and property-count bounds, and an inclusive or exclusive bound implied by the other on the same side is dropped. For example,Schema.Naturalnow exportsminimum: 0, andSchema.Int.check(Schema.isGreaterThan(0))exportsexclusiveMinimum: 0without the safe-integerminimum.#9013
78e4c43Thanks @jayhemnani9910! - FixMultipart.toPersistedfailing for uploads named.or..and for long multi-byte file names.#8991
fde67a1Thanks @fubhy! - AddNetAddress.loopbackAddresses.#8992
118deefThanks @fubhy! - AddHost.toFullyQualified,Host.toRelative, andHost.parseHostsFile.#9046
cea74c9Thanks @effect-bot! - Persist outgoing cluster messages while the locally assigned shard is waiting for its lock.#9056
b7c1ac6Thanks @tim-smart! -Prompt.fromResponsePartsnow keeps streamed text and reasoning in stream order, and keeps partial text from unended text blocks.#8997
f837966Thanks @effect-bot! - Release the durable waits of losingDurableDeferred.raceAllbranches once the race settles, so a late completion such as a losingDurableClock.sleepno longer preempts and replays the continuing workflow#9053
09738f4Thanks @Tarekkharsa! - HonorRetry-AfterinHttpClient.retryTransient.#9019
22e7129Thanks @effect-bot! - Allow configuring Scalar's preferred authentication security scheme through HttpApiScalar without a TypeScript cast.#9069
fdcb47eThanks @effect-bot! - Fix cluster Sharding startup accessing storage-loop state before initialization, preventing a scheduler-dependent ReferenceError and delayed initial storage reads.#9049
fc349a1Thanks @jayhemnani9910! - FixSink.takeUntilandSink.takeUntilEffectdropping the element after a match. They now stop at the match and return the remaining input as leftovers.#8979
ab90be9Thanks @tim-smart! - AdddispatchEmptyNamedEventstoSsedecode options. It also dispatches an event that sets anevent:name but has nodata:line, which protocols such as graphql-sse use forcomplete.#9065
892d14dThanks @Abdullah1738! - Fix quadratic parsing time inSse.makeParserandSse.decodefor long lines split across many chunks.#9066
077c557Thanks @effect-bot! - Complete HTTP server spans synchronously before the request fiber exits, preventing completed spans from being lost during immediate runtime shutdown.#9029
4a999a3Thanks @effect-bot! - Clean up unused Anthropic bindings and make documentation-only imports type-only, preserving server-tool inputs and documentation links.#9062
797696aThanks @adam-r-kowalski! - Merge outer headers and cookies into a copy of a rawResponseinHttpServerResponse.toWeb, leaving the original headers unchanged. This supports immutable headers and prevents cookies from accumulating across requests that reuse a response. Responses with nothing to merge are returned unchanged.#9007
cf5179bThanks @effect-bot! - Wake a suspendedWorkflowEngine.executecaller as soon as its workflow has a final result, instead of waiting for the nextsuspendedRetrySchedulestep. A replay that suspends again does not spend a step of the schedule. WithClusterWorkflowEngine, only callers on the runner that owns the execution are woken early; other callers keep relying onsuspendedRetrySchedule.#9037
e1c6053Thanks @effect-bot! -HttpEffect.toWebHandlernow interrupts a streamed response body when the request is aborted after its headers were sent, even if the body is no longer being read, which releases the request scope.v4.0.3Compare Source
Patch Changes
#8977
b4e5af8Thanks @kitlangton! - Prevent crashes and premature interruption whenEffect.cached,Effect.cachedWithTTL, andEffect.cachedInvalidateWithTTLare synchronously re-entered.#8982
b8d6e7aThanks @Yi-111-a! - ExportCliOutput.displayWidthto measure terminal-cell widths using the same logic as built-in CLI help and tables.#8933
89d5c88Thanks @tim-smart! - RespectNO_COLORin CLI prompts and the command wizard, suppressing color and style escapes while preserving cursor and redraw controls.#8941
66257d2Thanks @Tanner-Scadden! - Hand cluster shards off one at a time whenShardingshuts down, after their entities and singletons have stopped, so live runners can take them over sooner. The handoff is best effort: its wait is bounded, and if it times out,releaseAllattempts to release the remaining locks. A runner that is shutting down no longer acquires new shards, and releasing a shard no longer waits forever on an entity whose id is also active on another shard.#8940
cd2ab19Thanks @Tanner-Scadden! - Fix cluster shard handoffs. Interrupts and stream acknowledgements now reach requests still draining on the previous owner, andRpcServeraccepts acknowledgements for active streams after a client's EOF. Volatile requests sent during a handoff wait, for at mostshardLockExpiration, until the shard can be served instead of repeatedly failing withEntityNotAssignedToRunner.#8897
ca068ceThanks @effect-bot! - Add separate migration and storage layers to cluster SQL storage so applications can use tables migrated by an owner conConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.