> This page is for SDKs, 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.

## 1.70.11

**`(fix):`** XML-encoded (TwiML) types are generated one file per type (e.g. `twimlvoice/say.go` with its
`say_test.go`) instead of all into the package's `types.go`, which grew to tens of thousands of
lines for TwiML. Same package and public API; a type whose file name would collide with a file the
generator writes for other purposes (`types.go`, `client.go`, `doc.go`, `*_test.go`, ...) stays in
`types.go`.

## 1.70.10

**`(fix):`** Generated SDKs now use `reflect.Pointer` instead of the deprecated `reflect.Ptr` alias,
so `go vet` and golangci-lint on Go 1.26+ no longer report
"Constant reflect.Ptr should be inlined". No behavior change: `reflect.Pointer` has
been available since Go 1.18, which generated SDKs already require (they use generics).

## 1.70.9

**`(fix):`** Add the `xmlTextFirstBuilders` option (default `false`) for XML-encoded (TwiML) types. When
enabled, child builders take the element's text first and functional options for its
attributes — `r.Say("hi", twimlvoice.WithSayVoice("alice"), twimlvoice.WithSayLoop(2))`,
`r.Pause(twimlvoice.WithPauseLength(1))` — and the typed variant moves to `AddSay(&Say{...})`.
Every XML type gets a `<Type>Option` func type and one `With<Type><Attribute>(value)` option per
attribute, so pointer-typed optional attributes no longer need `api.String(...)`/`&v`.
Also adds a generic `Ptr[T any](v T) *T` helper next to the existing typed pointer helpers.