> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.
## 2.90.1
**`(fix):`** XML (TwiML) record types implement value equality: `Equals`/`GetHashCode` (and `==`) compare the
rendered XML, so `VoiceResponse.FromXml(xml).Equals(VoiceResponse.FromXml(parsed.ToXml()))` and
`new Say { Message = "x" }.Equals(new Say { Message = "x" })` are true. Previously the record
default compared the collection members by reference and was always false.
## 2.90.0
**`(feat):`** Add opt-in `user-agent-only` config. When enabled, generated clients send the `User-Agent`
header (including the structured form from `include-platform-headers`) but omit the
`X-Fern-Language`, `X-Fern-SDK-Name`, and `X-Fern-SDK-Version` headers. Disabled by default,
so existing generated output is unchanged. `omit-fern-headers` still takes precedence and drops
the `User-Agent` too.
**`(fix):`** Fix the generated `XmlElementTests` test project failing to compile because its `FakeNode` test
double did not implement `IXmlNode.ToXml(bool)`.
## 2.89.0
**`(feat):`** The generated `WebhooksHelper` HMAC verifier now accepts a per-call algorithm override via an optional `algorithm` parameter on `verifySignature`,
one of `sha1`, `sha256`, `sha384` or `sha512`. When omitted, the algorithm configured in
`webhook-signature` is used, so existing callers are unchanged. This lets one endpoint verify both
legacy HMAC-SHA1 (auth-token) and HMAC-SHA256 (shared-key) signed webhooks.
The verifier also logs a warning distinguishing an early failure (missing signature header) from a
failed verification (signature mismatch); it still returns `false` and never throws.
## 2.88.0
**`(feat):`** XML (TwiML) types keep text segments, typed child elements and raw `XmlElement` children in a
single ordered `Content` list, so `ToXml()` emits them in the order they were added
(`Response.Say(a).AddChild(custom).Say(b)` yields `ab`) and
`FromXml()` preserves document order, including the position of unknown elements and repeated
wrapper elements. Adds `AddText(string)` to XML types and `XmlElement` for mixed content such as
`Hi world`. Typed child properties and `AdditionalChildren`
remain available; `AdditionalChildren` is now derived from `Content`.
## 2.87.0
**`(feat):`** Support SDK variables (`variables` in `api.yml` / `x-fern-sdk-variables` in OpenAPI). Path
parameters bound to a variable via `x-fern-sdk-variable` are removed from endpoint
signatures and request types and are configured once on the client through the generated
`ClientOptions.` property. String variables that declare an `env` fall back to that
environment variable, and a variable that is still unset fails with a clear
`ArgumentException` before the request is sent.