Effect v4 is currently in beta. This changelog tracks changes across all beta releases.
Overview
Effect v4 represents a major evolution of the Effect ecosystem with:- Unified versioning — All packages share a single version number
- Package consolidation — Many separate packages merged into core
effect - Unstable modules — New functionality under
effect/unstable/*paths - Performance improvements — Rewritten fiber runtime with reduced memory overhead
- Better tree-shaking — Aggressive bundle size optimization
Latest Beta Release: v4.0.0-beta.21
Fixes
- Fixed
Stream.withSpanoptions handling - Fixed
TxPubSub.publishandTxPubSub.publishAllto requireEffect.Transactionin return environment - Fixed MCP resource template parameter names resolving as
param0,param1 - Fixed
Schedule.reduceto persist state updates for synchronous combine functions - Fixed
TupleWithRestpost-rest validation to check each tail index sequentially - Constrained
HttpServerRequest.sourcetoobjecttype - Renamed
WorkflowEngine.layer(breaking change) - Fixed
Workflow.executionIdto use schemamakeUnsafe - Fixed spans never having parent span
New Features
- Added
Effect.findFirstandEffect.findFirstFilterfor short-circuiting effectful searches
Recent Changes
v4.0.0-beta.20
Breaking Changes:- Moved ChildProcess APIs into spawner service
- Reverted
Config.withDefaultto v3 behavior (eager values) - Changed default ErrorReporter severity to Info
- Added
ServiceMap.Keytype as base forServiceMap.ServiceandServiceMap.Reference - Added dedicated
AiErrormetadata interfaces per reason - Added
Model.ModelNameservice - Reverted
Effect.partitionto v3 behavior (accumulates failures, never fails)
v4.0.0-beta.19
Major Changes:- Added transactional STM modules:
TxDeferred,TxPriorityQueue,TxPubSub,TxReentrantLock,TxSubscriptionRef - Refactored transaction model: removed
Effect.atomic/Effect.atomicWith, addedEffect.withTxState - All Tx operations now return
Effect<A, E, Transaction>requiring explicitEffect.transaction(...)at boundaries - Removed
TxRandommodule
v4.0.0-beta.18
Fixes:- Fixed
Command.withGlobalFlagstype inference with mixed flag types - Ensured OpenAI JSON schemas for tool calls are properly transformed
v4.0.0-beta.17
Fixes:- Fixed
Schema.encodeKeysto encode non-remapped struct fields during encoding
v4.0.0-beta.16
New Features:- Added
SchemaParser.makeOptionandSchema.makeOptionfor constructing schema values asOption - Added
OptionFromUndefinedOrandOptionFromNullishOrschemas
- Fixed OpenAPI Multipart file upload schema generation
v4.0.0-beta.15
Fixes:- Fixed
Stream.groupedWithinto stop emitting empty arrays when schedule ticks fire while upstream is idle - Allowed creating standalone HTTP handlers from
HttpApiEndpoints - Fixed atom node timeout cleanup
- Refined
ExtractServicesto omit tool handler requirements when automatic tool resolution is disabled
- Refactored unstable CLI global flags to command-scoped declarations
- Removed
GlobalFlag.add,GlobalFlag.remove,GlobalFlag.clear - Added
Command.withGlobalFlags(...)as declaration API - Changed
GlobalFlag.settingconstructor to curried form
v4.0.0-beta.14
Changes:- Made CLI global settings directly yieldable (now extends
ServiceMap.Reference) - Renamed built-in globals:
GlobalFlag.CompletionsFlag→GlobalFlag.CompletionsGlobalFlag.LogLevelFlag→GlobalFlag.LogLevel
- Fixed
OpenApi.fromApipreserving multiple response content types for one status code
v4.0.0-beta.13
New Features:- Exposed
NoSuchElementErrorin stream-basedAtom.makeoverloads - Updated unstable schema variant helpers to use array-based arguments
- Added
Schedule.fixedfor fixed-interval scheduling
- Fixed request resolver batch fibers to run with request services
- Fixed
Schedule.fixeddouble-executing effects due to clock jitter - Used
identifierannotation as expected message when available
- Refactored built-in CLI options to use Effect services with
GlobalFlag - Added visibility for built-in flags in help output
- Enabled custom global flags via
GlobalFlag.add
v4.0.0-beta.12
New Features:- Added
Config.nestedcombinator to scope config under named prefix - Added
Random.nextBooleanfor generating random booleans - Added
Graph.toMermaidfor generating Mermaid diagrams - Fixed
HttpClient.retryTransientautocomplete - Fixed
Schema.encodeKeysto work withSchema.Class - Fixed
Atom.searchParamto decode initial URL values correctly - Added
Effect.annotateLogsScopedfor scoped log annotations
- Made fiber keepAlive setInterval evaluation lazy
- Used cause annotations for detecting client aborts
- Fixed LanguageModel stripping of resolved approval artifacts
- Fixed JSON-RPC serialization for non-batched requests
v4.0.0-beta.11
CLI Enhancements:- Added grouped subcommand support to
Command.withSubcommands - Added
Command.withExamplesto attach usage examples - Added
Command.annotateandCommand.annotateMergefor command metadata - Added
Command.withShortDescriptionfor subcommand listings - Added
Command.withAliasfor command aliases
- Added
Effect.validatefor validating collections while accumulating failures - Added
WorkflowEngine.layerfor in-memory workflow engine
- Fixed HashMap HAMT bit positions comparison
- Fixed unstable HTTP Headers prototype methods in for..in iteration
- Guarded keepAlive timer APIs for restricted runtimes
- Fixed
Queue.collectduplicating drained messages - Fixed
Schema.TupleWithRestaccepting inputs with missing post-rest elements - Added ErrorReporter module
v4.0.0-beta.10
New Features:- Added
unstable/encodingsubpath export - Exported Effect do notation APIs (
Do,bindTo,bind,let) - Added
Random.shuffleto shuffle iterables with seeded randomness
- Fixed race in
Semaphore.takewhere interruption could leak permits - Short-circuited
Fiber.joinAllwhen called with empty iterable - Simplified HTTP logger disabling
- Fixed
UrlParams.Inputusage in HTTP client and server - Renamed
HttpClient.retryTransientoptionmodetoretryOn
Migration from v3
For detailed migration instructions, see:Full Changelog
For the complete changelog with all beta releases and detailed change descriptions, see:Versioning
Effect v4 follows semantic versioning with special considerations for unstable modules:- Stable modules (e.g.
effect/Effect,effect/Schema) follow strict semver - Unstable modules (e.g.
effect/unstable/http) may receive breaking changes in minor releases - All packages in the Effect ecosystem share the same version number