# What changed in @effect/vitest

> 198 changes in @effect/vitest 4 from its official release notes, upgrade guides and advisories: 3 breaking, 1 security, 183 new APIs and options. Each one cited. Sources checked 2026-10-23. HTML: https://unstale.sh/npm/@effect/vitest/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @effect/vitest 4

### Breaking changes

- Synchronous callbacks returning an Effect or Promise are rejected instead of silently passing; callbacks must return a boolean or void. Use it.effect.prop for Effect callbacks. (4.0.6) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.6)
- Property tests run with the native Arbitrary module instead of relying on fast-check. (4.0.0) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.0)
- Vitest 5 is required to use @effect/vitest. (4.0.0) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.0)

### Security

- The decoder never reads external resources or expands entities declared in a DOCTYPE, preventing external entity and entity expansion attacks. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)

### New APIs and options

- Adds a range matching every release, written `*`. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Applies an edit script to an array. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Applies a text edit script to a string. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Checks whether a version's precedence is within an inclusive range. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds a constructor for ranges matching versions within inclusive bounds. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Returns the next major release. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Returns the next minor release. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Returns the next patch release. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Returns the first pre-release of the next major version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Returns the first pre-release of the next minor version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Returns the first pre-release of the next patch version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Returns the next pre-release. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds a constructor for ranges matching versions compatible with a version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Constrains a version's precedence to an inclusive range. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds a reason for a closed client, transport, or legacy HTTP session. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Computes a minimal code point edit script between two strings. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds an event interface for comment text. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a model for the numeric components and identifiers of a version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds an unstable combinator that joins byte chunks into one new Uint8Array. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/Bytes)
- Adds a reason for invalid client or toolkit options. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds the interface for a zip entry whose uncompressed content is held in memory. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Adds an interface for provider-specific response metadata keyed by provider name, which provider packages can augment. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/DecisionModel)
- Answers each decision with a Result containing a validated answer or a Decision.Unanswered reason; input encoding and provider failures still fail the effect, and token usage covers the whole call. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/DecisionModel)
- Adds an interface for per-decision outcomes, token usage, and response metadata for the whole request. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/DecisionModel)
- Adds an event interface for the XML declaration at the start of a document. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a channel that parses UTF-8 bytes of one JSON document and emits the elements of one of its arrays. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Creates a channel that decodes UTF-8 XML bytes into events. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Creates a channel that decodes zip archive bytes into entries. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Adds options for JSON array decoding. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Adds an interface for options for the XML decoders. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a channel that parses UTF-8 bytes of one JSON document and decodes array elements with a schema. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Adds a channel that parses JSON document text and decodes array elements with a schema. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Adds a channel that parses JSON document text and emits the elements of one of its arrays. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Creates a channel that decodes XML text chunks into events. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Computes a minimal edit script between arrays, comparing items with Equal.equals. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Classifies the change between two versions by release type. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Creates a function that computes a minimal edit script between arrays using a custom equivalence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds an event interface for a document type declaration. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a type representing one run of an edit script. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds an interface for a run of items present only in the before sequence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds an interface for a run of items present in both sequences. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds an interface for a run of items present only in the after sequence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds the element tree interface, including attributes and children, collected by elements. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Creates a channel that collects the elements at a path into trees. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds an interface for options for elements. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a channel that writes a stream of values as UTF-8 bytes of one JSON array. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Creates a channel that writes events as UTF-8 XML bytes. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Creates a channel that encodes entries into zip archive bytes. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Adds a channel that encodes values with a schema and writes them as UTF-8 bytes of one JSON array. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Adds a channel that encodes values with a schema and writes them as the text of one JSON array. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Adds a channel that writes a stream of values as the text of one JSON array. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Creates a channel that writes events as XML text. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds an event interface for an end tag. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds the interface for a zip entry consisting of a header and a stream of uncompressed body bytes. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Adds the type for the kind of object described by a zip entry. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Checks whether two versions are structurally equal, including build metadata. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds an unstable instance for comparing byte sequences for equality, byte by byte. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/Bytes)
- Provides structural equivalence for versions, including build metadata. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds the event type produced by decoders and consumed by encoders. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a constructor for a range matching exactly one version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds the interface for file entry options. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Adds the type for options on file entries whose content is streamed. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Formats a version as its canonical string, including pre-release identifiers and build metadata. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds canonical formatting for a range. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Converts a version, version string, or version components into a SemVer. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds conversion from a range or range string into a SemVerRange. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Converts a version, version string, or version components into a SemVer and throws SemVerError for invalid input. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds conversion from a range or range string into a SemVerRange, throwing SemVer.SemVerError for invalid input. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds a constructor for ranges matching versions with higher precedence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds a constructor for ranges matching versions with at least the given precedence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Checks whether a version has build metadata. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds the interface for zip entry metadata. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Creates a Streamable HTTP transport with request-owned JSON or SSE responses. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds a reason for non-success HTTP responses; JSON-RPC error bodies supply code, data, and description. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds the type of values accepted by fromInput: a version, version string literal, or version components. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds a type for values accepted by fromInput: a range or a range string. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Inverts an edit script so it turns after back into before. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Checks whether the first version has higher precedence than the second. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Checks whether the first version has higher or equal precedence than the second. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Checks whether a version is in initial development, meaning its major version is 0. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds a guard that checks whether a value is a JsonArrayError. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Checks whether the first version has lower precedence than the second. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Checks whether the first version has lower or equal precedence than the second. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Returns whether a value is an MCP client. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds a guard that checks whether a value is an McpClientError. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds a guard that checks whether a value is an McpClientError reason. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Checks whether a version has pre-release identifiers. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Checks whether a value is a SemVer. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Checks whether a value is a SemVerError. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds a check for whether a value is a SemVerRange. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Checks whether a value is a TextDiffError. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds a check for whether a value is an XmlError. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Checks whether a value is a ZipError. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Adds an error raised when JSON array encoding or decoding fails. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/JsonArray)
- Adds a type for JSON-RPC messages exchanged by MCP peers. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a schema for JSON-RPC messages exchanged by MCP peers. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a type for JSON-RPC notifications without a request identifier. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a schema for JSON-RPC notifications without a request identifier. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a type for JSON-RPC requests. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a schema for JSON-RPC requests. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a type for JSON-RPC responses carrying exactly one result or remote error. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a schema for JSON-RPC responses carrying a result or remote error. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Provides a connected MCP client over Streamable HTTP using the HTTP client. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Provides a connected MCP client over stdio using the child process spawner. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds a constructor for ranges matching versions with lower precedence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds a constructor for ranges matching versions with at most the given precedence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds a reason for a message or discovery scan exceeding a client limit. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Computes a minimal line-level edit script between two strings. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Constructs and connects a client using the supplied MCP transport service and its protocol adapter. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Creates a version from its components and throws SemVerError for invalid components. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds a check for whether a range matches a version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds an interface for controlling how pre-release versions match a range. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Returns the version with higher precedence, preferring the first on ties. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds selection of the matching version with the highest precedence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds an interface for a scoped connection to one MCP server. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds a service tag for applications that provide one default MCP connection. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds an error type that wraps MCP client or transport failure reasons. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds a union type for MCP client and transport failure reasons. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds a schema for the reasons carried by an McpClientError. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds the type for a zip entry's compression method. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Returns the version with lower precedence, preferring the first on ties. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds selection of the matching version with the lowest precedence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds an unstable instance that orders byte sequences lexicographically by unsigned byte value, placing a prefix before any longer sequence that starts with it. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/Bytes)
- Orders versions by Semantic Versioning precedence. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds an unstable type for a validated answer or the reason a decision is unanswered. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/Decision)
- Adds an unstable type for settled results keyed by decision name. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/Decision)
- Parses a strict Semantic Versioning 2.0.0 string. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds parsing for npm-style version ranges. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Parses a strict Semantic Versioning 2.0.0 string and throws SemVerError for invalid input. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds parsing for npm-style version ranges, throwing SemVer.SemVerError for invalid input. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds an event interface for a processing instruction. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a reason for JSON-RPC errors or messages invalid for the selected protocol. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds a type for supported MCP wire protocol revisions. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds an interface representing a provider refusal to answer a decision. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/DecisionModel)
- Removes pre-release identifiers and build metadata from a version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds names for version changes matching npm's release types. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds immutable Semantic Versioning values with strict parsing, canonical formatting, precedence ordering, and version bumps. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds an error for invalid version strings, ranges, or components. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds npm-style version ranges over SemVer values, preserving parsed syntax and matching according to node-semver pre-release rules. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds an event interface for a start tag, with attributes in document order. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Starts a scoped subprocess using newline-delimited JSON-RPC. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds an event interface for character data inside the root element. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds a module for computing, applying, and inverting edit scripts for arrays and text, and formatting line differences as unified diffs. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds an error returned when an edit script does not fit the input it is applied to. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds a constructor for ranges matching patch-level changes of a version. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVerRange)
- Adds a reason for an operation that does not complete within its deadline. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds a reason for tool-reported execution errors and retains the complete result. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Discovers remote tools and binds their handlers using the standard Toolkit implementation. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds an interface for exchanging JSON-RPC messages with one MCP server using its protocol adapter. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds a service supplied by the built-in MCP transport constructors and layers. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- Adds a reason for connection failures, including process or HTTP request start, write, read, or response-ending failures. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds an unstable interface describing the reason and description of the first failed answer validation check. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/Decision)
- Formats a line edit script as a unified diff. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/TextDiff)
- Adds a constant representing the MCP error code returned when a server does not support the protocol version requested by a client. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpSchema)
- Adds a reason for unsupported operations or tool results that cannot be converted for a language model. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds a reason for request payloads, tool arguments, or results that fail schema validation. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClientError)
- Adds a type for version string literals accepted by fromInput. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Replaces the build metadata of a version and throws SemVerError for invalid identifiers. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Replaces the pre-release identifiers of a version and throws SemVerError for invalid identifiers. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Adds an error raised when XML cannot be decoded or encoded. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Xml)
- Adds streaming ZIP archive encoding and decoding in Effect channels. Supports stored or deflated entries and ZIP64, but not encryption, other compression methods, or split archives. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Error raised when a zip archive cannot be encoded or decoded. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Creates a channel that decodes tar archive bytes into entries, streaming entry bodies from the archive input. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Creates a directory entry. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar), [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Creates a channel that encodes entries into tar archive bytes, streaming entry bodies back into archive bytes. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Defines a tar entry as a header and a stream of exactly header.size body bytes. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Provides options for the entry constructors. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar), [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Defines the kind of filesystem object described by a tar entry. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Creates a regular file entry from in-memory content. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar), [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Creates a regular file entry whose content is streamed from body. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar), [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Creates a hard link entry pointing at another entry of the archive. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Defines metadata of a tar entry. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Checks whether a value is a TarError. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Creates a symbolic link entry pointing at target. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Error raised when a tar archive cannot be encoded or decoded. (4.0.5) — [docs](https://effect.website/docs/v4/api/effect/encoding/Tar)
- Adds a service tag for the scheduled time of the cron run currently executing. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/cluster/ClusterCron)
- Adds a layer that detects terminal capabilities from Stdio and the current ConfigProvider. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/cli/TerminalCapabilities)
- Adds a layer that resolves directories for the host platform. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/persistence/UserDirectories)
- Adds a layer that resolves directories for a specified platform. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/persistence/UserDirectories)
- Creates a resolver that reads the environment from the current ConfigProvider on every call, using platform conventions. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/persistence/UserDirectories)
- Adds a service and interface for terminal rendering flags, including whether the current process can color, animate, or prompt. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/cli/TerminalCapabilities)
- Adds a type identifier for the UserDirectories service. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/persistence/UserDirectories)
- Adds a service tag and interface for resolving the directories where an application keeps its files. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/persistence/UserDirectories)

### Behavior and default changes

- Returns tool-reported errors as results; supplying a schema turns them into a ToolError reason that retains the original result. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/ai/McpClient)
- The module is experimental and may receive breaking changes in patch releases. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/encoding/Zip)
- Every module and directly importable export now has an explicit stability tag: stable follows strict semver, while unstable may receive breaking changes in minor releases. (4.0.2) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.2)
- Unless a CliOutput.Formatter is provided, built-in help, version, and error output follows canColor. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/cli/TerminalCapabilities)
- The default reads NO_COLOR, FORCE_COLOR, TERM, and the current process TTY state; the layer reads the same variables through ConfigProvider and the TTY state of Stdio. (4.0.0) — [docs](https://effect.website/docs/v4/api/effect/cli/TerminalCapabilities)

### Tooling

- Bumps a version by release type. (4.0.6) — [docs](https://effect.website/docs/v4/api/effect/SemVer)
- Vitest fixtures are supported. (4.0.0) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.0)

### Fixes and other changes

- Effects returned from beforeAll hooks are run with a Scope that closes when the suite finishes. (4.0.6) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.6)
- Effects returned from beforeEach hooks are run with a Scope that closes when the test finishes. (4.0.6) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.6)
- No longer throws a TypeError when no message is passed; shows the assertion diff instead. (4.0.1) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.1)
- No longer throws a TypeError when no message is passed; shows the assertion diff instead. (4.0.1) — [release notes](https://github.com/Effect-TS/effect/releases/tag/%40effect/vitest%404.0.1)
