> This page is for SDKs.

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 0.26.3

**`(fix):`** Skip the `Sec-WebSocket-Protocol` header in WebSocket connections. This header is
reserved for RFC 6455 subprotocol negotiation and is handled internally by tungstenite.
Previously, including it as a regular HTTP header caused tungstenite to fail the
handshake when the server didn't echo it back.

## 0.26.2

**`(chore):`** Include all optional fields as `Option<T>` parameters in convenience constructors.
Previously, `{variant}_with_{field}` constructors only accepted the promoted field and
defaulted all other optional fields to `None`. Now they accept all other optional fields
as `Option<T>` parameters, giving callers full control over all fields. For example,
`assistant_with_tool_calls` now accepts `(content: Option<Content>, ..., tool_calls: Vec<ToolCall>)`
instead of just `(tool_calls: Vec<ToolCall>)`.

## 0.26.1

**`(fix):`** Fix convenience constructors for union variants whose optional fields have nested
optional/nullable IR wrappers (e.g. `optional<nullable<string>>` from OpenAPI).
Previously only one layer was unwrapped, leaving the parameter as `Option<T>` instead
of `T`, which caused `E0308 mismatched types` compilation errors. Now all
optional/nullable layers are stripped to produce the correct bare type.

## 0.26.0

**`(feat):`** Generate convenience constructors for discriminated union variants with optional fields.
For each optional field in an inlined variant, a `{variant}_with_{field}` constructor is
generated that accepts the field as a required parameter (unwrapped from `Option<T>`) while
defaulting all other optional fields to `None`. For example, an `Assistant` variant with
optional `tool_calls` now gets an `assistant_with_tool_calls(tool_calls: Vec<ToolCall>)`
constructor.

## 0.25.1

**`(fix):`** Stop generating empty HTTP client stubs for WebSocket-only subpackages. When an AsyncAPI
channel creates a subpackage with no HTTP endpoints (e.g., `realtime`, `tts`), the generator
no longer emits redundant empty client structs in `resources/`. The actual WebSocket
functionality remains in `src/api/websocket/` via the `WebSocketChannelGenerator`. This
removes confusing name collisions between the empty HTTP-based `RealtimeClient` in resources
and the functional WebSocket-based `RealtimeClient` in the websocket module.

**`(fix):`** WebSocket connector now always auto-injects the Authorization header from the stored
client token, matching the TypeScript SDK experience where `client.realtime.connect()`
works without manually passing auth. Previously, channels with an explicit Authorization
header in the AsyncAPI spec required users to pass the token themselves.

## 0.25.0

**`(feat):`** Improve undiscriminated union design with `snake_case` method names, better variant naming,
deduplicating type references, and more.

## 0.24.1

**`(fix):`** Fix `mod.rs` module declarations not being removed for types inlined into discriminated
union variants. The generator was deleting the struct files for inlined types but still
emitting `pub mod` and `pub use` declarations for them, causing `error[E0583]: file not
found for module` compilation errors in generated SDKs.