# Migration to v0.14 URL: /docs/migrations/v0-14 Primitives migrate from components prop to children render functions. Children API for Primitives \[#children-api-for-primitives] Version 0.14 replaces the `components` prop on primitives with a children render function pattern. This gives you full control over rendering with simple inline logic. ThreadPrimitive.Messages \[#threadprimitivemessages] **Before:** ```tsx ``` **After:** ```tsx {({ message }) => { if (message.composer.isEditing) return ; if (message.role === "user") return ; return ; }} ``` MessagePrimitive.Parts \[#messageprimitiveparts] **Before:** ```tsx ``` **After:** ```tsx {({ part }) => { if (part.type === "text") return ; if (part.type === "reasoning") return ; if (part.type === "tool-call") return part.toolUI ?? ; return null; }} ``` `part.toolUI` and `part.dataRendererUI` \[#parttoolui-and-partdatarendererui] Tool-call parts now expose a `toolUI` property that resolves to the registered tool UI (via `useAssistantToolUI` / `makeAssistantToolUI`) or `null` if none is registered. Data parts similarly expose `dataRendererUI`. ```tsx // Renders the registered tool UI if available, otherwise ToolFallback if (part.type === "tool-call") return part.toolUI ?? ; // Renders the registered data renderer if available if (part.type === "data") return part.dataRendererUI ?? null; ``` Returning `null` \[#returning-null] Returning `null` from the children function renders registered tool UIs and data renderer UIs automatically via the registry. To explicitly render nothing (suppressing registered UIs), return `<>`. ```tsx {({ part }) => { if (part.type === "text") return ; return null; // registered tool/data UIs still render }} ``` ThreadPrimitive.Suggestions \[#threadprimitivesuggestions] **Before:** ```tsx ``` **After:** ```tsx {() => } ``` ThreadListPrimitive.Items \[#threadlistprimitiveitems] **Before:** ```tsx ``` **After:** ```tsx {() => } ``` Attachments \[#attachments] **Before:** ```tsx ``` **After:** ```tsx {() => } ``` `addResult` / `resume` on enriched part state \[#addresult--resume-on-enriched-part-state] When using the children API, tool-call parts include `addResult` and `resume` methods directly on the part object. This means `` works without needing a wrapper component to provide these methods. Backwards Compatibility \[#backwards-compatibility] The `components` prop is still supported on all primitives but is deprecated and will be removed in a future version. Getting Help \[#getting-help] If you encounter issues during migration: 1. Check the updated API documentation for detailed examples 2. Review the example applications in the repository 3. Report issues at [https://github.com/assistant-ui/assistant-ui/issues](https://github.com/assistant-ui/assistant-ui/issues)