> 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.76.0

**`(fix):`** Add an opt-in `dedupe-union-base-properties` configuration flag (default off) that stops
duplicating a discriminated union's base properties on its `samePropertiesAsObject` variant
leaves. The decision is read from the IR fact
`ObjectTypeDeclaration.deferredUnionBaseProperties` (computed once in the IR with structural
type equality and an exclusive-variant guard), so the generator never re-derives it. When
enabled, the union envelope owns the shared base properties, the variant leaf class and its
example initializers omit them, and the union's JSON reader strips union-owned properties
before deserializing a variant. Off by default, so existing generated output is unchanged; the
default is expected to flip in a future major version with a migration.

## 2.75.0

**`(feat):`** Add support for auto-generating an `Idempotency-Key` header on generated SDK
clients, driven by the IR. When `sdkConfig.idempotencyKeyGeneration` is present
(configured once via the `auto-generate-idempotency-key` generator config key
and resolved by the CLI), the SDK attaches an idempotency-key request header
whose value is a freshly generated UUIDv4 (`System.Guid.NewGuid().ToString()`)
at request time. The wire header name and the eligible HTTP methods come from
the IR, so behavior is consistent across every generator. A caller-provided
value always wins: a declared idempotency header or a header supplied through
request-options takes precedence, and the generated UUID is only a fallback.
The header is only injected on the eligible methods. Disabled by default, so
existing generated output is unchanged.

## 2.74.0

**`(feat):`** Add support for server URL variables (region/edge routing). When an API's servers
declare URL variables (e.g. `https://api.{region}.example.com`), each variable is
now exposed as an optional string property on `ClientOptions` (idiomatic PascalCase,
e.g. `Region`). Variable names that collide with an existing client option are
prefixed with `ServerUrl` (e.g. an `environment` variable becomes `ServerUrlEnvironment`).
When set at construction time, the values are interpolated into the environment base
URL(s), falling back to each variable's default otherwise. Explicit `BaseUrl` or
`Environment` options take precedence, and interpolation fails clearly when a required
variable has neither a client option nor a default.

## 2.73.2

**`(fix):`** Enable automatic response decompression on the default HttpClient. The default client
is now created with an HttpClientHandler configured with AutomaticDecompression
(DecompressionMethods.All on .NET 5+, GZip | Deflate on older targets), so responses
with a Content-Encoding of gzip or deflate are decompressed transparently — including
when an Accept-Encoding request header is set explicitly by the API spec. User-supplied
HttpClients provided via ClientOptions are not modified.