Message Overview
The message docs cover the UI rendered for each row inside MessageList. The current API surface is broad because the SDK lets you replace the full row, the message body, attachment rendering, reactions, metadata, and several special-case headers independently.
Use this page as the entry point before drilling into the individual component docs.
Mental Model
Think about message rendering in layers:
MessageListrenders a list of messages.MessageItemViewrenders one message row.MessageContentrenders the bubble/body inside that row.- Attachments, reactions, replies, headers, status, and timestamps hang off that row/body structure.
MessageContextexposes the message-specific state used by the render tree.
If you only need lightweight decoration around the bubble, prefer the MessageContent*View slots instead of replacing the whole message row.
Start Here
- Change the overall message row layout:
MessageItemView - Change the bubble/body layout:
MessageContent - Read message-specific state in custom components:
MessageContext - Add lightweight UI around the bubble: Layout & Structure
- Customize attachments and previews: Attachments & Rich Content
- Customize replies and reactions: Replies & Reactions
- Customize timestamps, status, and message states: Status & Message State
- Customize pinned, reminder, and saved-for-later labels: Special Headers
Common Tasks
- Add UI above or below the message bubble:
MessageContentTopViewandMessageContentBottomView - Add inline spacing or decoration beside the bubble:
MessageContentLeadingViewandMessageContentTrailingView - Replace attachment rendering:
Attachmentand Custom Attachments - Customize reaction rendering: Replies & Reactions and Customize Message Reactions
- Customize timestamps or read state:
MessageStatusandMessageTimestamp - Customize special message labels:
MessageHeaderand Special Headers
Best Practices
- Start with the smallest override that solves the problem.
- Prefer dedicated subcomponent overrides over replacing
MessageItemViewwholesale. - Use
WithComponentsfor cross-screen UI overrides. - Use
Channelprops when the customization belongs to one chat surface. - Keep custom message rendering lightweight to avoid list performance regressions.