> This page is for SDK, version Legacy.
> For other versions, use one of these documentation indexes:
> - Current (default): https://buildwithfern.com/learn/sdks/current/llms.txt
> - Legacy: https://buildwithfern.com/learn/sdks/legacy/llms.txt

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. For task-scoped instructions for coding agents working in a Fern project, see https://buildwithfern.com/learn/home/fern-instructions.md.

## 4.32.7

**`(fix):`** Dynamic snippets now pass a placeholder for a required file the example doesn't include
(`new File("path/to/file")`) and `Optional.empty()` for a missing optional file, instead of
`null`, which compiled but threw a `NullPointerException` in the SDK. This applies when
`inline-file-properties` is off and needs dynamic IR from a CLI that sets `isOptional` on file
properties; with older IR, missing files are still passed as `null`.

## 4.32.6

**`(fix):`** XML (TwiML) serialization drops characters outside the XML 1.0 `Char` production (e.g. `\u0001`) from text and attribute values instead of emitting XML that no parser accepts.

## 4.32.5

**`(fix):`** XML (TwiML) builders gain a varargs overload for list-valued attributes (`gather.input(GatherInputItem.DTMF,
GatherInputItem.SPEECH)`), a static `builder(text)` factory for types whose text content is required
(`Body.builder("hello")`), and typed child overloads under the legacy name when only the text setter used it
(`dial.number(Number)` next to `dial.number(String)`; `addNumber(Number)` is kept).