Last updated: 2026-04-03
This file tracks confirmed v13 to v14 breaking changes for stream-chat-react.
- Baseline:
v13.14.2..master - Primary evidence: source diff and current exports
- Secondary evidence: commit history, changelog entries, PR metadata
- Baseline tag:
v13.14.2 - Current audited SDK head:
6c7cd42afffb6d341b7a3b4bf5cc5a9bcd3f98ee(6c7cd42a,2026-04-03,fix(examples): enable async voice recording preview in thread composer (#3092)) - Future mining starting point: diff
6c7cd42afffb6d341b7a3b4bf5cc5a9bcd3f98ee..HEADfirst, then compare any newly confirmed changes back to the original v13 baseline before adding them here
Only confirmed items should move from this file into the migration guide.
confirmed: verified in current source against the v13 baselinelikely: strong signal, but still needs source-level confirmationruled-out: investigated and determined to not be a v13 to v14 breaking change
- Status: confirmed
- Area: contexts
- User impact: imports or usage of the HOC wrappers no longer compile; consumers must switch to hooks
- Old API:
withChannelActionContextwithChannelStateContextwithChatContextwithComponentContextwithMessageContextwithTranslationContextwithTypingContext
- Replacement: use the corresponding hooks directly inside function components
- Evidence:
v13.14.2:src/context/ChatContext.tsx:99exportedwithChatContextv13.14.2:src/context/ComponentContext.tsx:275exportedwithComponentContextv13.14.2:src/context/MessageContext.tsx:191exportedwithMessageContextgit greponv13.14.2finds all sevenwith*Contextexports undersrc/context- current
rgoversrc/contextreturns nowith*Contextexports - commit:
e0cd4f25 chore: remove with*Context HOC wrappers (#2962)
- Docs impact:
- migration guide
- context docs that still imply HOC availability
- Example needed: yes
BC-002: MessageIsThreadReplyInChannelButtonIndicator was replaced by MessageAlsoSentInChannelIndicator
- Status: confirmed
- Area: message UI overrides
- User impact:
- top-level imports using
MessageIsThreadReplyInChannelButtonIndicatorbreak ComponentContextoverride keys using the old name need to be renamed- custom docs/examples using the old component name are stale
- top-level imports using
- Old API:
v13.14.2:src/components/Message/index.ts:8exportedMessageIsThreadReplyInChannelButtonIndicatorv13.14.2:src/context/ComponentContext.tsx:133documentedMessageIsThreadReplyInChannelButtonIndicator
- New API:
src/components/Message/index.ts:7exportsMessageAlsoSentInChannelIndicatorsrc/context/ComponentContext.tsx:163documentsMessageAlsoSentInChannelIndicator
- Evidence:
git greponv13.14.2finds the old export, usage, and override key- current source exposes the new component name instead
- commit:
b1980290 feat: replace MessageIsThreadReplyInChannelButtonIndicator with MessageAlsoSentInChannelIndicator (#2968)
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: package entrypoints
- User impact:
- imports from the experimental entrypoint break if they still rely on
MessageActions - imports from the experimental entrypoint also break if they relied on
DefaultDropdownActionButton,MessageActionSetItem,useBaseMessageActionSetFilter, oruseSplitMessageActionSet
- imports from the experimental entrypoint break if they still rely on
- Old API:
v13.14.2:src/experimental/index.ts:1exportedMessageActionsv13.14.2:src/experimental/MessageActions/index.ts:1through:3re-exportedMessageActions,defaults, andhooks
- New API:
src/experimental/index.ts:1exports onlySearchsrc/components/index.ts:28exports stableMessageActionssrc/components/MessageActions/defaults.tsx:29exportsDefaultDropdownActionButtonsrc/components/MessageActions/MessageActions.tsx:33exportsMessageActionSetItemsrc/components/MessageActions/hooks/index.ts:1and:2exportuseBaseMessageActionSetFilteranduseSplitMessageActionSet
- Replacement: import
MessageActionsand related helpers from the main package entrypoint instead ofstream-chat-react/experimental - Evidence:
- v13 experimental entrypoint exported
MessageActions - v13 experimental
MessageActionsindex re-exported the related defaults and hooks - current experimental entrypoint does not
- current stable components entrypoint still exports
MessageActions - current stable
MessageActionsmodule now owns the helper exports that used to leak through the experimental entrypoint - commit:
1467b5c5 feat: promote experimental \MessageActions` to stable (#2908)`
- v13 experimental entrypoint exported
- Docs impact:
- migration guide
- v14 docs pages still linking to
src/experimental/MessageActions/MessageActions.tsx
- Example needed: yes
- Status: confirmed
- Area: message exports
- User impact:
- imports using
MessageDeletedfrom the package no longer resolve - consumers need to update imports to
MessageDeletedBubble
- imports using
- Old API:
v13.14.2:src/components/Message/index.ts:6exportedMessageDeletedv13.14.2:src/context/ComponentContext.tsx:131documentedMessageDeletedas the default deleted-message component
- New API:
src/components/Message/index.ts:5exportsMessageDeletedBubblesrc/context/ComponentContext.tsx:142still allows aMessageDeletedoverride prop, but the default component export is nowMessageDeletedBubble
- Evidence:
git greponv13.14.2finds the oldMessageDeletedcomponent export- current
src/components/Message/index.tsexportsMessageDeletedBubbleinstead - current
src/components/Message/MessageDeletedBubble.tsx:13definesMessageDeletedBubble - commit:
446de99a feat: redesign deleted message (#2964)
- Docs impact:
- migration guide
- any docs/examples importing
MessageDeleted
- Example needed: yes
- Status: confirmed
- Area: message UI overrides
- User impact:
- top-level imports using
MessageOptionsbreak - top-level imports using
MessageOptionsPropsbreak - deprecated
MessageOptionsoverride keys onChannelandComponentContextare no longer available - docs/examples still composed around
MessageOptionsneed to be updated toMessageActions
- top-level imports using
- Old API:
v13.14.2:src/components/Message/index.ts:9exportedMessageOptionsv13.14.2:src/context/ComponentContext.tsx:145exposed deprecatedMessageOptionsv13.14.2:src/components/Channel/Channel.tsx:129still carriedMessageOptionsthrough the supported override keys
- New API:
src/components/Message/MessageUI.tsx:82usesMessageActionssrc/context/ComponentContext.tsx:136exposesMessageActions- current source has no public
MessageOptionsexport
- Replacement: switch imports and overrides to
MessageActions - Evidence:
- v13 public message exports included
MessageOptions - v13
ComponentContextstill exposed it as a deprecated override - current source routes message actions through
MessageActions - current
rgoversrc/componentsandsrc/contextfinds no publicMessageOptionscomponent export or override prop
- v13 public message exports included
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md- message component docs still describing
MessageOptions
- Example needed: yes
- Status: confirmed
- Area: virtualized message rendering
- User impact:
- imports using
FixedHeightMessagebreak - imports using
FixedHeightMessagePropsbreak VirtualMessagecustomization is now typed aroundMessageUIComponentPropsinstead ofFixedHeightMessageProps- docs still saying
FixedHeightMessageis available are stale
- imports using
- Old API:
v13.14.2:src/components/Message/index.ts:1exportedFixedHeightMessagev13.14.2:src/context/ComponentContext.tsx:242typedVirtualMessageasReact.ComponentType<FixedHeightMessageProps>
- New API:
- current
src/components/Message/index.tsno longer exportsFixedHeightMessage src/context/ComponentContext.tsx:250typesVirtualMessageasReact.ComponentType<MessageUIComponentProps>
- current
- Replacement: provide a custom
VirtualMessagecomponent built againstMessageUIComponentProps - Evidence:
- v13 public message exports included
FixedHeightMessage - current
rgoversrc/componentsandsrc/contextfinds noFixedHeightMessage - current
VirtualMessagetyping no longer referencesFixedHeightMessageProps
- v13 public message exports included
- Docs impact:
- migration guide
- message UI docs that still mention
FixedHeightMessage
- Example needed: yes
- Status: confirmed
- Area: component customization
- User impact:
- code passing UI overrides directly to
Channelno longer type-checks against currentChannelProps - migration guidance needs to point users to
WithComponents/ComponentContextfor UI overrides - the current
Channeldocs page is structurally stale because it still documents many override props asChannelprops Channelwithout an active channel no longer defaults to rendering nothing; it now rendersEmptyStateIndicatorunless you explicitly passEmptyPlaceholder={null}
- code passing UI overrides directly to
- Old API:
v13.14.2:src/components/Channel/Channel.tsx:94definedChannelPropsForwardedToComponentContextv13.14.2:src/components/Channel/Channel.tsx:120through:130included overrides likeMessage,MessageActions,MessageDeleted,MessageOptions, andMessageRepliesCountButtonv13.14.2:src/components/Channel/Channel.tsx:202documentedEmptyPlaceholderas defaulting tonull
- New API:
src/components/Channel/Channel.tsx:93defines a narrowerChannelPropssurface without those forwarded component overridessrc/context/WithComponents.tsx:7exposesWithComponentsfor override injection viaComponentContextsrc/components/Channel/Channel.tsx:130documentsEmptyPlaceholderas defaulting to the messageEmptyStateIndicator, withnullas the opt-outsrc/components/Channel/Channel.tsx:183through:186now resolve the no-active-channel placeholder fromEmptyStateIndicatorunlessEmptyPlaceholderis explicitly present in propsREADME.md:65documentsWithComponentsas the customization path
- Replacement:
- move UI overrides from
Channelprops toWithComponentsor a directComponentContextprovider - pass
EmptyPlaceholder={null}if you need the old βrender nothing when no channel is activeβ behavior
- move UI overrides from
- Evidence:
- v13 explicitly forwarded a large override subset from
ChanneltoComponentContext - current
ChannelPropsno longer define that forwarded subset - current source exports
WithComponentsas the override helper - current
Channelnow derives its empty placeholder fromEmptyStateIndicatorunless the prop is explicitly present
- v13 explicitly forwarded a large override subset from
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.md- any v14 docs that still present component overrides as
Channelprops
- Example needed: yes
- Status: confirmed
- Area: message customization
- User impact:
- custom message UIs using
useMessageContext()can no longer rely onclearEditingState,editing,handleEdit,setEditingState,additionalMessageInputProps, orcustomMessageActions - imports using the
CustomMessageActionstype no longer compile handleDeletehandlers wired as(event, options)no longer match the current context type
- custom message UIs using
- Old API:
v13.14.2:src/context/MessageContext.tsx:30exportedCustomMessageActionsv13.14.2:src/context/MessageContext.tsx:41clearEditingStatev13.14.2:src/context/MessageContext.tsx:43editingv13.14.2:src/context/MessageContext.tsx:52handleDelete(event, options?)v13.14.2:src/context/MessageContext.tsx:57handleEditv13.14.2:src/context/MessageContext.tsx:95setEditingStatev13.14.2:src/context/MessageContext.tsx:97additionalMessageInputPropsv13.14.2:src/context/MessageContext.tsx:103customMessageActions
- New API:
src/context/MessageContext.tsx:39handleDelete(options?)src/context/MessageContext.tsx:114showAvatarsrc/context/MessageContext.tsx:141translationViewsrc/context/MessageContext.tsx:143setTranslationView
- Replacement:
- delete handlers should call
handleDelete(options?)without an event argument - edit flows now go through
MessageComposer; current default message actions calluseMessageComposer().initState({ composition: message })insrc/components/MessageActions/defaults.tsx:163 - custom message actions need to be implemented through the new
MessageActionscustomization surface instead ofcustomMessageActions
- delete handlers should call
- Evidence:
- current
MessageContextValueremoves the old edit-state and custom-action fields - current
useDeleteHandlersignature changed from(event, options?)to(options?)insrc/components/Message/hooks/useDeleteHandler.ts - current default edit action uses
MessageComposerinstead ofhandleEdit
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/02-message_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/05-message_ui.md- message cookbook pages using
handleDeleteor removed edit-state fields
- Example needed: yes
- Status: confirmed
- Area: message composer customization
- User impact:
- custom composer UIs using
useMessageComposerContext()can no longer rely oncooldownInterval,cooldownRemaining, orsetCooldownRemaining - inherited docs that still treat cooldown state as part of
MessageComposerContextare stale
- custom composer UIs using
- Old API:
v13.14.2:src/context/MessageInputContext.tsx:7composedMessageInputContextValuefromMessageInputHookProps,MessageInputProps, andCooldownTimerState
- New API:
src/context/MessageComposerContext.tsx:7composesMessageComposerContextValuefromUseMessageComposerBindingsParamsandMessageComposerPropsonlysrc/components/MessageComposer/hooks/index.ts:4exportsuseCooldownRemainingsrc/components/MessageComposer/hooks/useCooldownRemaining.tsx:16provides the remaining cooldown valuesrc/components/MessageComposer/hooks/useIsCooldownActive.ts:9provides a boolean cooldown-state helper
- Replacement: read cooldown state via
useCooldownRemaining()/useIsCooldownActive()instead ofuseMessageComposerContext() - Evidence:
- current
MessageComposerContextValueno longer includes the old cooldown state fields - current public hooks expose cooldown state directly from channel state
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/02-message_input_context.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/05-message-input/01-input_ui.md
- Example needed: yes
- Status: confirmed
- Area: attachment customization
- User impact:
- custom
Attachmentwrappers using the oldGalleryprop no longer type-check - attachment docs describing separate
galleryandimagerender paths are stale against current code Mediacustom components now receiveVideoPlayerPropsinstead ofReactPlayerProps
- custom
- Old API:
v13.14.2:src/components/Attachment/Attachment.tsx:72exposedGallery?: React.ComponentType<GalleryProps>v13.14.2:src/components/Attachment/Attachment.tsx:80typedMediaasReact.ComponentType<ReactPlayerProps>
- New API:
src/components/Attachment/Attachment.tsx:71exposesModalGallery?: React.ComponentType<ModalGalleryProps>src/components/Attachment/Attachment.tsx:75exposesGiphy?: React.ComponentType<GiphyAttachmentProps>src/components/Attachment/Attachment.tsx:81typesMediaasReact.ComponentType<VideoPlayerProps>- current attachment rendering groups image and video attachments into the
mediapath instead of separategallery/imagecontainers
- Replacement:
- rename
Galleryoverrides toModalGallery - update custom media players to the
VideoPlayerPropscontract
- rename
- Evidence:
- current
AttachmentPropsno longer defineGallery - current attachment docs in code refer to
ModalGallery,Giphy, andVideoPlayerProps
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/11-attachment/01-attachment.md
- Example needed: yes
- Status: confirmed
- Area: component overrides
- User impact:
- apps using
WithComponentsorComponentContextwith old override keys will need renames or rewrites - the v14
ComponentContextdocs are still only partially aligned with current source
- apps using
- Confirmed key changes:
MessageNotification->NewMessageNotificationReactionsListModal->MessageReactionsDetailMessageIsThreadReplyInChannelButtonIndicator->MessageAlsoSentInChannelIndicatorMessageDeletedBubbleadded as the default deleted-message bubble overrideCustomMessageActionsListremovedEditMessageInputremovedEditMessageModalremovedFileUploadIconremovedMessageOptionsremovedQuotedPollremoved
- Old API evidence:
v13.14.2:src/context/ComponentContext.tsxexported the removed/old keys above
- New API evidence:
src/context/ComponentContext.tsx:144MessageDeletedBubblesrc/context/ComponentContext.tsx:149NewMessageNotificationsrc/context/ComponentContext.tsx:163MessageAlsoSentInChannelIndicatorsrc/context/ComponentContext.tsx:187MessageReactionsDetail
- Replacement notes:
- notification override: use
NewMessageNotification - reactions detail override: use
MessageReactionsDetail - old message-options customization should move to
MessageActions - file-upload icon customization should move to
AttachmentSelectorInitiationButtonContents - edit-message customization needs re-evaluation against the new composer/edit-preview surface
- notification override: use
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: message list notifications
- User impact:
- imports using
MessageNotificationorScrollToBottomButtonno longer compile - imports using
MessageNotificationPropsno longer compile - imports using
MessageListNotificationsorMessageListNotificationsPropsno longer compile - custom
MessageListNotificationsimplementations built against the v13 prop contract no longer type-check because the component no longer exists MessageListandVirtualizedMessageListnow render the new notification and scroll controls plusNotificationListdirectly- client-side
client.notificationsare now rendered throughNotificationList, so message-list notification customization can needNotificationList/panel/fallbackPanelhandling instead of only overridingMessageListNotifications - custom CSS targeting the old
ScrollToBottomButtonorUnreadMessagesSeparatormarkup and classnames no longer matches <UnreadMessagesSeparator unreadCount={...} />now shows the unread count by default and renders a mark-read button unless you override that behavior
- imports using
- Old API:
v13.14.2:src/components/MessageList/index.ts:5exportedMessageNotificationv13.14.2:src/components/MessageList/index.ts:6exportedScrollToBottomButtonv13.14.2:src/components/MessageList/index.ts:4exportedMessageListNotificationsv13.14.2:src/components/MessageList/MessageListNotifications.tsx:30exposedMessageListNotificationsPropswithMessageNotification,hasNewMessages,isMessageListScrolledToBottom,isNotAtLatestMessageSet,scrollToBottom,threadList, andunreadCountv13.14.2:src/components/MessageList/UnreadMessagesSeparator.tsx:6documentedshowCountas disabled by defaultv13.14.2:src/components/MessageList/UnreadMessagesSeparator.tsx:23through:29rendered only plain separator textv13.14.2:src/components/MessageList/ScrollToBottomButton.tsx:71through:90rendered the old floating-action-button markup and unread counter classes
- New API:
src/components/MessageList/index.ts:4exportsNewMessageNotificationsrc/components/MessageList/index.ts:5exportsScrollToLatestMessageButtonsrc/components/Notifications/index.ts:3exportsNotificationListsrc/components/Notifications/NotificationList.tsx:15through:33defineNotificationListPropsaroundclassName,enterFrom,filter,panel,fallbackPanel, andverticalAlignment- current
src/components/MessageList/index.ts:1through:8export noMessageListNotifications src/context/ComponentContext.tsx:151through:153exposeMessageListMainPanelandNotificationList, but noMessageListNotificationssrc/components/MessageList/MessageList.tsx:402through:470renderUnreadMessagesNotification,NewMessageNotification,ScrollToLatestMessageButton, andNotificationListdirectlysrc/components/MessageList/VirtualizedMessageList.tsx:493through:600render the same notification stack directlysrc/components/MessageList/UnreadMessagesSeparator.tsx:20defaultsshowCounttotruesrc/components/MessageList/UnreadMessagesSeparator.tsx:24through:43render a text wrapper plus a mark-read buttonsrc/components/MessageList/ScrollToLatestMessageButton.tsx:87through:104render aButtonplusBadge-based unread counter with new classnames
- Replacement:
- rename imports to
NewMessageNotificationandScrollToLatestMessageButton - customize the notification UI through the
NewMessageNotificationoverride instead of the removedMessageNotification - stop overriding or importing
MessageListNotifications; useNotificationListfor emitted client notifications andMessageListMainPanel/ the current message-list override points for layout-level customization - use
NotificationListwhen you need to customize client-side notifications or panel-scoped notification rendering - if you need the old unread-separator behavior, pass
showCount={false}or provide a customUnreadMessagesSeparator - audit custom CSS selectors and tests against the new unread-separator and scroll-button markup
- rename imports to
- Evidence:
- v13
MessageListandVirtualizedMessageListpassedMessageNotificationintoMessageListNotifications - current
MessageListNotificationsfile is deleted and the component is no longer exported - current
MessageListandVirtualizedMessageListrender the renamed controls plusNotificationListdirectly - current
NotificationListis the exported client-notification surface and is whatMessageList,VirtualizedMessageList,ChannelList, andThreadListnow wire by default - current
UnreadMessagesSeparatorchanged its defaultshowCountbehavior and adds a mark-read button wired tomarkRead() - current scroll button UI uses
Button/Badgemarkup and different classnames from the v13 floating action button - commit
12d075bb feat: redesign floating indicators in message lists (#2966)also calls out removed--str-chat__jump-to-latest-message-*CSS variables and markup changes
- v13
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/04-guides/05-channel_read_state.mddocs/data/docs/chat-sdk/react/v14/04-guides/13-notifications.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/01-message_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/03-message_list_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/04-virtualized_message_list_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
BC-013: dedicated edit-message form/modal APIs were removed in favor of MessageComposer-based editing
- Status: confirmed
- Area: message editing
- User impact:
- imports using
EditMessageForm,EditMessageModal,EditMessageModalProps,useEditHandler, orEditHandlerReturnTypeno longer compile ComponentContextand oldChanneloverride keys forEditMessageInput/EditMessageModalno longer exist- custom edit-message flows built around the old modal/form contract need to be rewritten around
MessageComposer MessageInputProps.clearEditingStateno longer exists as a public escape hatch for custom edit flows
- imports using
- Old API:
v13.14.2:src/components/MessageInput/index.ts:13exportedEditMessageFormv13.14.2:src/components/MessageInput/EditMessageForm.tsx:71exportedEditMessageModalv13.14.2:src/components/Message/hooks/index.ts:3exporteduseEditHandlerv13.14.2:src/components/MessageSimple.tsx:162renderedEditMessageModalv13.14.2:src/context/ComponentContext.tsx:100and:101exposedEditMessageInput/EditMessageModal
- New API:
- current
src/components/MessageComposer/index.tsno longer exportsEditMessageForm src/context/ComponentContext.tsx:117exposesEditedMessagePreviewinsteadsrc/components/MessageComposer/EditedMessagePreview.tsx:5defines the new edit preview override surfacesrc/components/MessageComposer/MessageComposer.tsx:33exposesMessageComposerPropsinstead of the oldMessageInputPropssurfacesrc/components/MessageComposer/MessageComposerUI.tsx:107through:115renderEditedMessagePreviewfrom the activeMessageComposerstatesrc/components/MessageComposer/hooks/useSubmitHandler.ts:47clears edit state throughmessageComposer.clear()
- current
- Replacement:
- switch custom edit flows to
MessageComposer - customize the edit preview with
EditedMessagePreview - use the standard composer send/cancel flow instead of the removed modal wrapper
- call
messageComposer.clear()or the current composer actions instead of a removedclearEditingStateprop
- switch custom edit flows to
- Evidence:
- v13 exported a dedicated edit form/modal pair and an edit-state hook
- current source removed those exports and routes edit state through
MessageComposer - current
MessageInputFlatrenders edit state as a composer preview rather than a special modal
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/04-message_hooks.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/01-message_input.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: message input cooldowns
- User impact:
- custom cooldown UIs using
CooldownTimerProps,CooldownTimerState, oruseCooldownTimer()no longer compile <CooldownTimer cooldownInterval={...} />no longer matches the current component contract
- custom cooldown UIs using
- Old API:
v13.14.2:src/components/MessageInput/CooldownTimer.tsx:4exportedCooldownTimerPropswithcooldownIntervalandsetCooldownRemainingv13.14.2:src/components/MessageInput/CooldownTimer.tsx:8expectedcooldownIntervalas a prop- root exports included
CooldownTimerProps,CooldownTimerState, anduseCooldownTimer
- New API:
src/components/MessageComposer/CooldownTimer.tsx:4exports a zero-propCooldownTimersrc/components/MessageComposer/CooldownTimer.tsx:5reads state fromuseCooldownRemaining()src/components/MessageComposer/hooks/index.ts:4exportsuseCooldownRemainingsrc/components/MessageComposer/hooks/index.ts:5exportsuseIsCooldownActive
- Replacement:
- render
<CooldownTimer />without props - use
useCooldownRemaining()/useIsCooldownActive()for custom cooldown logic
- render
- Evidence:
- current root export comparison removes
CooldownTimerProps,CooldownTimerState, anduseCooldownTimer - current
CooldownTimerimplementation no longer receives or mutates cooldown state via props
- current root export comparison removes
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/02-message_input_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/03-message_input_hooks.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/05-message-input/01-input_ui.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: reactions
- User impact:
- imports using
ReactionsListorSimpleReactionsListno longer compile - imports using
ReactionsListModalno longer compile - imports using
ReactionsListModalPropsno longer compile - the
ReactionsListcomponent override key must be renamed toMessageReactions - the
ReactionsListModalcomponent override key must be renamed toMessageReactionsDetail - custom
ReactionSelectorcomponents can no longer rely on props likeAvatar,detailedView,latest_reactions,reaction_counts,reaction_groups,reactionOptions, orreverse - custom CSS targeting the old reaction selector or reactions-detail markup no longer matches
- imports using
- Old API:
v13.14.2:src/components/Reactions/index.ts:2exportedReactionsListv13.14.2:src/components/Reactions/index.ts:3exportedReactionsListModalv13.14.2:src/components/Reactions/index.ts:4exportedSimpleReactionsListv13.14.2:src/context/ComponentContext.tsx:181exposedReactionsListv13.14.2:src/context/ComponentContext.tsx:183exposedReactionsListModalv13.14.2:src/components/Reactions/ReactionsList.tsx:20typedReactionsListPropsv13.14.2:src/components/Reactions/SimpleReactionsList.tsx:48typedSimpleReactionsListPropsv13.14.2:src/components/Reactions/ReactionSelector.tsx:17exposed a wide prop surface includingAvatar,detailedView,latest_reactions,reaction_counts,reaction_groups,reactionOptions, andreversev13.14.2:src/components/Reactions/ReactionsListModal.tsx:15typedReactionsListModalPropsasModalProps & ...v13.14.2:src/components/Reactions/ReactionsListModal.tsx:65through:133rendered modal-based detail markup understr-chat__message-reactions-details*v13.14.2:src/components/Reactions/ReactionSelector.tsx:143through:219rendered tooltip/avatar/count-heavy selector markup and the old class names
- New API:
src/components/Reactions/index.ts:2exportsMessageReactionssrc/components/Reactions/index.ts:3exportsMessageReactionsDetailsrc/context/ComponentContext.tsx:190exposesMessageReactionssrc/context/ComponentContext.tsx:193exposesMessageReactionsDetailsrc/components/Reactions/MessageReactions.tsx:30definesMessageReactionsPropssrc/components/Reactions/ReactionSelector.tsx:13narrowsReactionSelectorPropstohandleReactionandown_reactionssrc/components/Reactions/reactionOptions.tsx:18now supports the newquick/extendedreaction-options shape in addition to legacy arrayssrc/components/Reactions/MessageReactionsDetail.tsx:14definesMessageReactionsDetailPropswithoutModalPropssrc/components/Reactions/MessageReactionsDetail.tsx:75through:161render dialog content understr-chat__message-reactions-detail*src/components/Reactions/ReactionSelector.tsx:82through:140render the new quick/extended selector markup understr-chat__reaction-selector*
- Replacement:
- rename
ReactionsListimports and override keys toMessageReactions - rename
ReactionsListModalimports and override keys toMessageReactionsDetail - stop relying on
SimpleReactionsList; either useMessageReactionsdirectly or build a custom compact list around the current reaction data andreactionOptions - move reaction-option customization to
ComponentContext.reactionOptionsor the list components that still acceptreactionOptions - rewrite custom
ReactionSelectorwrappers to useMessageContextandComponentContextinstead of the removed prop-driven API - wrap
MessageReactionsDetailin your own dialog/modal only if you truly need standalone modal usage; the default v14 surface is dialog content - audit reaction selector/detail CSS selectors and class-based tests against the new markup
- rename
- Evidence:
- current root export comparison removes
ReactionsListandSimpleReactionsList - current root export comparison removes
ReactionsListModal - current default message UI renders
MessageReactionsplusMessageReactionsDetail - current
ReactionSelectorPropsremoved the old display and data-prop overrides - current details component dropped
ModalPropsand no longer renders its own modal container - current selector/detail implementations switched to new class namespaces and aria-based state instead of the old tooltip/avatar/count structure
- commit
a941ed25 feat: message reactions detail redesign (#2963)and24a11690 feat: add ReactionSelector styling + cleanup (#2916)explicitly call out the markup/class changes
- current root export comparison removes
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/12-reactions.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/02-reactions.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: polls
- User impact:
- imports using
QuotedPoll,AddCommentForm,EndPollDialog, orSuggestPollOptionFormno longer compile - imports using
AddCommentFormProps,EndPollDialogProps,FullPollOptionsListingProps, orPollResultsPropsno longer compile Pollno longer acceptsisQuoted- old
PollActionscustomization names and prop contracts are partially changed PollActionsPropsno longer exposesAddCommentFormorEndPollDialog- custom
PollOptionsFullList,PollResults,PollAnswerList, andSuggestPollOptionFormoverrides can no longer rely on passedcloseprops
- imports using
- Old API:
v13.14.2:src/components/Poll/index.ts:9exportedQuotedPollv13.14.2:src/components/Poll/Poll.tsx:7acceptedisQuoted?: booleanv13.14.2:src/components/Poll/PollActions/index.ts:1exportedAddCommentFormv13.14.2:src/components/Poll/PollActions/index.ts:2exportedEndPollDialogv13.14.2:src/components/Poll/PollActions/index.ts:7exportedSuggestPollOptionFormv13.14.2:src/components/Poll/PollActions/PollActions.tsx:58and:59exposedAddCommentForm/EndPollDialogoverride propsv13.14.2:src/components/Poll/PollActions/PollActions.tsx:61and:62typedPollOptionsFullList/PollResultswithFullPollOptionsListingProps/PollResultsPropsv13.14.2:src/components/Poll/PollActions/PollOptionsFullList.tsx:14exportedFullPollOptionsListingPropsv13.14.2:src/components/Poll/PollActions/PollResults/PollResults.tsx:21exportedPollResultsPropsv13.14.2:src/components/Poll/PollActions/PollAnswerList.tsx:21through:24typedPollAnswerListPropswithclose?: () => voidv13.14.2:src/components/Poll/PollActions/SuggestPollOptionForm.tsx:12through:15typedSuggestPollOptionFormPropswithclose: () => void
- New API:
- current
src/components/Poll/index.tsno longer exportsQuotedPoll src/components/Poll/Poll.tsx:6accepts only{ poll }src/components/Poll/PollActions/index.ts:1exportsAddCommentPromptsrc/components/Poll/PollActions/index.ts:2exportsEndPollAlertsrc/components/Poll/PollActions/index.ts:7exportsSuggestPollOptionPromptsrc/components/Poll/PollActions/PollActions.tsx:47exposesAddCommentPrompt/EndPollAlert, whileSuggestPollOptionFormremains as the override prop name but now points atSuggestPollOptionPromptsrc/components/Poll/PollActions/PollActions.tsx:50and:51typePollOptionsFullList/PollResultsas genericReact.ComponentTypesrc/components/Poll/PollActions/PollOptionsFullList.tsx:15no longer exports a prop type and readsclosefromuseModalContext()src/components/Poll/PollActions/PollResults/PollResults.tsx:28no longer exports a prop type and readsclosefromuseModalContext()src/components/Poll/PollActions/PollAnswerList.tsx:27through:29no longer includecloseinPollAnswerListPropssrc/components/Poll/PollActions/SuggestPollOptionPrompt.tsx:19through:21no longer includecloseinSuggestPollOptionFormProps
- current
- Replacement:
- rename direct imports to
AddCommentPrompt,EndPollAlert, andSuggestPollOptionPrompt - stop passing
isQuotedtoPoll - rewrite custom poll dialog overrides as modal-context consumers instead of
close-prop consumers - if you customized quoted-poll rendering, move that behavior into custom message / quoted-message UI instead of relying on
QuotedPoll
- rename direct imports to
- Evidence:
- current poll root exports removed
QuotedPoll - current
Pollimplementation always rendersPollContent - current poll actions index renamed the public action components
- current poll dialog-style components now read
closefromuseModalContext()or internal dialog primitives
- current poll root exports removed
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/10-poll.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: message actions
- User impact:
- imports using
MessageActionsBox,MessageActionsWrapper, orCustomMessageActionsListno longer compile - imports using
MessageActionsBoxProps,MessageActionsWrapperProps, orCustomMessageActionsListPropsno longer compile - custom
MessageActionsintegrations using props likeActionsIcon,customWrapperClass,inline,mine, or the old context-picked action handlers no longer match the current component contract customMessageActions-style customization is no longer supported through the old list/wrapper APIsMessageListProps,VirtualizedMessageListProps,MessageProps, andSharedMessagePropsno longer exposecustomMessageActions- the default action order and action set are different in v14, so integrations that merge with
defaultMessageActionSetcan render a different menu even without custom code changes
- imports using
- Old API:
v13.14.2:src/components/MessageActions/index.ts:2exportedMessageActionsBoxv13.14.2:src/components/MessageActions/index.ts:3exportedCustomMessageActionsListv13.14.2:src/components/MessageActions/MessageActions.tsx:26typedMessageActionsPropsaroundActionsIcon,customWrapperClass,inline,mine, and picked handlers fromMessageContextv13.14.2:src/components/MessageActions/MessageActions.tsx:145exportedMessageActionsWrapper
- New API:
src/components/MessageActions/index.ts:2exportsQuickMessageActionButtonsrc/components/MessageActions/index.ts:3exportsdefaultssrc/components/MessageActions/index.ts:4exportshookssrc/components/MessageActions/MessageActions.tsx:35typesMessageActionsPropsasdisableBaseMessageActionSetFilter?andmessageActionSet?src/components/MessageActions/defaults.tsx:383exportsdefaultMessageActionSetsrc/components/MessageActions/hooks/useBaseMessageActionSetFilter.ts:19anduseSplitMessageActionSet.ts:9provide the new customization hookssrc/components/Message/types.ts:16no longer includescustomMessageActionsinMessagePropssrc/components/MessageList/MessageList.tsxandsrc/components/MessageList/VirtualizedMessageList.tsxno longer accept or routecustomMessageActions
- Replacement:
- rebuild custom action menus around
messageActionSet,defaultMessageActionSet, andContextMenu-style action items - stop relying on
MessageActionsBox,MessageActionsWrapper, orCustomMessageActionsList - route any custom edit/delete/etc. logic through the new action-set items and the current message/composer context
- if your UX depends on action ordering, define your own
messageActionSetexplicitly instead of relying on the SDK defaults
- rebuild custom action menus around
- Evidence:
- current root export comparison removes
MessageActionsBox,MessageActionsWrapper, andCustomMessageActionsList - current
MessageActionsimplementation renders quick actions plus aContextMenu, not the old wrapper/box pair - current
MessageActionsPropsno longer exposes the old prop-driven customization surface - current public
MessageList/VirtualizedMessageList/Messageprop types no longer exposecustomMessageActions - current
defaultMessageActionSetadds entries likeThreadReply,CopyMessageText,Resend, andBlockUser, and reorders destructive actions compared with the v13 baseline
- current root export comparison removes
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/05-experimental-features/01-message-actions.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/04-message_actions.mddocs/data/docs/chat-sdk/react/v14/04-guides/05-channel_read_state.mddocs/data/docs/chat-sdk/react/v14/04-guides/10-dialog-management.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/01-message.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: avatars and channel previews
- User impact:
- custom
Avatar,ChannelAvatar, andGroupAvatarcomponents written against the v13 prop contracts no longer type-check - helper imports using
getDisplayTitleorgetDisplayImageno longer compile - any code building
groupChannelDisplayInfoas an array of{ image, name }objects must switch to the new shape - code using
useChannelPreviewInfo()can no longer treatgroupChannelDisplayInfo == nullas the signal for a non-group channel - code using
useChannelPreviewInfo().displayTitlecan now receive synthesized group/direct-message titles where v13 helper code often returnedundefined - if you switched to the current
stream-chatcore helperchannel.getDisplayImage(), note that it no longer falls back to the other DM member's image the way the old React helper path effectively did
- custom
- Old API:
v13.14.2:src/components/Avatar/Avatar.tsx:8AvatarPropsexposedimage,name,onClick,onMouseOver, anduserv13.14.2:src/components/Avatar/ChannelAvatar.tsx:6ChannelAvatarProps = Partial<GroupAvatarProps> & AvatarPropsv13.14.2:src/components/Avatar/GroupAvatar.tsx:7GroupAvatarPropsexposedgroupChannelDisplayInfov13.14.2:src/components/ChannelPreview/utils.tsx:110typedGroupChannelDisplayInfoas{ image?: string; name?: string }[]v13.14.2:src/components/ChannelPreview/utils.tsx:140exportedgetDisplayTitlev13.14.2:src/components/ChannelPreview/utils.tsx:143exportedgetDisplayImagev13.14.2:src/components/ChannelPreview/utils.tsx:129through:144only synthesized a title/image fallback for direct messages with exactly two membersv13.14.2:src/components/ChannelPreview/hooks/useChannelPreviewInfo.ts:46returnedgroupChannelDisplayInfoas the nullable result ofgetGroupChannelDisplayInfo(channel)
- New API:
src/components/Avatar/Avatar.tsx:10AvatarPropsnow exposeimageUrl,userName,isOnline, and requiredsizesrc/components/Avatar/ChannelAvatar.tsx:6ChannelAvatarPropsare nowPartial<Omit<GroupAvatarProps & AvatarProps, 'size'>> & { size: GroupAvatarProps['size'] | AvatarProps['size'] }src/components/Avatar/GroupAvatar.tsx:12GroupAvatarPropsnow exposedisplayMembers,size, andisOnlinesrc/components/ChannelListItem/utils.tsx:139through:149now return{ members }fromgetGroupChannelDisplayInfo(channel)src/components/ChannelListItem/utils.tsx:125exportsgetChannelDisplayImagesrc/components/ChannelListItem/hooks/index.ts:1exportsuseChannelDisplayNamesrc/components/ChannelListItem/hooks/useChannelDisplayName.ts:8through:10synthesize DM labels and group titles from up to two member namessrc/components/ChannelListItem/hooks/useChannelPreviewInfo.ts:12through:15define a stable empty group-info objectsrc/components/ChannelListItem/hooks/useChannelPreviewInfo.ts:36through:38and:45through:47returngroupChannelDisplayInfo ?? emptyGroupInfo
- Replacement:
- rename avatar props from
image/nametoimageUrl/userName - supply the new required
sizeprop when rendering SDK avatars directly - migrate group avatar data from
groupChannelDisplayInfotodisplayMembers - replace
getDisplayImagewithgetChannelDisplayImage - replace
getDisplayTitlewithuseChannelDisplayName()oruseChannelPreviewInfo(), depending on whether the caller is already inside React - update any
useChannelPreviewInfo()checks that previously depended ongroupChannelDisplayInfobeingnullorundefined - if you need the old DM-image fallback in custom preview code, prefer
getChannelDisplayImage(channel)overchannel.getDisplayImage()
- rename avatar props from
- Evidence:
- current package exports no
getDisplayTitleorgetDisplayImage - current
useChannelPreviewInfo()normalizes empty/non-group state to{ members: [], overflowCount: undefined } - current
useChannelDisplayName()adds synthesized DM/group title behavior that did not exist in the old helper pair - current
ChannelListItemtests assert thatchannel.getDisplayImage()no longer falls back to member images, whilegetChannelDisplayImage()preserves the UI-oriented fallback
- current package exports no
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/08-avatar.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/04-channel_preview_ui.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/02-channel-list/01-channel_list_preview.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/09-channel_header.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/10-thread_header.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/05-message-input/06-suggestion_list.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/06-system_message.md
- Example needed: yes
- Status: confirmed
- Area: channel header
- User impact:
<ChannelHeader live />no longer type-checks- the built-in live badge and the old member/watcher count rendering tied to
liveno longer exist in the default header - the default
ChannelHeaderno longer renderschannel.data.subtitle
- Old API:
v13.14.2:src/components/ChannelHeader/ChannelHeader.tsx:11ChannelHeaderPropsexposedlive?: booleanv13.14.2:src/components/ChannelHeader/ChannelHeader.tsx:65rendered thelivebadgev13.14.2:src/components/ChannelHeader/ChannelHeader.tsx:71hid the member-count line whenlivewas truev13.14.2:src/components/ChannelHeader/ChannelHeader.tsx:45and:69read and renderedchannel.data.subtitle
- New API:
src/components/ChannelHeader/ChannelHeader.tsx:38ChannelHeaderPropsonly exposeAvatar,image,MenuIcon, andtitlesrc/components/ChannelHeader/ChannelHeader.tsx:14through:35drive the subtitle from typing and online-status state
- Replacement:
- remove the
liveprop - if you still need a live badge,
channel.data.subtitle, or livestream-specific metadata, provide a customChannelHeaderimplementation
- remove the
- Evidence:
- current
ChannelHeaderPropsno longer definelive - current header implementation renders title, typing/online subtitle, sidebar toggle, and avatar only
- current header implementation no longer reads
channel.data.subtitle
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/02-channel_header.mddocs/data/docs/chat-sdk/react/v14/04-guides/04-typescript_and_custom_data_types.md
- Example needed: yes
- Status: confirmed
- Area: dialogs and overlays
- User impact:
- imports using
Modalfrom the package no longer compile - imports using
ButtonWithSubmenuno longer compile - older customization patterns centered on the legacy modal component or submenu button primitive need to be rewritten
- custom CSS or DOM selectors targeting the old
.str-chat__modal__innerwrapper no longer match
- imports using
- Old API:
v13.14.2:src/components/Modal/index.ts:1exportedGlobalModalv13.14.2:src/components/Modal/index.ts:2exportedModalv13.14.2:src/components/Modal/Modal.tsx:28defined theModalcomponentv13.14.2:src/components/Modal/Modal.tsx:87through:92wrapped modal contents in.str-chat__modal__innerv13.14.2:src/components/Dialog/index.ts:1exportedButtonWithSubmenuv13.14.2:src/components/Dialog/ButtonWithSubmenu.tsx:14defined the publicButtonWithSubmenu
- New API:
src/components/Modal/index.ts:1exports onlyGlobalModalsrc/components/Modal/GlobalModal.tsx:45defines the public modal componentsrc/components/Modal/GlobalModal.tsx:115through:129render children directly inside the overlay/dialog shell with no.str-chat__modal__innerwrappersrc/components/Dialog/index.ts:1exports./componentssrc/components/Dialog/components/ContextMenu.tsx:247exportsContextMenuButtonsrc/components/Dialog/components/ContextMenu.tsx:269exportsContextMenuBackButtonsrc/components/Dialog/components/ContextMenu.tsx:283exportsContextMenuHeader
- Replacement:
- rename direct
Modalimports toGlobalModal - rebuild submenu UIs around
ContextMenuand its exported button/header primitives instead ofButtonWithSubmenu - audit any modal CSS or tests that depended on the old inner wrapper or close-button placement
- rename direct
- Evidence:
- current modal entrypoint no longer re-exports
./Modal - current dialog entrypoint keeps dialog services, but the submenu primitive has been dropped from the public surface
- current
GlobalModalno longer renders the old inner wrapper that legacy modal customizations often targeted - commit
44e2eaf4 feat: unify dialog UI system (#2955)explicitly called out the wrapper removal
- current modal entrypoint no longer re-exports
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/16-modal.mddocs/data/docs/chat-sdk/react/v14/04-guides/10-dialog-management.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: file attachments
- User impact:
- custom file-preview UIs using the old
FileIconprops no longer type-check - helper calls to
mimeTypeToIcon(type, mimeType)no longer match the current function signature
- custom file-preview UIs using the old
- Old API:
v13.14.2:src/components/ReactFileUtilities/FileIcon/FileIcon.tsx:6FileIconPropsexposedbig,filename,mimeType,size,sizeSmall, andtypev13.14.2:src/components/ReactFileUtilities/FileIcon/FileIcon.tsx:16mimeTypeToIcon(type, mimeType)
- New API:
src/components/FileIcon/FileIcon.tsx:5FileIconPropsexpose onlyclassName,fileName, andmimeTypesrc/components/FileIcon/FileIcon.tsx:11mimeTypeToIcon(mimeType?)
- Replacement:
- rename
filenametofileName - remove
big,size,sizeSmall, andtype - style the rendered icon through
classNameor a wrapper instead of size-mode props
- rename
- Evidence:
- current file-icon implementation uses an internal label renderer and no longer passes size variants into the icon set
- current attachment and composer previews import the simplified
FileIcon
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/04-guides/15-audio-playback.md
- Example needed: yes
BC-022: QuotedMessagePreviewHeader was removed and quoted-preview customization moved to QuotedMessagePreviewUI
- Status: confirmed
- Area: quoted-message previews
- User impact:
- imports using
QuotedMessagePreviewHeaderno longer compile - custom quoted-preview composition built around the old header plus
Attachment/Avatar/ quotedPollcontent no longer matches the current preview surface
- imports using
- Old API:
v13.14.2:src/components/MessageInput/QuotedMessagePreview.tsx:22exportedQuotedMessagePreviewHeaderv13.14.2:src/components/MessageInput/QuotedMessagePreview.tsx:52exportedQuotedMessagePreviewv13.14.2:src/components/MessageInput/QuotedMessagePreview.tsx:56pulledAttachmentandAvatarfromComponentContextv13.14.2:src/components/MessageInput/QuotedMessagePreview.tsx:102rendered<Poll isQuoted />
- New API:
src/components/MessageComposer/QuotedMessagePreview.tsx:55exposesQuotedMessagePreviewPropswithgetQuotedMessageAuthorandrenderTextsrc/components/MessageComposer/QuotedMessagePreview.tsx:245exportsQuotedMessagePreviewsrc/components/MessageComposer/QuotedMessagePreview.tsx:273exportsQuotedMessagePreviewUIsrc/components/MessageComposer/EditedMessagePreview.tsx:14reusesQuotedMessagePreviewUIfor edit previews
- Replacement:
- replace any
QuotedMessagePreviewHeaderusage withQuotedMessagePreviewUIor a custom quoted-preview wrapper - if you customized the author label, use
getQuotedMessageAuthor - if you relied on quoted polls or quoted attachments rendering through the old preview structure, port that logic into a custom preview component
- replace any
- Evidence:
- current quoted preview is a summarized UI with attachment-type icons, optional preview thumbnails, and a remove button
- current source exports no
QuotedMessagePreviewHeader
- Docs impact:
- migration guide
- Example needed: yes
- Status: confirmed
- Area: utilities and low-level UI exports
- User impact:
- imports using the removed helper utilities or standalone status/input icons no longer compile
- low-level customization patterns built on those exports need to move to the new
Iconsset, newer helper names, or higher-level components
- Confirmed removed exports:
ActionsIconCloseIconshowMessageActionsBoxshouldRenderMessageActionsisOnlyEmojisReactionIconRetryIconDownloadIconLinkIconSendIconMicIconMessageSentIconMessageDeliveredIconThreadIconMessageErrorIconattachmentTypeIconMap
- Old API evidence:
v13.14.2:src/components/Message/icons.tsx:7exportedActionsIconv13.14.2:src/components/MessageInput/icons.tsx:67exportedCloseIconv13.14.2:src/components/Message/utils.tsx:241exportedshowMessageActionsBoxv13.14.2:src/components/Message/utils.tsx:246exportedshouldRenderMessageActionsv13.14.2:src/components/Message/utils.tsx:483exportedisOnlyEmojisv13.14.2:src/components/Message/icons.tsx:22exportedReactionIconv13.14.2:src/components/MessageInput/icons.tsx:83through:149exportedRetryIcon,DownloadIcon,LinkIcon,SendIcon, andMicIconv13.14.2:src/components/Message/icons.tsx:37exportedThreadIconv13.14.2:src/components/Message/icons.tsx:77and:92exportedMessageSentIconandMessageDeliveredIconv13.14.2:src/components/Message/icons.tsx:108exportedMessageErrorIconv13.14.2:src/components/Threads/ThreadList/ThreadListItemUI.tsx:25exportedattachmentTypeIconMap
- New API evidence:
src/components/Message/utils.tsx:431exportscountEmojissrc/components/Message/utils.tsx:436exportsmessageTextHasEmojisOnlysrc/components/index.ts:21exports the sharedIconssetsrc/components/Message/MessageStatus.tsx:122and:138renderIconCheckmark1SmallandIconDoubleCheckmark1Smallsrc/components/Threads/ThreadList/ThreadListItemUI.tsx:14now builds thread previews aroundSummarizedMessagePreview
- Replacement:
- move emoji-only checks to
countEmojis()/messageTextHasEmojisOnly() - stop relying on
showMessageActionsBox()/shouldRenderMessageActions()and instead customize the newMessageActionsaction-set flow - replace direct icon imports with the public
Iconscomponents or with higher-level components likeMessageStatus,SendButton,MessageActions, and thread preview components - if you used
attachmentTypeIconMap, inline your own map or switch to the new thread preview components
- move emoji-only checks to
- Evidence:
- current
MessageComposer/index.tsandMessage/index.tsstill re-export theiricons.tsxfiles, but the removed icon symbols are no longer present there - current
MessageStatusand thread-list UIs rely on the shared icon library and new summary components instead of the old standalone exports - later icon-catalog renames such as
IconCrossMedium -> IconXmarkandIconLayoutAlignLeft -> IconSidebarare excluded from this bucket because they were not part of thev13.14.2public surface
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/07-ui-components.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/02-channel_header.md
- Example needed: yes
BC-024: MessageInput attachment preview customization changed, and voice recordings moved into a dedicated slot
- Status: confirmed
- Area: message input attachment previews
- User impact:
- custom
AttachmentPreviewListoverrides written against the v13 prop contract no longer type-check cleanly - voice recordings are no longer rendered inside
AttachmentPreviewList - customization now needs to account for
VoiceRecordingPreviewSlotas a separate override point
- custom
- Old API:
v13.14.2:src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx:26exposedAttachmentPreviewListPropsv13.14.2:src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx:27typedAudioAttachmentPreviewasComponentType<FileAttachmentPreviewProps>v13.14.2:src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx:32typedVideoAttachmentPreviewasComponentType<FileAttachmentPreviewProps>v13.14.2:src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx:33exposedVoiceRecordingPreviewv13.14.2:src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx:72rendered voice recordings inside the attachment preview listv13.14.2:src/components/MessageInput/AttachmentPreviewList/index.ts:7exportedVoiceRecordingPreviewPropsfromVoiceRecordingPreviewv13.14.2:src/components/MessageInput/MessageInputFlat.tsx:105renderedQuotedMessagePreviewHeaderand thenAttachmentPreviewList
- New API:
src/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.tsx:28through:35expose a narrowerAttachmentPreviewListPropssurface with noVoiceRecordingPreviewsrc/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.tsx:29through:31typeAudioAttachmentPreviewasComponentType<AudioAttachmentPreviewProps> | ComponentType<FileAttachmentPreviewProps>src/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.tsx:35typesVideoAttachmentPreviewasComponentType<MediaAttachmentPreviewProps>src/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.tsx:62through:63skip voice recordings because they render in a separate slotsrc/components/MessageComposer/AttachmentPreviewList/VoiceRecordingPreviewSlot.tsx:14definesVoiceRecordingPreviewSlotPropssrc/components/MessageComposer/AttachmentPreviewList/VoiceRecordingPreviewSlot.tsx:22exportsVoiceRecordingPreviewSlotsrc/components/MessageComposer/MessageComposerUI.tsx:120renders<VoiceRecordingPreviewSlot />ahead of<AttachmentPreviewList />
- Replacement:
- update custom audio/video attachment preview components to the new prop types
- stop overriding
VoiceRecordingPreviewthroughAttachmentPreviewList - customize voice-recording previews via
VoiceRecordingPreviewSlotinstead
- Evidence:
- current attachment preview list filters voice recordings out of the list render path
- current
MessageInputFlathas a dedicated voice-preview slot above the list - current package exports
VoiceRecordingPreviewSlotandVoiceRecordingPreviewSlotProps
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/05-ui_components.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/05-message-input/03-attachment_previews.md
- Example needed: yes
- Status: confirmed
- Area: image galleries
- User impact:
- custom
Gallerycomponents written against the v13 thumbnail-grid/lightbox API no longer type-check ModalGalleryno longer acceptsimagesandindex- custom
Imagecomponents written against the oldImagePropscontract no longer type-check cleanly - integrations using the old
GalleryProps.images/innerRefsmodel must move either to the new provider-styleGalleryAPI or to the newModalGallery
- custom
- Old API:
v13.14.2:src/components/Gallery/Gallery.tsx:15typedGalleryPropsaroundimagesand optionalinnerRefsv13.14.2:src/components/Gallery/Gallery.tsx:110renderedModalv13.14.2:src/components/Gallery/Gallery.tsx:115rendered<ModalGallery images={images} index={index} />v13.14.2:src/components/Gallery/Image.tsx:14typedImagePropsarounddimensions,innerRef,previewUrl,fallback,image_url, andthumb_urlv13.14.2:src/components/Gallery/index.tsx:3exportedImagev13.14.2:src/components/Gallery/index.tsx:4exportedModalGallery
- New API:
src/components/Gallery/Gallery.tsx:7typesGalleryPropsarounditems, optionalGalleryUI,initialIndex,onIndexChange, andonRequestClosesrc/components/Gallery/Gallery.tsx:89renders aGalleryContext.Providerinstead of the old thumbnail gridsrc/components/Attachment/Image.tsx:6now typesImagePropsasGalleryItemsrc/components/Attachment/Image.tsx:14rendersModalGallerydirectly viaitems={[props]}src/components/Attachment/ModalGallery.tsx:41defines the newModalGalleryPropsarounditems,className,closeOnBackgroundClick, andmodalClassNamesrc/components/Attachment/ModalGallery.tsx:110renders the provider-styleGalleryinsideGlobalModalsrc/components/Gallery/index.tsx:3now exportsGalleryContextsrc/components/Gallery/index.tsx:4now exportsGalleryUI
- Replacement:
- if you need the old thumbnail-grid-plus-lightbox behavior, use
ModalGallery - if you customize the gallery carousel itself, migrate to the new
Galleryprovider API and a customGalleryUI - rename
ModalGalleryprops fromimages/indextoitems/initialIndexsemantics as appropriate - rewrite custom
Imagecomponents against the newGalleryItemcontract and letModalGalleryown modal state
- if you need the old thumbnail-grid-plus-lightbox behavior, use
- Evidence:
- current
Galleryis no longer a visible thumbnail-grid component by itself unless aGalleryUIis supplied - current
ModalGalleryowns the thumbnail grid and modal-opening behavior - current top-level
Imageexport now comes fromsrc/components/Attachment/Image.tsx, notsrc/components/Gallery/Image.tsx - current docs examples still using
<ModalGallery images={[...]} index={0} />no longer match the public props
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/03-ui-cookbook/06-attachment/02-image_gallery.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/16-modal.mddocs/data/docs/chat-sdk/react/v14/04-guides/10-dialog-management.md
- Example needed: yes
- Status: confirmed
- Area: custom attachment rendering
- User impact:
- code importing low-level attachment primitives from the package root can break or stop type-checking cleanly
- custom attachment renderers written against the old
MediaContainer,GalleryAttachment, orFileContainercontracts need rewrites - custom audio attachment components written against
AudioProps.ogneed a prop rename CardAudiois no longer re-exported from the main package surface
- Old API:
v13.14.2:src/components/Attachment/index.ts:3re-exportedAttachmentContainerv13.14.2:src/components/Attachment/AttachmentContainer.tsx:106definedGalleryContaineraroundGallery images={...} innerRefs={...}v13.14.2:src/components/Attachment/AttachmentContainer.tsx:208definedFileContainerfor non-audio file attachments onlyv13.14.2:src/components/Attachment/AttachmentContainer.tsx:243definedMediaContainer(props: RenderAttachmentProps)around a singleattachmentv13.14.2:src/components/Attachment/utils.tsx:16typedGalleryAttachmentas{ images: Attachment[]; type: 'gallery' }v13.14.2:src/components/Attachment/utils.tsx:12derivedAttachmentComponentTypefromATTACHMENT_GROUPS_ORDERv13.14.2:src/components/Attachment/Audio.tsx:43through:46typedAudioPropsas{ og: Attachment }v13.14.2:src/components/Attachment/Card.tsx:171exportedCardAudio
- New API:
src/components/Attachment/index.ts:3still re-exportsAttachmentContainer, so these changes are publicsrc/components/Attachment/AttachmentContainer.tsx:112definesMediaContainer(props: RenderMediaProps)aroundattachmentssrc/components/Attachment/AttachmentContainer.tsx:157exportsGiphyContainersrc/components/Attachment/AttachmentContainer.tsx:180makesFileContainera dispatcher for audio, voice recordings, and other filessrc/components/Attachment/AttachmentContainer.tsx:198definesGalleryContaineraroundModalGallery items={...}src/components/Attachment/AttachmentContainer.tsx:263exportsOtherFilesContainersrc/components/Attachment/AttachmentContainer.tsx:299exportsVideoContainersrc/components/Attachment/utils.tsx:25introducesAttachmentContainerTypefor grouped render keyssrc/components/Attachment/utils.tsx:29typesGalleryAttachmentas{ items: Attachment[]; type: 'gallery' }src/components/Attachment/Audio.tsx:44through:46now typeAudioPropsas{ attachment: Attachment }- current
src/components/Attachment/LinkPreview/Card.tsxno longer exportsCardAudio
- Replacement:
- prefer the supported high-level
AttachmentProps/ComponentContextcustomization surface when possible - if you use the low-level containers directly, migrate media flows to
MediaContainer({ attachments }) - rename gallery payloads from
imagestoitems - rename custom audio attachment props from
ogtoattachment - split file handling across
OtherFilesContainer,AudioContainer,VoiceRecordingContainer, orVideoContaineras needed - if you depended on
CardAudio, build the UI directly in a custom card implementation because it is no longer public from the package root
- prefer the supported high-level
- Evidence:
- current attachment container logic collapses multiple old branches into dispatcher-style containers
- current attachment utility types rename the gallery payload from
imagestoitems - current package root still exports the attachment container module, so these contract changes are public
- current package root no longer re-exports
CardAudio
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/11-attachment/01-attachment.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/06-attachment/02-image_gallery.md
- Example needed: yes
- Status: confirmed
- Area: chat layout behavior
- User impact:
- omitting
initialNavOpenno longer means βfollow the v13 prop exactlyβ; currentChatfalls back to the SDK default open state - channel selection no longer closes the sidebar on desktop-sized viewports
- omitting
- Old API:
v13.14.2:src/components/Chat/Chat.tsx:30exposedinitialNavOpenas the only initial nav-state propv13.14.2:src/components/Chat/hooks/useChat.ts:42initializednavOpenfrominitialNavOpenv13.14.2:src/components/Chat/hooks/useChat.ts:135always calledcloseMobileNav()insetActiveChannel
- New API:
src/components/Chat/Chat.tsx:30through:33expose onlyinitialNavOpen?: booleansrc/components/Chat/hooks/useChat.ts:51through:54initializenavOpenfrominitialNavOpenwhen it is provided, otherwise they fall back to the SDK default open statesrc/components/Chat/hooks/useChat.ts:148through:151only closes the sidebar after channel selection on mobile-width viewports
- Replacement:
- pass
initialNavOpen={false}orinitialNavOpen={true}when you need an explicit initial sidebar state - if you relied on channel selection always collapsing the sidebar, reintroduce that behavior explicitly in app-level layout code
- pass
- Evidence:
- current
ChatPropsexpose onlyinitialNavOpenfor initial sidebar state - current
useChatstill contains viewport-guarded sidebar closing for channel selection - current v14 docs and migration guide needed to stop describing the removed RC-only responsive-nav prop
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/03-chat/01-chat.md
- Example needed: yes
- Status: confirmed
- Area: styling and theming
- User impact:
- apps with custom CSS targeting old
ChannelHeader,MessageInput, orAvatarDOM/classnames can lose styling after upgrading - apps with custom CSS targeting old channel-list, channel-preview, thread-list, send-to-channel, or loading-placeholder DOM can lose styling after upgrading
- tests and accessibility hooks that relied on the old sidebar/list selection semantics (
aria-selected) or*-reactclassnames can break - snapshot and interaction tests that expected the old channel-preview action buttons or preview content layout can break
- custom icon sizing and selector-based theming that assumed the old
16x16BaseIcondefault or olderstr-chat__icon--*auto classes can break - selector-based theming against internal wrappers needs an audit before release adoption
- teams should expect to rebalance custom theme work around the new tokenized styling layer
- apps with custom CSS targeting old
- Old API:
v13.14.2:src/components/ChannelHeader/ChannelHeader.tsx:48through:80used selectors such asstr-chat__header-hamburger,str-chat__channel-header-end,str-chat__channel-header-title,str-chat__channel-header-info, andstr-chat__header-livestream-livelabelv13.14.2:src/components/MessageInput/MessageInputFlat.tsx:95through:150usedstr-chat__message-input-inner,str-chat__message-textarea-container, andstr-chat__message-textarea-with-emoji-pickerv13.14.2:src/components/Avatar/Avatar.tsx:47through:76usedstr-chat__message-sender-avatarandstr-chat__avatar-fallbackv13.14.2:src/components/ChannelList/ChannelListMessenger.tsx:44through:57usedstr-chat__channel-list-messenger-reactandstr-chat__channel-list-messenger-react__main, and returnedLoadingIndicatorwithout the list wrapper while loadingv13.14.2:src/components/ChannelPreview/ChannelPreviewMessenger.tsx:47through:85usedaria-selected,str-chat__channel-preview-messenger*,str-chat__channel-preview-end*, and the old unread-badge / latest-message layoutv13.14.2:src/components/ChannelPreview/ChannelPreviewActionButtons.tsx:20through:58rendered dedicated pin and archive buttons instead of the current menu-plus-secondary-action layoutv13.14.2:src/components/Threads/ThreadList/ThreadListItemUI.tsx:97through:141usedaria-selectedand the old__channel,__parent-message, and__latest-replyDOM sectionsv13.14.2:src/components/MessageInput/SendToChannelCheckbox.tsx:18through:33rendered a plain checkbox/label pair without the new visual wrapper and checked-state modifierv13.14.2:src/components/Loading/LoadingChannels.tsx:3through:18used the oldstr-chat__loading-channels-item/str-chat__channel-preview-loadingskeleton markup
- New API:
src/components/ChannelHeader/ChannelHeader.tsx:69through:88now usesstr-chat__channel-header--sidebar-collapsed,str-chat__channel-header__data,str-chat__channel-header__data__title, andstr-chat__channel-header__data__subtitlesrc/components/MessageComposer/MessageComposerUI.tsx:157through:191now usestr-chat__message-composer-container,str-chat__message-composer,str-chat__message-composer-compose-area, andstr-chat__message-composer-controlssrc/components/Avatar/Avatar.tsx:73through:107now uses size modifiers,str-chat__avatar-status-badge, andstr-chat__avatar-initialssrc/components/ChannelList/ChannelListMessenger.tsx:44through:67removed the*-reactclassnames and now wraps the loading state insidestr-chat__channel-list-messenger__mainsrc/components/ChannelListItem/ChannelListItemUI.tsx:52through:97now usearia-pressed,str-chat__channel-preview-data*,ChannelListItemTimestamp,SummarizedMessagePreview, and muted-state modifierssrc/components/ChannelListItem/ChannelListItemActionButtons.tsx:45through:85now useButton,ContextMenu, a dialog-open state class, and different secondary actions for direct-message vs non-DM channelssrc/components/Threads/ThreadList/ThreadListItemUI.tsx:73through:119now usearia-pressed,str-chat__thread-list-item-container, summarized-preview content, avatar stacks, and badgessrc/components/MessageComposer/SendToChannelCheckbox.tsx:25through:50now usestr-chat__send-to-channel-checkbox__container--checked, explicit input classes, and a custom visual/checkmark wrappersrc/components/Loading/LoadingChannels.tsx:3through:25now render loading placeholders withstr-chat__channel-preview-container/str-chat__channel-preview--loadingsrc/components/MessageComposer/WithDragAndDropUpload.tsx:134through:165now addstr-chat__dropzone-rootandstr-chat__dropzone-container__contentaround the default drag-and-drop overlaysrc/components/Message/MessageUI.tsx:275through:277now renderstr-chat__message-error-indicatorwith the sharedErrorBadgeinstead of the removedstr-chat__message-error-iconwrappersrc/components/Icons/BaseIcon.tsx:6now defaults toviewBox='0 0 20 20'instead of0 0 16 16src/styling/index.scss:1now assembles a new styling entrypoint, andsrc/styling/variables.css:5introduces a tokenized variable layer under.str-chat
- Replacement:
- audit custom CSS selectors against current rendered markup before upgrading
- prefer current component variables and current selectors over legacy internal wrappers
- re-test any layout code that styled the old header, sidebar/list, or message-input internals directly
- update selector-based tests that depended on
str-chat__channel-list-messenger-react__main, old channel-preview DOM/action buttons,aria-selectedsidebar items, or the older loading skeleton DOM - update any selector-based styling or tests that relied on
str-chat__message-error-icon; the default error badge now renders understr-chat__message-error-indicator - re-baseline custom icon CSS against the renamed
str-chat__icon--*classes and the new default20x20icon box
- Evidence:
- the class structure changed across header, composer, avatar, channel-preview, sidebar/list, and loading surfaces
- the message-send error badge also switched from the removed
MessageErrorIconwrapper class to the newstr-chat__message-error-indicator - the icon catalog refresh renamed several icon constants, which also changed their generated CSS class names
- current docs still contain stale selectors like
.str-chat__header-hamburger,.str-chat__channel-list-messenger-react__main, andaria-selectedthread-item examples - v14 now ships a centralized styling/token layer alongside those markup changes
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/01-getting_started.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/04-channel_preview_ui.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/06-channel-list-infinite-scroll.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/11-chat-view.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/02-channel-list/01-channel_list_preview.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/09-channel_header.md
- Example needed: yes
- Status: confirmed
- Area: typing indicator customization
- User impact:
- custom
TypingIndicatoroverrides written against the v13 prop contract no longer type-check - old custom typing indicators that only consumed
threadListmiss the newscrollToBottombehavior and scroll-state gating - docs that still describe
TypingIndicatorProps.Avatarare stale
- custom
- Old API:
v13.14.2:src/components/TypingIndicator/TypingIndicator.tsx:9through:12exposedTypingIndicatorPropswith onlythreadList?: booleanv13.14.2:src/components/TypingIndicator/TypingIndicator.tsx:75through:90rendered dot/text UI with no avatar stack or scroll callback
- New API:
src/components/TypingIndicator/TypingIndicator.tsx:15through:20definesTypingIndicatorPropswithscrollToBottom, optionalisMessageListScrolledToBottom, andthreadListsrc/components/TypingIndicator/TypingIndicator.tsx:58through:60scrolls to latest message when typing appears and the list is at the bottomsrc/components/TypingIndicator/TypingIndicator.tsx:84through:90rendersAvatarStackinstead of the old text-only list
- Replacement:
- update custom typing indicator components to accept
scrollToBottomand optionalisMessageListScrolledToBottom - if you want the default βstay pinned to latest message while typingβ behavior, preserve the scroll callback in custom implementations
- stop documenting or expecting an
Avatarprop onTypingIndicatorProps
- update custom typing indicator components to accept
- Evidence:
- current
TypingIndicatorPropsadds a required scroll callback and removes the old avatar-oriented docs contract - current typing indicator implementation is built around
AvatarStackplus scroll-state behavior - current docs pages still show the pre-v14 prop contract
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/12-indicators.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/05-message-input/07-typing_indicator.md
- Example needed: yes
- Status: confirmed
- Area: dialog override components
- User impact:
- custom
MessageBouncePromptimplementations usingonCloseno longer type-check - custom
RecordingPermissionDeniedNotificationcomponents usingonCloseno longer type-check - several prompt-like overrides now have to close themselves via modal context or parent flow instead of explicit props
- custom
- Old API:
v13.14.2:src/components/MessageBounce/MessageBouncePrompt.tsx:8typedMessageBouncePromptPropsasPropsWithChildren<Pick<ModalProps, 'onClose'>>v13.14.2:src/components/MessageBounce/MessageBouncePrompt.tsx:10through:21calledonClose?.(e)after bounce actionsv13.14.2:src/components/MediaRecorder/RecordingPermissionDeniedNotification.tsx:6through:8typedRecordingPermissionDeniedNotificationPropswithonClosev13.14.2:src/components/MediaRecorder/RecordingPermissionDeniedNotification.tsx:36through:40rendered a dismiss button wired toonClose
- New API:
src/components/MessageBounce/MessageBouncePrompt.tsx:13definesMessageBouncePromptPropsasPropsWithChildrenOnlysrc/components/MessageBounce/MessageBouncePrompt.tsx:19readsclosefromuseModalContext()src/components/MediaRecorder/RecordingPermissionDeniedNotification.tsx:5through:7defineRecordingPermissionDeniedNotificationPropswith onlypermissionNamesrc/components/MediaRecorder/RecordingPermissionDeniedNotification.tsx:24through:33no longer render a dismiss button
- Replacement:
- rewrite custom
MessageBouncePromptimplementations to useuseModalContext().close()rather than anonCloseprop - rewrite custom
RecordingPermissionDeniedNotificationcomponents without assuming a dismissal callback prop - audit any other dialog-style overrides that previously depended on explicit
closecallbacks
- rewrite custom
- Evidence:
- current
MessageBouncePromptand recording-permission notification contracts both dropped direct close props - current bounce prompt uses modal context and alert primitives instead of the old modal callback pattern
- current docs still show
onClose-based customizations
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/03-message_bounce_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/07-ui-components.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/07-audio_recorder.md
- Example needed: yes
- Status: confirmed
- Area: message status customization
- User impact:
- custom
MessageStatusoverrides written against the v13 prop contract no longer type-check cleanly - the
Avatarprop was removed fromMessageStatusProps - the default read/sent/delivered indicators no longer render the old standalone icon exports or the reader avatar
- custom
- Old API:
v13.14.2:src/components/Message/MessageStatus.tsx:19through:33exposedMessageStatusPropsincludingAvatar?: React.ComponentType<AvatarProps>v13.14.2:src/components/Message/MessageStatus.tsx:64usedAvatarto render the last reader in read statev13.14.2:src/components/Message/MessageStatus.tsx:119,:135, and:151renderedLoadingIndicator,MessageSentIcon, andMessageDeliveredIcon
- New API:
src/components/Message/MessageStatus.tsx:13through:25defineMessageStatusPropswithoutAvatarsrc/components/Message/MessageStatus.tsx:106,:122,:138, and:155renderIconClock,IconCheckmark1Small, andIconDoubleCheckmark1Smallsrc/components/Message/MessageStatus.tsx:142through:166no longer render the reader avatar in the default read state
- Replacement:
- remove
Avatarfrom customMessageStatuswrappers - if you need reader-avatar-based read status, implement it in a custom
MessageReadStatuscomponent - stop relying on the removed standalone message-status icons
- remove
- Evidence:
- current
MessageStatusPropsno longer acceptAvatar - current default status UI is icon-based for all states, including read state
- current docs still describe the removed avatar prop and older default behavior
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/07-ui-components.md
- Example needed: yes
- Status: confirmed
- Area: message text customization
- User impact:
- custom
MessageTextwrappers using thethemeprop no longer type-check - selector logic based on
str-chat__message-${theme}-text-innerclasses no longer maps to the current component MessageTextno longer renders quoted-message UI itself
- custom
- Old API:
v13.14.2:src/components/Message/MessageText.tsx:18through:27exposedMessageTextPropsincludingtheme?: stringv13.14.2:src/components/Message/MessageText.tsx:65through:77built theme-based inner class names and emoji/attachment modifiers fromthemev13.14.2:src/components/Message/MessageText.tsx:83renderedQuotedMessageinsideMessageText
- New API:
src/components/Message/MessageText.tsx:13through:20defineMessageTextPropswithoutthemesrc/components/Message/MessageText.tsx:55through:67use non-theme-specific text classessrc/components/Message/MessageText.tsx:58returnsnullfor empty text without special quoted-message handlingsrc/components/Message/MessageText.tsx:45through:48now resolve text throughtranslationViewandgetTranslatedMessageText
- Replacement:
- stop passing
themeintoMessageText - move any theme-specific selectors to the current message/text class structure
- if you need quoted-message rendering, handle it in the surrounding message UI rather than inside
MessageText
- stop passing
- Evidence:
- current
MessageTextPropsno longer includetheme - current
MessageTextno longer imports or rendersQuotedMessage - current docs still document the removed
themeprop
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/07-ui-components.md
- Example needed: yes
- Status: confirmed
- Area: custom message UI
- User impact:
- custom
Messageoverride components should no longer expect the SDK to injectMessageUIComponentPropsdirectly - code that relied on a directly passed
groupedByUserprop in custom message UIs stops receiving it in v14 - TypeScript users also lose
customMessageActions,endOfGroup,firstOfGroup, andgroupedByUserfrom the exportedMessageProps/SharedMessagePropssurface
- custom
- Old API:
v13.14.2:src/components/Message/types.ts:25through:27exposedendOfGroup,firstOfGroup, andgroupedByUserinMessagePropsv13.14.2:src/components/Message/types.ts:23exposedcustomMessageActionsinMessagePropsv13.14.2:src/components/Message/Message.tsx:176rendered<MessageUIComponent groupedByUser={groupedByUser} />
- New API:
src/components/Message/types.ts:16no longer exposescustomMessageActions,endOfGroup,firstOfGroup, orgroupedByUserinMessagePropssrc/components/Message/Message.tsx:179now renders<MessageUIComponent />src/context/MessageContext.tsx:83through:89still exposeendOfGroup,firstOfGroup, andgroupedByUserthroughuseMessageContext()
- Replacement:
- read grouping and other message state from
useMessageContext()inside custom message overrides instead of expecting direct props - treat
MessageUIComponentPropsas an implementation detail/helper type, not as a guarantee that the SDK will inject those props into your component - move any old
customMessageActionslogic to the v14MessageActions/messageActionSetmodel
- read grouping and other message state from
- Evidence:
- the current
Messagecomponent still provides grouping state inMessageContext, but no longer passes it as a direct prop to the override component - current exported
MessageProps/SharedMessagePropsno longer advertise the v13 grouping/custom-actions props
- the current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/04-guides/16-ai-integrations/02-chat-sdk-integration.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/01-message_ui.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/01-message.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/01-message_list.md
- Example needed: yes
- Status: confirmed
- Area: low-level customization helpers
- User impact:
- custom
PinIndicatorcomponents typed against the v13PinIndicatorPropscontract no longer receivet - custom textarea-composer
UserItemcomponents typed against the v13UserItemPropscontract no longer receiveAvatar
- custom
- Old API:
v13.14.2:src/components/Message/types.ts:120through:123exposedPinIndicatorPropsas{ message?: LocalMessage; t?: TFunction }v13.14.2:src/components/Message/icons.tsx:55used the injectedtprop insidePinIndicatorv13.14.2:src/components/TextareaComposer/SuggestionList/UserItem.tsx:7through:22exposedUserItemPropswithAvatar?: React.ComponentType<AvatarProps>v13.14.2:src/components/TextareaComposer/SuggestionList/UserItem.tsx:28rendered the injectedAvatarcomponent
- New API:
src/components/Message/PinIndicator.tsx:7through:9definePinIndicatorPropswithmessage?: LocalMessageonlysrc/components/Message/PinIndicator.tsx:16callsuseTranslationContext()internally instead of using an injectedtsrc/components/TextareaComposer/SuggestionList/UserItem.tsx:6through:18defineUserItemPropsaroundentity,focused?, and button propssrc/components/TextareaComposer/SuggestionList/UserItem.tsx:47rendersUserContextMenuButtonand no longer accepts an injectedAvatar
- Replacement:
- use
useTranslationContext()inside customPinIndicatorimplementations instead of expectingtas a prop - render avatar/button UI directly inside custom suggestion-item helpers instead of expecting an injected
Avatarcomponent
- use
- Evidence:
- the current
PinIndicatorandUserItemhelper components are more self-contained and no longer advertise the v13 helper props - the removed props still appear in the v13 baseline and disappear from the current exported prop types
- the current
- Docs impact:
- migration guide
- Example needed: no
- Status: confirmed
- Area: package compatibility
- User impact:
- apps pinned to the v13-era
stream-chatrange can fail peer-dependency resolution when upgrading to v14 - integrators should upgrade
stream-chatalongsidestream-chat-react
- apps pinned to the v13-era
- Old API:
v13.14.2:package.jsondeclared"stream-chat": "^9.27.2"inpeerDependencies
- New API:
package.json:121declares"stream-chat": "^9.35.0"inpeerDependencies
- Replacement:
- upgrade
stream-chatto^9.35.0or newer when adoptingstream-chat-reactv14 - treat the React SDK and JS client as a coordinated upgrade rather than mixing v14 UI with the older v13 client baseline
- upgrade
- Evidence:
- the package peer dependency floor moved from
^9.27.2to^9.35.0 - current docs still describe installing both packages together but do not call out the new minimum in migration guidance
- the package peer dependency floor moved from
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/01-basics/02-installation.md
- Example needed: no
- Status: confirmed
- Area: channel and channel-list data loading
- User impact:
- apps that relied on the SDKβs old default initial query limits can see different first-load payload sizes and pagination behavior after upgrading
Channelno longer injects a default initialmessages.limitintochannelQueryOptionsChannelListno longer assumes an internal channel/page-size default when deciding whether more channels are available
- Old API:
v13.14.2:src/components/Channel/Channel.tsx:231through:238mergedchannelQueryOptionswithmessages: { limit: DEFAULT_INITIAL_CHANNEL_PAGE_SIZE }v13.14.2:src/components/ChannelList/ChannelList.tsx:237through:240compared loaded channels againstoptions?.limit || MAX_QUERY_CHANNELS_LIMIT
- New API:
src/components/Channel/Channel.tsx:229useschannelQueryOptionsas provided, without injectingmessages.limitsrc/components/ChannelList/ChannelList.tsx:237now returns early only when!channels.lengthsrc/components/ChannelList/hooks/usePaginatedChannels.ts:90still infershasNextPagefromnewOptions.limit, but only if the consumer supplied one
- Replacement:
- set
channelQueryOptions.messages.limitexplicitly if your app depends on a particular initial message batch size - set
ChannelListoptions.limitexplicitly if your app depends on stable first-page size or custom pagination behavior - do not rely on the SDK to inject an initial
queryChannelslimit for you
- set
- Evidence:
- commit
6302c967 feat: use server-defined default limits for channel and channel lists (#2943)removed the old default-merge logic - current
Channelsource no longer callsdefaultsDeepto supply an initial message limit - current
ChannelListactive-channel logic no longer referencesMAX_QUERY_CHANNELS_LIMIT
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/01-channel_list.md
- Example needed: yes
BC-037: AutocompleteSuggestionItem customization now follows the redesigned suggestion-list item contract
- Status: confirmed
- Area: textarea composer customization
- User impact:
- custom
AutocompleteSuggestionItemoverrides built against the old list-item wrapper contract need to be rewritten - suggestion-item overrides now receive button-like props from the dialog/context-menu layer rather than living inside the old internal
<li><button /></li>wrapper - custom suggestion UIs that relied on the old wrapper semantics or prop names can break after upgrading
- custom
- Old API:
v13.14.2:src/components/TextareaComposer/SuggestionList/SuggestionListItem.tsx:21through:26typedSuggestionItemPropsascomponent,item,focused,className?, andonMouseEnter?v13.14.2:src/components/TextareaComposer/SuggestionList/SuggestionListItem.tsx:46through:61rendered an internal<li>plus<button>wrapper and only passedentity/focusedto the inner item componentv13.14.2:src/components/TextareaComposer/SuggestionList/SuggestionList.tsx:90through:108rendered suggestion items inside a plain<ul>
- New API:
src/components/TextareaComposer/SuggestionList/SuggestionListItem.tsx:18through:21typesSuggestionItemPropsasComponentProps<'button'>pluscomponent,item, andfocusedsrc/components/TextareaComposer/SuggestionList/SuggestionListItem.tsx:44through:63renders the component itself as the interactive itemsrc/components/TextareaComposer/SuggestionList/SuggestionList.tsx:113through:136renders suggestion items asContextMenuitems and forwards button props throughAutocompleteSuggestionItem
- Replacement:
- rewrite custom
AutocompleteSuggestionItemoverrides against the currentSuggestionListItemcontract - if you need to customize the inner visuals only, prefer custom
suggestionItemComponents/CommandItem/EmoticonItem/UserItem-style components instead of replacing the whole item wrapper - migrate examples away from the old
selected/onSelectHandler/onClickHandlermental model
- rewrite custom
- Evidence:
- current suggestion-list rendering moved from a static list wrapper to a caret-anchored dialog/context-menu implementation
- current
SuggestionListItemprops and rendering responsibilities differ materially from the v13 baseline
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/03-ui-cookbook/05-message-input/06-suggestion_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/01-channel.md
- Example needed: yes
- Status: confirmed
- Area: message composer behavior
- User impact:
- apps that relied on the old one-line default composer behavior will see a taller multi-line input as users type longer messages
- layouts that were tuned around the old single-row composer can need explicit
maxRowsconfiguration to preserve the previous behavior
- Old API:
v13.14.2:src/components/TextareaComposer/TextareaComposer.tsx:87resolvedmaxRowsasmaxRowsProp ?? maxRowsContext ?? 1
- New API:
src/components/TextareaComposer/TextareaComposer.tsx:87resolvesmaxRowsasmaxRowsProp ?? maxRowsContext ?? 10
- Replacement:
- set
maxRows={1}onMessageInputor your custom composer path if you want to preserve the v13 one-line growth behavior - review composer/container CSS if your layout assumed the old height cap
- set
- Evidence:
- the source default changed directly in
TextareaComposer - commit
6b0310a5 feat: redesign message composer for thread and allow to grow to 10 lines (#2983)matches the behavioral change
- the source default changed directly in
- Docs impact:
- migration guide
- Example needed: no
BC-039: DateSeparator no longer renders the old position / unread visuals, and the default composer markup was redesigned
- Status: confirmed
- Area: date separators and composer markup
- User impact:
- custom
DateSeparatorusage that relied onposition="left" | "center"to render separator lines no longer gets that behavior from the default component - custom
DateSeparatorusage that relied onunreadto render the oldNew - ...label no longer gets that behavior from the default component - custom CSS targeting the old message-input wrappers like
str-chat__message-input-inner,str-chat__message-textarea-container, orstr-chat__message-textarea-with-emoji-pickerno longer matches the default composer DOM
- custom
- Old API:
v13.14.2:src/components/DateSeparator/DateSeparator.tsx:8through:16exposeddate,formatDate,position, andunreadv13.14.2:src/components/DateSeparator/DateSeparator.tsx:42through:50renderedstr-chat__date-separator-lineelements and prefixed unread separators withNew -v13.14.2:src/components/MessageInput/MessageInputFlat.tsx:95through:112used wrapper classes likestr-chat__message-input,str-chat__message-input-inner,str-chat__message-textarea-container, andstr-chat__message-textarea-with-emoji-picker
- New API:
src/components/DateSeparator/DateSeparator.tsx:9through:22addclassNameandfloating, but keepposition/unreadonly as legacy propssrc/components/DateSeparator/DateSeparator.tsx:47through:58render only the date label insidestr-chat__date-separator, with optional--floatingstyling and no separator lines or unread prefixsrc/components/MessageComposer/MessageComposerUI.tsx:157through:191now render the default composer understr-chat__message-composer-container,str-chat__message-composer, andstr-chat__message-composer-controls*
- Replacement:
- provide a custom
DateSeparatorif you still need left/right/center separator lines or unread-prefixed labels - use the new
floatingandclassNameprops only for the current simplified separator UI - audit custom composer CSS, tests, and DOM queries against the new
str-chat__message-composer*structure
- provide a custom
- Evidence:
- the current
DateSeparatorstill acceptsposition/unread, but its implementation no longer uses those props for rendering - the current
MessageInputFlatsource replaced the old message-input wrappers with the new message-composer layout - commit
1bf815f3 feat: redesign message list elements spacing (#2937)explicitly called out both the new composer wrapper and the date-separator visual change
- the current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/13-date_separator.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/01-message_input.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/01-getting_started.md
- Example needed: yes
- Status: confirmed
- Area: threads
- User impact:
- direct
ThreadHeaderusage withoverrideImageno longer type-checks - custom wrappers/tests that expected the old always-visible close button or the old
data-testid='close-button'can break - the default thread-header subtitle is no longer just the channel title; it now includes reply count and can switch to typing state
- direct
- Old API:
v13.14.2:src/components/Thread/index.ts:2exportedThreadHeaderv13.14.2:src/components/Thread/ThreadHeader.tsx:17through:18acceptedThreadHeaderProps & Pick<ChannelPreviewInfoParams, 'overrideImage' | 'overrideTitle'>v13.14.2:src/components/Thread/ThreadHeader.tsx:27through:42rendereddisplayTitleas the subtitle and always showed a close button withdata-testid='close-button'
- New API:
src/components/Thread/index.ts:2still exportsThreadHeadersrc/components/Thread/ThreadHeader.tsx:61through:67defineThreadHeaderPropswith onlycloseThread,thread, and optionaloverrideTitlesrc/components/Thread/ThreadHeader.tsx:22through:55define a subtitle that can render typing state orthreadDisplayName Β· replyCountsrc/components/Thread/ThreadHeader.tsx:94through:106render the close button only when the legacy thread context is active, withdata-testid='close-thread-button'
- Replacement:
- remove
overrideImagefrom any directThreadHeaderusage - if you need image-based customization, build a custom
ThreadHeaderrather than relying on a removed prop - audit tests and custom wrappers for the new subtitle format, typing-state behavior, and conditional close-button rendering
- remove
- Evidence:
- current
ThreadHeaderis still public but its prop type no longer includesoverrideImage - current subtitle behavior is driven by
useChannelPreviewInfo(),replyCount, andTypingIndicatorHeader - current close button is hidden when rendering against the newer thread-instance flow
- current
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/03-ui-cookbook/10-thread_header.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/05-thread.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: message composer attachments
- User impact:
- custom
attachmentSelectorActionSetcode that assumed the old three-action model can behave differently in v14 - spreading
defaultAttachmentSelectorActionSetcan now add aselectCommandentry when the channel has commands configured - custom upload flows that relied on the old disabled file action can break because the default file action is now filtered out entirely when uploads are runtime-disabled
- custom CSS and tests targeting the old simple-selector DOM (
str-chat__file-input-container,str-chat__file-input-label) no longer match - the default attachment-selector button is now disabled during cooldown, including the single-upload fallback
- custom
- Old API:
v13.14.2:src/components/MessageInput/AttachmentSelector.tsx:25through:67renderedSimpleAttachmentSelectorasstr-chat__file-input-containerplus a focusable<label>and optionalFileUploadIconv13.14.2:src/components/MessageInput/AttachmentSelector.tsx:85through:93typedAttachmentSelectorActionPropswith onlycloseMenuandopenModalForActionv13.14.2:src/components/MessageInput/AttachmentSelector.tsx:90through:94typedAttachmentSelectorActionwith onlyActionButton,type, and optionalModalContentv13.14.2:src/components/MessageInput/AttachmentSelector.tsx:145through:155defineddefaultAttachmentSelectorActionSetwith onlyuploadFile,createPoll, andaddLocationv13.14.2:src/components/MessageInput/AttachmentSelector.tsx:97through:112kept the file action visible but disabled it viaisUploadEnabledv13.14.2:src/components/MessageInput/AttachmentSelector.tsx:248through:279rendered the menu with the older dialog-anchor structure and a plain<button>trigger
- New API:
src/components/MessageComposer/AttachmentSelector/AttachmentSelector.tsx:62through:79defineAttachmentSelectorButtonas the new shared button primitivesrc/components/MessageComposer/AttachmentSelector/AttachmentSelector.tsx:81through:113renderSimpleAttachmentSelectorunderstr-chat__attachment-selectorand disable it viauseIsCooldownActive()src/components/MessageComposer/AttachmentSelector/AttachmentSelector.tsx:119through:132extendAttachmentSelectorAction/AttachmentSelectorActionPropswithid,Header,Submenu,submenuItems, andsubmenuHeadersrc/components/MessageComposer/AttachmentSelector/AttachmentSelector.tsx:212through:230addselectCommandtodefaultAttachmentSelectorActionSetsrc/components/MessageComposer/AttachmentSelector/AttachmentSelector.tsx:248through:272filter upload actions byisUploadEnabledand add conditional command-menu supportsrc/components/MessageComposer/AttachmentSelector/AttachmentSelector.tsx:297through:377render the menu withContextMenu, the redesigned trigger button, andGlobalModal
- Replacement:
- audit any custom
attachmentSelectorActionSetlogic that assumes onlyuploadFile,createPoll, andaddLocation - if you need the old disabled-file-action behavior, provide a custom upload action instead of relying on the default filter
- move custom selector styling and tests to the new
str-chat__attachment-selector*andContextMenuDOM - account for cooldown-disabled selector buttons in message-input UX tests
- audit any custom
- Evidence:
- commit
87e89f7f feat: refresh MessageComposer design (#2919)introduced the redesigned selector button, cooldown-disabled simple selector, and aselectCommanddefault action - commit
f151abcd feat: redesign message composer commands, mentions and emoji suggestion lists (#2931)expanded the selector action contract with submenu support and the commands submenu implementation - current source filters upload actions by
isUploadEnabled, unlike the v13 source which rendered the file action disabled
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/08-attachment-selector.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/01-message_input.md
- Example needed: yes
- Status: confirmed
- Area: message composer link previews
- User impact:
- direct
LinkPreviewListusage without props now shows only one preview by default instead of all loaded previews - the default composer can now render link previews alongside a quoted-message preview, where v13 suppressed link previews while quoting
- custom CSS and tests targeting the old icon-only link preview card markup no longer match
- direct
- Old API:
v13.14.2:src/components/MessageInput/LinkPreviewList.tsx:23through:41subscribed toquotedMessageand suppressed previews while quotingv13.14.2:src/components/MessageInput/LinkPreviewList.tsx:43through:48rendered all loaded/loading previews with no count propv13.14.2:src/components/MessageInput/LinkPreviewList.tsx:68through:106rendered the old icon-container card UI withLinkIconand a plain dismiss button usingCloseIconv13.14.2:src/components/MessageInput/MessageInputFlat.tsx:104through:110renderedLinkPreviewListabove the quoted-message preview header rather than inside the shared preview stack
- New API:
src/components/MessageComposer/LinkPreviewList.tsx:13through:15defineLinkPreviewListPropswithdisplayLinkCount?: numbersrc/components/MessageComposer/LinkPreviewList.tsx:25through:40defaultdisplayLinkCountto1and renderlinkPreviews.slice(0, displayLinkCount)src/components/MessageComposer/LinkPreviewList.tsx:48through:106render the redesigned card with optional image thumbnails, a URL row, andRemoveAttachmentPreviewButtonsrc/components/MessageComposer/MessageComposerUI.tsx:90through:122renderQuotedMessagePreview, attachment previews, andLinkPreviewListtogether insidestr-chat__message-composer-previews
- Replacement:
- wrap the default component and pass
displayLinkCountif you want to keep showing more than one preview - provide a custom
LinkPreviewListif you want the old quote-mode suppression or the old card UI - audit link-preview CSS, snapshots, and DOM queries against the new thumbnail/URL-row markup
- wrap the default component and pass
- Evidence:
- commit
87e89f7f feat: refresh MessageComposer design (#2919)addeddisplayLinkCount, removed thequotedMessageguard fromLinkPreviewList, and moved link previews into the shared composer preview stack - current source no longer reads
quotedMessageinsideLinkPreviewListand limits the rendered previews withslice(0, displayLinkCount)
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/05-ui_components.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/05-message-input/02-link-previews.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/01-message_input.md
- Example needed: yes
- Status: confirmed
- Area: chat view and thread selection
- User impact:
- apps using the default
ChatView.ThreadAdapterno longer get an empty thread pane before a thread is selected - snapshot and UI tests that expected
ThreadAdapterto render onlyThreadProvidercan fail once thread state is ready EmptyStateIndicatoroverrides now affect the default thread pane inChatView.Threads
- apps using the default
- Old API:
v13.14.2:src/components/ChatView/ChatView.tsx:120through:125implementedThreadAdapteras a thin wrapper that only calleduseActiveThread()and returned<ThreadProvider thread={activeThread}>{children}</ThreadProvider>
- New API:
src/components/ChatView/ChatView.tsx:139through:166resolveEmptyStateIndicatorfrom component context, readclient.threads.statereadiness, and render a message-list empty state withmessageText={t('Select a thread to continue the conversation')}when no thread is active
- Replacement:
- if you want to preserve the old blank-state behavior, avoid
ChatView.ThreadAdapterand wireThreadProvidermanually, or overrideEmptyStateIndicatorin that scope with a component that rendersnull - update tests and empty-state assumptions around
ChatView.Threadsto account for the new default placeholder
- if you want to preserve the old blank-state behavior, avoid
- Evidence:
- current source added an explicit ready-state branch before
ThreadProvider - current
ChatViewtests assert that the placeholder text appears when no thread is selected and disappears after thread selection - current v14 docs still describe
ThreadAdapteras only forwarding the active thread toThreadProvider
- current source added an explicit ready-state branch before
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/11-chat-view.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/06-thread-list/01-thread-list.md
- Example needed: yes
- Status: confirmed
- Area: chat view navigation
- User impact:
- apps using the default
<ChatView.Selector />no longer get visibleChannels/Threadslabels by default - snapshot, text-based UI, and accessibility tests that expected the old labeled selector buttons can fail
- layouts that relied on the wider labeled selector can need explicit configuration to preserve the v13 appearance
- apps using the default
- Old API:
v13.14.2:src/components/ChatView/ChatView.tsx:132through:160renderedChatView.Selectoras two always-labeled buttons with visibleChannels/Threadstext
- New API:
src/components/ChatView/ChatView.tsx:224through:312introduceChatViewSelectorPropswithiconOnly?: booleansrc/components/ChatView/ChatView.tsx:229,:253, and:310default the selector items and selector itself toiconOnly = truesrc/components/ChatView/ChatView.tsx:186through:209now hide the visible text by default and render it as a tooltip/aria-labelinstead
- Replacement:
- pass
iconOnly={false}toChatView.Selectorif you want to preserve the old always-labeled button layout - re-baseline any selector snapshots or text queries against the current default icon-only behavior
- pass
- Evidence:
- the old selector had no
iconOnlyprop and always rendered visible button text - the current selector path defaults
iconOnlytotruein both item components and the exported selector - current docs still show
<ChatView.Selector />without warning that the visible labels are no longer the default
- the old selector had no
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/11-chat-view.md
- Example needed: yes
- Status: confirmed
- Area: search and channel-list customization
- User impact:
- imports using
Searchfromstream-chat-react/experimentalno longer resolve because the experimental entrypoint was removed - imports using
ChannelSearchno longer resolve ChannelListcustomizations usingadditionalChannelSearchPropsor theChannelSearchoverride prop no longer type-checkshowChannelSearchnow renders the stableSearchcomponent fromComponentContext, so search customization moves toWithComponents/ComponentContext
- imports using
- Old API:
v13.14.2:src/components/index.ts:10exportedChannelSearchv13.14.2:src/experimental/index.ts:2exportedSearchv13.14.2:src/components/ChannelList/ChannelList.tsx:66typedadditionalChannelSearchProps?: Omit<ChannelSearchProps, 'onSearch' | 'onSearchExit'>v13.14.2:src/components/ChannelList/ChannelList.tsx:75typedChannelSearch?: React.ComponentType<ChannelSearchProps>v13.14.2:src/components/ChannelList/ChannelList.tsx:504renderedChannelSearchwithadditionalChannelSearchProps
- New API:
src/components/index.ts:10exports stableSearch- current source has no public
ChannelSearchexport - current source has no
src/experimental/index.ts src/components/ChannelList/ChannelList.tsx:182resolvesSearchfromComponentContextsrc/components/ChannelList/ChannelList.tsx:395through:397renders<Search />directly whenshowChannelSearchis truesrc/components/Search/Search.tsx:17through:24define the stableSearchPropssurface asdirectMessagingChannelType,disabled,exitSearchOnInputBlur, andplaceholder
- Replacement:
- import
Searchfromstream-chat-react - replace standalone
ChannelSearchusage withSearch - replace
ChannelList.additionalChannelSearchPropsandChannelList.ChannelSearchcustomizations withWithComponents/ComponentContextoverrides ofSearch,SearchBar,SearchResults, and related search subcomponents - if you still use
showChannelSearch, keep it enabled onChannelListand customize the stable search surface throughComponentContext
- import
- Evidence:
- commit
9a7b7a2b feat: promote Search to stable, drop ChannelSearch [REACT-894] (#3014)removed the oldChannelSearchexport path and promotedSearchto the stable package entrypoint - current
ChannelListrendersSearchdirectly and no longer typesadditionalChannelSearchPropsorChannelSearch - current
Searchsource exposes a smaller stable prop surface than the removedChannelSearch
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/01-channel_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/02-channel_list_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/05-channel_search.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/02-channel-list/02-channel_search.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/08-app_menu.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/08-advanced-search.mddocs/data/docs/_sidebars/[chat-sdk][react][v14-rc].json
- Example needed: yes
- Status: confirmed
- Area: audio playback helpers
- User impact:
- imports using
useAudioControllerno longer resolve - custom attachment or playback UIs built against the old hook need to switch to
useAudioPlayer
- imports using
- Old API:
v13.14.2:src/components/Attachment/hooks/useAudioController.tsexporteduseAudioControllerv13.14.2:src/components/Attachment/index.ts:13re-exporteduseAudioController
- New API:
- current source has no
useAudioControllerfile or export - current attachment/audio playback docs and examples use
useAudioPlayer
- current source has no
- Replacement:
- replace
useAudioController()withuseAudioPlayer() - re-audit any custom audio controls for naming and return-value differences before upgrading
- replace
- Evidence:
- commit
35f8a5d4 refactor!: remove deprecated useAudioController hook (#3016)deletedsrc/components/Attachment/hooks/useAudioController.ts - current
src/components/Attachment/index.tsno longer exportsuseAudioController
- commit
- Docs impact:
- migration guide
- Example needed: no
- Status: confirmed
- Area: message metadata
- User impact:
- imports using
MessageEditedTimestamporMessageEditedTimestampPropsno longer resolve - custom message metadata UIs that relied on the old
openprop or click-to-toggle behavior no longer work as before - custom message UIs should move to
MessageEditedIndicatoror render their ownTimestamp
- imports using
- Old API:
v13.14.2:src/components/Message/index.ts:7exportedMessageEditedTimestampv13.14.2:src/components/Message/MessageEditedTimestamp.tsx:14through:18exportedMessageEditedTimestampPropsv13.14.2:src/components/Message/MessageSimple.tsx:229rendered<MessageEditedTimestamp calendar open={isEditedTimestampOpen} />
- New API:
src/components/Message/index.ts:12through:13exportMessageTimestampandMessageEditedIndicator, with noMessageEditedTimestampsrc/components/Message/MessageEditedIndicator.tsx:13through:18defineMessageEditedIndicatorPropssrc/components/Message/MessageUI.tsx:252through:253render<MessageEditedIndicator />in the default message metadatasrc/context/ComponentContext.tsx:199through:200exposeMessageEditedIndicatoras the override surface
- Replacement:
- replace
MessageEditedTimestampwithMessageEditedIndicator - if you need always-visible edited time or custom interaction, build that behavior explicitly with
Timestampandmessage.message_text_updated_at - update custom metadata UIs and tests to expect the new hover-tooltip indicator instead of the removed toggleable timestamp component
- replace
- Evidence:
- current source removed the
MessageEditedTimestampexport and file - current
MessageSimpleno longer manages edited-timestamp open state and instead rendersMessageEditedIndicator - commit
7cbe67e4 fix: remove MessageEditedTimestamp componentremoved the old component, andcfbe346b feat: add MessageEditedIndicator componentintroduced the replacement
- current source removed the
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/07-ui-components.mddocs/data/docs/chat-sdk/react/v14/04-guides/08-date-time-formatting.md
- Example needed: yes
- Status: confirmed
- Area: timestamp formatting
- User impact:
- the default per-message timestamp in v14 now shows only time by default instead of the older calendar-style date/time formatting
- visual snapshots and UIs that expected the old calendar wording can change even without custom timestamp code
- integrations that want the old behavior need to override
MessageTimestampformatting explicitly
- Old API:
v13.14.2:src/i18n/en.json:227set"timestamp/MessageTimestamp"to{{ timestamp | timestampFormatter(calendar: true) }}
- New API:
src/i18n/en.json:390sets"timestamp/MessageTimestamp"to{{ timestamp | timestampFormatter(calendar: false; format: HH:mm) }}
- Replacement:
- override
timestamp/MessageTimestampin yourStreami18nconfiguration if you want the old calendar-style default back - or provide a custom
MessageTimestampthroughWithComponents/ComponentContext
- override
- Evidence:
- current translation defaults changed
MessageTimestampfrom calendar formatting toHH:mm - commit
da4aa922 feat: show only time in MessageTimestamp (#3021)made the new default explicit in the i18n files and tests
- current translation defaults changed
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/04-guides/08-date-time-formatting.md
- Example needed: yes
BC-049: the public message-input/composer surface was renamed from MessageInput* to MessageComposer*
- Status: confirmed
- Area: message composer entrypoints and types
- User impact:
- imports using
MessageInput,MessageInputFlat,MessageInputContext, oruseMessageInputContextno longer compile - integrations using
additionalMessageInputPropsno longer type-check - thread/message customization that relied on the old
MessageInputnaming needs to move to theMessageComposernaming set
- imports using
- Old API:
v13.14.2:src/components/index.ts:24exportedMessageInputv13.14.2:src/components/MessageInput/index.ts:17and:18exportedMessageInputandMessageInputFlatv13.14.2:src/context/index.ts:9exportedMessageInputContextv13.14.2:src/context/MessageInputContext.tsx:7definedMessageInputContextValuev13.14.2:src/context/MessageInputContext.tsx:26exporteduseMessageInputContextv13.14.2:src/components/Message/types.ts:22through:23exposedadditionalMessageInputProps?: MessageInputPropsv13.14.2:src/components/Thread/Thread.tsx:27through:28exposedadditionalMessageInputProps?: MessageInputProps
- New API:
src/components/index.ts:31exportsMessageComposersrc/components/MessageComposer/index.ts:18and:19exportMessageComposerandMessageComposerUIsrc/context/index.ts:9exportsMessageComposerContextsrc/context/MessageComposerContext.tsx:7definesMessageComposerContextValuesrc/context/MessageComposerContext.tsx:27exportsuseMessageComposerContextsrc/components/Message/types.ts:19through:20exposeadditionalMessageComposerProps?: MessageComposerPropssrc/components/Thread/Thread.tsx:27through:28exposeadditionalMessageComposerProps?: MessageComposerProps
- Replacement:
- rename
MessageInputimports toMessageComposer - rename
MessageInputContext/useMessageInputContexttoMessageComposerContext/useMessageComposerContext - rename
additionalMessageInputPropstoadditionalMessageComposerProps - update any docs links or code references that still point at
src/components/MessageInput/*
- rename
- Evidence:
- the package root, component index, context index, and shared message/thread prop surfaces all switched to the
MessageComposer*names - the old
MessageInput*public entrypoints were removed rather than kept as aliases - commit
a5632481 fix: component renames (#3030)performed the rename across the public React component surface
- the package root, component index, context index, and shared message/thread prop surfaces all switched to the
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/01-message_input.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/02-message_input_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/04-input_ui.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/09-message-input/05-ui_components.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/01-message_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/02-virtualized_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/05-thread.md
- Example needed: yes
- Status: confirmed
- Area: channel list previews
- User impact:
- imports using
ChannelPreview,ChannelPreviewMessenger, orChannelPreviewActionButtonsno longer compile ChannelList.Previewnow expectsChannelListItemUIPropsinstead ofChannelPreviewUIComponentPropsComponentContextoverride keys usingChannelPreviewActionButtonsneed to move toChannelListItemActionButtons
- imports using
- Old API:
v13.14.2:src/components/index.ts:8exportedChannelPreviewv13.14.2:src/components/ChannelPreview/index.ts:1through:3exportedChannelPreview,ChannelPreviewMessenger, andChannelPreviewActionButtonsv13.14.2:src/components/ChannelPreview/ChannelPreview.tsx:19definedChannelPreviewUIComponentPropsv13.14.2:src/components/ChannelPreview/ChannelPreview.tsx:38definedChannelPreviewPropsv13.14.2:src/components/ChannelList/ChannelList.tsx:144typedPreview?: React.ComponentType<ChannelPreviewUIComponentProps>v13.14.2:src/context/ComponentContext.tsx:90through:91exposedChannelPreviewActionButtons
- New API:
src/components/index.ts:11exportsChannelListItemsrc/components/ChannelListItem/index.ts:1through:4exportChannelListItem,ChannelListItemUI,ChannelListItemActionButtons, andChannelListItemTimestampsrc/components/ChannelListItem/ChannelListItem.tsx:22through:41defineChannelListItemUIPropssrc/components/ChannelListItem/ChannelListItem.tsx:43through:70defineChannelListItemPropssrc/components/ChannelList/ChannelList.tsx:143through:144typePreview?: React.ComponentType<ChannelListItemUIProps>src/context/ComponentContext.tsx:105through:108exposeChannelListItemActionButtonsandChannelListItemUI
- Replacement:
- rename
ChannelPreview*imports to theChannelListItem*equivalents - update
Previewoverrides and custom preview typing toChannelListItemUIProps - update
ComponentContextoverrides fromChannelPreviewActionButtonstoChannelListItemActionButtons
- rename
- Evidence:
- the old
ChannelPreviewmodule is gone from the package root, and the renamedChannelListItemmodule now owns the public preview surface ChannelListandComponentContexttype signatures were updated to the new names instead of keeping compatibility aliases- commit
a5632481 fix: component renames (#3030)performed the rename across the public channel-list preview surface
- the old
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/01-channel_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/04-channel_preview_ui.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/02-channel-list/01-channel_list_preview.mddocs/data/docs/chat-sdk/react/v14/04-guides/07-sdk-state-management.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
- Status: confirmed
- Area: message-list notification containers
- User impact:
- imports using
MessageListNotificationsorMessageListNotificationsPropsno longer compile ComponentContextoverrides can no longer replaceMessageListNotifications- custom layouts that relied on the old wrapper need to move to
MessageListMainPanel,NotificationList, and the direct notification override points
- imports using
- Old API:
v13.14.2:src/components/MessageList/index.ts:4exportedMessageListNotificationsv13.14.2:src/components/MessageList/MessageListNotifications.tsx:30through:39definedMessageListNotificationsPropsv13.14.2:src/context/ComponentContext.tsx:137exposedMessageListNotifications?: React.ComponentType<MessageListNotificationsProps>
- New API:
- current
src/components/MessageList/index.ts:1through:8export noMessageListNotifications - current source has no
src/components/MessageList/MessageListNotifications.tsx src/context/ComponentContext.tsx:151through:153exposeMessageListMainPanelandNotificationList, but noMessageListNotificationssrc/components/MessageList/MessageList.tsx:402through:470render the current notification stack directlysrc/components/MessageList/VirtualizedMessageList.tsx:493through:600render the same stack directly
- current
- Replacement:
- stop importing or overriding
MessageListNotifications - use
NotificationListfor emitted client notifications - use
MessageListMainPanel,NewMessageNotification,UnreadMessagesNotification, andScrollToLatestMessageButtonfor layout-level customization around the list
- stop importing or overriding
- Evidence:
- the component file and package export were removed after the earlier notification redesign
- current message-list implementations inline the notification stack instead of delegating to a public wrapper component
- commit
e06ec621 feat: remove MessageListNotifications component (#3028)removed the remaining public surface
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/04-guides/13-notifications.mddocs/data/docs/chat-sdk/react/v14/04-guides/05-channel_read_state.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/01-message_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/02-virtualized_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
BC-052: ChannelListMessenger was renamed to ChannelListUI, and direct channel-list UI override props were removed
- Status: confirmed
- Area: channel-list container and row customization
- User impact:
- imports using
ChannelListMessengerorChannelListMessengerPropsno longer compile ChannelListno longer acceptsAvatar,List,LoadingErrorIndicator,LoadingIndicator, orPreviewChannelListItemno longer acceptsAvatar- custom CSS targeting
.str-chat__channel-list-messenger*or.str-chat__channel-list-reactno longer matches the default markup
- imports using
- Old API:
v13.14.2:src/components/ChannelList/index.ts:2exportedChannelListMessengerv13.14.2:src/components/ChannelList/ChannelListMessenger.tsx:10through:22definedChannelListMessengerPropsv13.14.2:src/components/ChannelList/ChannelList.tsx:65through:66exposedAvatar?: React.ComponentType<ChannelAvatarProps>v13.14.2:src/components/ChannelList/ChannelList.tsx:87through:92exposedList,LoadingErrorIndicator, andLoadingIndicatorv13.14.2:src/components/ChannelList/ChannelList.tsx:144through:145exposedPreview?: React.ComponentType<ChannelPreviewUIComponentProps>7c978a9e:src/components/ChannelListItem/ChannelListItem.tsx:43through:51still exposedAvatar?: React.ComponentType<ChannelAvatarProps>onChannelListItemPropsv13.14.2:src/components/ChannelList/ChannelListMessenger.tsx:49through:52usedstr-chat__channel-list-messenger,str-chat__channel-list-messenger-react, andstr-chat__channel-list-messenger-react__mainv13.14.2:src/components/ChannelList/ChannelList.tsx:367through:372addedstr-chat__channel-list-reactto the root class list
- New API:
src/components/ChannelList/index.ts:2exportsChannelListUIsrc/components/ChannelList/ChannelListUI.tsx:9through:17defineChannelListUIPropssrc/context/ComponentContext.tsx:106through:111exposeChannelListUI,ChannelListItemActionButtons, andChannelListItemUIsrc/components/ChannelList/ChannelList.tsx:58through:67and:125through:149no longer defineAvatar,List,LoadingErrorIndicator,LoadingIndicator, orPreviewonChannelListPropssrc/components/ChannelList/ChannelList.tsx:197through:200sourceChannelListUI,NotificationList, andSearchfromComponentContextsrc/components/ChannelList/ChannelList.tsx:352through:374render<ChannelListUI ...>directlysrc/components/ChannelListItem/ChannelListItem.tsx:42through:66no longer defineAvataronChannelListItemPropssrc/components/ChannelList/ChannelListUI.tsx:34through:40usestr-chat__channel-list-innerandstr-chat__channel-list-inner__mainsrc/components/ChannelList/ChannelList.tsx:330through:339no longer appendstr-chat__channel-list-reactto the root class list
- Replacement:
- rename
ChannelListMessengertoChannelListUI - move list-container customization from
ChannelList List={...}toWithComponents/ComponentContextviaChannelListUI - move loading and error indicator customization to
WithComponents/ComponentContextviaLoadingIndicatorandLoadingErrorIndicator - move avatar and row customization to
WithComponents/ComponentContextviaAvatarandChannelListItemUI - update custom CSS selectors from
str-chat__channel-list-messenger*tostr-chat__channel-list-inner*, and stop relying on the removedstr-chat__channel-list-reactclass
- rename
- Evidence:
- commit
d2513383 fix: rename ChannelListMessenger to ChannelListUI (#3036)renamed the component and its props type, removed directChannelListoverride props, removedChannelListItem.Avatar, added theComponentContext.ChannelListUIslot, and changed the default class names - current source no longer has
src/components/ChannelList/ChannelListMessenger.tsx - current
ChannelListandChannelListItemsignatures no longer expose the removed override props
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/01-channel_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/02-channel_list_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/04-channel_preview_ui.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/06-channel-list-infinite-scroll.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/02-channel-list/01-channel_list_preview.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md
- Example needed: yes
BC-053: MessageActions and ChannelListItemActionButtons now require an explicit quick dropdown-toggle item
- Status: confirmed
- Area: action-set customization
- User impact:
- custom
messageActionSetarrays that do not include the new dropdown-toggle entry can silently lose the menu trigger even when dropdown actions are still present - custom
channelActionSetarrays that do not include the new dropdown-toggle entry can silently lose the channel-row action menu trigger - TypeScript code that assumed action placements were only
'quick' | 'dropdown'no longer type-checks against the current public union
- custom
- Old API:
d2513383:src/components/MessageActions/MessageActions.tsx:23through:35typedMessageActionSetItemas onlyquickordropdownd2513383:src/components/MessageActions/MessageActions.tsx:102through:135rendered the message-actions toggle button internally whenever dropdown actions were presentd2513383:src/components/ChannelListItem/ChannelListItemActionButtons.tsx:51through:85rendered the channel-row toggle button internally whenever dropdown actions were present
- New API:
src/components/MessageActions/MessageActions.tsx:31through:39addQuickDropdownToggleActionSetItemwithplacement: 'quick-dropdown-toggle'src/components/MessageActions/MessageActions.tsx:71through:72split the action set intodropdownActionSet,quickActionSet, andquickDropdownToggleActionsrc/components/MessageActions/MessageActions.tsx:103through:125render the message-actions menu only when aquickDropdownToggleActionis presentsrc/components/ChannelListItem/ChannelListItemActionButtons.tsx:30through:55and:85through:103follow the same explicit-toggle model forchannelActionSetsrc/components/MessageActions/MessageActions.defaults.tsxandsrc/components/ChannelListItem/ChannelListItemActionButtons.defaults.tsxnow include a defaultquick-dropdown-toggleitem
- Replacement:
- when you customize
messageActionSet, start fromdefaultMessageActionSetunless you are intentionally rebuilding the whole action surface - if you build a fully custom message action set, include a
quick-dropdown-toggleitem whenever you still want dropdown actions to be reachable - when you customize
channelActionSet, preserve or replace the defaultquick-dropdown-toggleitem explicitly instead of assuming the SDK will inject the toggle button for you
- when you customize
- Evidence:
- commit
30ddab0f feat: quick dropdown toggle and cleanup (#3054)added the newquick-dropdown-toggleplacement, removed the hardcoded toggle buttons, and moved bothMessageActionsandChannelListItemActionButtonsto the explicit-toggle model - current source no longer renders dropdown toggles unconditionally when dropdown actions exist
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/05-experimental-features/01-message-actions.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/04-message_actions.mddocs/data/docs/chat-sdk/react/v14/04-guides/11-blocking-users.md
- Example needed: yes
- Status: confirmed
- Area: failed-message handling
- User impact:
- imports using
MessageErrorTextno longer compile - imports using
MessageErrorIconno longer compile - custom message UIs or AI-message examples that still render the removed error icon are stale
handleDelete()now rethrows deletion failures after notifying, so custom delete buttons can no longer assume the handler always swallows errors- deleting unsent or network-failed messages now removes them locally instead of routing through the server delete path
- imports using
- Old API:
d2513383:src/components/Message/MessageText.tsx:8importedMessageErrorTextd2513383:src/components/Message/MessageText.tsx:72rendered<MessageErrorText message={message} />d2513383:src/components/Message/hooks/useDeleteHandler.ts:25through:39only attempted a server delete and swallowed caught errors after notifyingv13.14.2:src/components/Message/icons.tsx:108exportedMessageErrorIcon
- New API:
- current source has no
src/components/Message/MessageErrorText.tsx src/components/Message/MessageText.tsx:57through:78render message text without a separateMessageErrorTextchildsrc/components/Message/MessageUI.tsx:275through:277render the default failed-send badge throughstr-chat__message-error-indicatorand the sharedErrorBadgesrc/components/Message/hooks/useDeleteHandler.ts:31through:34remove unsent and network-failed messages locallysrc/components/Message/hooks/useDeleteHandler.ts:43through:48notify and then rethrow on delete failures
- current source has no
- Replacement:
- stop importing
MessageErrorTextorMessageErrorIcon - rebuild custom failed-send UI around the current error badge or explicit app-owned markup
- wrap custom
handleDelete()calls intry/catchif your UI needs to recover from server-side delete failures - expect
handleDelete()to remove unsent and network-failed messages locally without issuing a delete request
- stop importing
- Evidence:
- commit
e0207cd6 fix: adjust message UI for network error when sending a message (#3042)removedMessageErrorText, changed failed-message deletion semantics, and rethrew delete failures - commit
f4caa0eb feat: redesign message actions icons and message error badge (#3050)removedMessageErrorIconand switched the default failed-send badge to the new shared indicator
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/02-message_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/03-message_bounce_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/04-message_hooks.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/01-message_ui.mddocs/data/docs/chat-sdk/react/v14/04-guides/16-ai-integrations/02-chat-sdk-integration.md
- Example needed: yes
- Status: confirmed
- Area: read-state and message actions
- User impact:
- the default
markUnreadaction is no longer available on your own messages, even when the channel has the requiredread-eventscapability - custom docs/examples that present
markUnreadas a generic built-in message action are now incomplete - custom action-set filters that only remove
markUnreadby type can miss that the SDK base filter already removes it for own messages
- the default
- Old API:
d2513383:src/components/Message/hooks/useUserRole.ts:51allowedcanMarkUnreadwheneverchannelCapabilities['read-events']was true
- New API:
src/components/Message/hooks/useUserRole.ts:51allowscanMarkUnreadonly when the message is not your own and the channel hasread-events
- Replacement:
- do not assume
markUnreadwill be available for your own messages in customMessageActionsUIs - if you document or filter built-in actions, note that
markUnreadis limited to foreign messages and the required capability - keep the SDK base action-set filter enabled unless you are intentionally re-implementing the same guardrails yourself
- do not assume
- Evidence:
- commit
fe05b622 feat: do not allow to mark own messages unread (#3043)changedcanMarkUnreadfrom a capability-only check to!isMyMessage && channelCapabilities['read-events'] - current
useUserRole()and the defaultMessageActionsfilter no longer exposemarkUnreadfor own messages
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/05-experimental-features/01-message-actions.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/04-message_actions.mddocs/data/docs/chat-sdk/react/v14/04-guides/05-channel_read_state.md
- Example needed: yes
- Status: confirmed
- Area: channel-list hooks
- User impact:
- TypeScript code calling
useChannelListContext('MyComponent')no longer type-checks - integrations that relied on the SDK's outside-provider console warning no longer get that diagnostic side effect
- custom docs/snippets that still describe
componentNameas part of the hook signature are stale
- TypeScript code calling
- Old API:
v13.14.2:src/context/ChannelListContext.tsx:41exporteduseChannelListContext(componentName?: string)9877da51:src/context/ChannelListContext.tsx:41still logged the missing-provider warning and interpolatedcomponentName
- New API:
src/context/ChannelListContext.tsx:44exportsuseChannelListContext()with no parameterssrc/context/ChannelListContext.tsx:47through:49now return an empty context object outside the provider without logging
- Replacement:
- call
useChannelListContext()without arguments - do not rely on SDK warnings for provider misuse; add app-owned assertions or logging if you still need that diagnostic signal
- call
- Evidence:
- commit
7914e516 feat: reset audio player progress when the track is fully played (#3066)removed the optionalcomponentNameparameter and the warning branch fromuseChannelListContext() - current source keeps the hook public, but its signature and missing-provider behavior no longer match v13 or the previously audited v14 snapshots
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/05-channel-list/02-channel_list_context.mddocs/data/docs/chat-sdk/react/v14/04-guides/07-sdk-state-management.md
- Example needed: no
- Status: confirmed
- Area: styling imports
- User impact:
- apps importing default styles from
stream-chat-react/dist/css/v2/*stop resolving those assets after the CSS build-output cleanup - installation guides, starter snippets, or internal app templates that still use the old
v2CSS path are now stale
- apps importing default styles from
- Old API:
stream-chat-react/dist/css/v2/index.cssstream-chat-react/dist/css/v2/index.layout.css
- New API:
stream-chat-react/dist/css/index.cssstream-chat-react/dist/css/index.layout.css
- Replacement:
- remove the
/v2segment from CSS import paths
- remove the
- Evidence:
- commit
f06846da fix: clean up CSS build output (#3072)explicitly marksstream-chat-react/dist/css/v2/*imports as a breaking change - current package exports styles from the root
dist/css/*paths, with nov2subpath exports - current build scripts output styles directly under
dist/css/*
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/01-basics/02-installation.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/01-getting_started.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/02-theming/01-themingv2.md
- Example needed: no
BC-058: deprecated reaction-detail comparator props were removed from message, list, and reactions surfaces
- Status: confirmed
- Area: reactions and message-list props
- User impact:
- TypeScript code passing
sortReactionDetailsno longer type-checks onMessage,MessageContext,MessageList,VirtualizedMessageList,MessageReactions, orMessageReactionsDetail - imports of
ReactionDetailsComparatorno longer compile MessageReactionsno longer accepts the deprecatedreaction_countsor directreactionOptionsprops- custom reaction UIs that still pass
reactionOptionsstraight intoMessageReactionsmust move that configuration toWithComponents/ComponentContext
- TypeScript code passing
- Old API:
f06846da:src/components/Message/types.ts:107exposedsortReactionDetails?: ReactionDetailsComparatorf06846da:src/context/MessageContext.tsx:127exposedsortReactionDetails?: ReactionDetailsComparatorf06846da:src/components/MessageList/MessageList.tsx:503andsrc/components/MessageList/VirtualizedMessageList.tsx:90still forwardedsortReactionDetailsf06846da:src/components/Reactions/MessageReactions.tsx:39,:46, and:54still acceptedreaction_counts,reactionOptions, andsortReactionDetailsf06846da:src/components/Reactions/MessageReactionsDetail.tsx:25still acceptedsortReactionDetails?: ReactionDetailsComparatorf06846da:src/components/Reactions/hooks/useProcessReactions.tsx:12through:14still acceptedreaction_countsandreactionOptionsf06846da:src/components/Reactions/types.ts:14still exportedReactionDetailsComparator
- New API:
src/components/Message/types.ts:83andsrc/context/MessageContext.tsx:107now exposereactionDetailsSort?: ReactionSortsrc/components/MessageList/MessageList.tsx:496andsrc/components/MessageList/VirtualizedMessageList.tsx:86now forwardreactionDetailsSortsrc/components/Reactions/MessageReactions.tsx:26through:40acceptreaction_groups,reactionDetailsSort, and the narrowed current props onlysrc/components/Reactions/MessageReactionsDetail.tsx:19through:26acceptreactionDetailsSortandreactionGroups, with nosort/sortReactionDetailsmigration pathsrc/components/Reactions/hooks/useProcessReactions.tsx:10through:13now accept onlyown_reactions,reaction_groups,reactions, andsortReactionssrc/components/Reactions/types.tsno longer exportsReactionDetailsComparator
- Replacement:
- replace
sortReactionDetailswithreactionDetailsSortand pass a server-sideReactionSortobject instead of a client comparator - replace
reaction_countswithreaction_groups - move
reactionOptionsconfiguration to<WithComponents overrides={{ reactionOptions }}> - update any custom
useProcessReactionswrappers to the narrower parameter type
- replace
- Evidence:
- commit
a82bdcb20 fix: post-review MessageReactionsDetail adjustments (#3082)explicitly removed the deprecated props and type export - current source keeps
reactionDetailsSortas the supported sort customization path across message, list, and reactions surfaces - current
MessageReactionsreadsreactionOptionsfromComponentContext, not from its own props
- commit
- Docs impact:
- migration guide
docs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/01-message_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/07-message-list/02-virtualized_list.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/01-message.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/02-message_context.mddocs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/12-reactions.mddocs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/02-reactions.md
- Example needed: yes
- None yet
WithDragAndDropUploadredesign (d2a72b54): investigated; current source addsFileDragAndDropContent,str-chat__dropzone-root, and cooldown-aware disabling, but does not remove or rename the publicWithDragAndDropUploadprops. Treat the DOM changes under the existing theming/markup buckets instead of as a separate API migration item.BaseImagemodule split and fallback refinements (3539020e,dfe9d77f): investigated;showDownloadButtonOnErrorwas added,BaseImage/ImagePlaceholdermoved out ofGallery, andBaseImageis now re-exported from the package root, but this is additive/path cleanup rather than a standalone v13 to v14 breaking API change. Update source links and reference docs only.Giphypreview cleanup (21b905ce,aa36a4dd): investigated; current source gives nativegiphyattachments dedicated quoted-message and channel-preview handling and keeps inline giphy attachments out ofModalGallery, but it does not remove or rename the documented v13 public API. Treat this as current-behavior docs maintenance, not a new migration bucket.- command-selected composer layout (
22d32d46,aa36a4dd): investigated; currentMessageInputFlathidesAttachmentSelectorand additional composer actions while a slash command is selected, but there is no public prop or export removal. Document it as current default UI behavior rather than a new breaking-change entry. - location-sharing redesign (
b72dedae): investigated; the defaultShareLocationDialogand selector UI changed visually, but the publicShareLocationDialogexport andaddLocationattachment-selector action remain available. Treat this as docs/theming maintenance only. channelActionSetintroduction (199797ed): investigated; this adds a new customization surface for channel actions, but it does not remove or rename the earlier public v13 APIs. Track it as additive docs work, not a migration bucket.- poll UI polish after the initial poll redesign (
e0659f3f,33fed1e4,e75ca3ac,ca11f908,885b7a64,c364b0b9): investigated; the follow-up commits moved buttons, removed a tooltip, and adjusted prompt composition, but they did not introduce a new public export/prop removal beyond the existing poll bucket. - smooth message-list scrolling (
cdf35d29): investigated; this changes default behavior, but there is no new public prop, export, or override-key removal to track as a separate migration item. useNotificationTarget()/useChatViewContext()softening (38b278e0): investigated;useNotificationTarget()can now returnundefined, anduseChatViewContext()warns instead of throwing outside the provider, but this is runtime hardening rather than a public v13-to-v14 migration item.- composer clear-on-unmount (
f2a79ab1): investigated;TextareaComposernow clears composer state on unmount, but there is no removed export, renamed prop, or new override-key migration to track separately. - shared attachment preview gallery (
f05f47d7): investigated;AttachmentPreviewListnow shares gallery preview behavior across attachments, but this is current UI behavior rather than a removed or renamed public API. - voice-message deleted notification (
9982c45a): investigated; this adds a new default notification string/behavior for deleted voice recordings, but it does not remove or rename the existing public attachment APIs. - context-menu animations and global outside-click dismissal controls (
630e5c72): investigated; current source addsContextMenu,ContextMenuContent,DialogManagerProvider.closeOnClickOutside, andDialogAnchortransition controls, but this is additive customization and behavior polish rather than a removed or renamed v13 public API. MessageReactionsDetailloading/toggle refinements (cab3ffd3): investigated; current source addsMessageReactionsDetailLoadingIndicator, allows toggling the selected reaction type back tonull, and improves the unfiltered reactions view, but these are additive/current-behavior changes rather than a distinct migration bucket.- audio/player, scrolling, and layout polish (
7914e516,91eba1b4,8d25ead3,55dd2e81,fdf0e155,221aa0d4): investigated; these commits refine playback reset behavior, initial bottom-pinning, mobile-nav click detection, message-list width, reactions alignment, and voice-recording attachment layout, but they do not remove or rename a documented public API beyond the separately trackeduseChannelListContext()signature cleanup. - type-safety and stale-prop cleanup in tests (
277bc417): investigated; this commit removes stale props from test fixtures and tightens mock typing, but it does not change the current public runtime API beyond what was already documented in earlier migration buckets. - link-type attachment preview icon swap (
241209e8): investigated; current summarized-preview and latest-message preview UIs now use the shared link icon for link attachments, but this is a visual/current-behavior adjustment rather than a removed or renamed public API. - avatar overflow/internalization follow-up (
49d576e4): investigated;overflowCountwas introduced during the v14 redesign cycle and was not part of the v13 public surface, so it should not appear in v13-to-v14 migration guidance. Keep it as current-v14 docs maintenance only. - icon catalog, RTL, dark-mode, and thread-voice-recording follow-up (
a4b1c2662): investigated; current icon renames such asIconCrossSmall -> IconXmarkSmall,IconExclamationTriangle -> IconExclamationTriangleFill, andIconEyeOpen -> IconEyeFillare not part of the v13 public surface, and the RTL/dark-mode/thread voice-recording changes are current-behavior polish rather than a new migration bucket. - styling cleanup (
3bbf121ff): investigated; broad CSS cleanup and internal selector polish, but no new removed or renamed public API beyond the avatar/channel-list/theming buckets already tracked. - example-only follow-ups (
623989574,2f060ae89,6c7cd42af): investigated; these only update examples and docs scaffolding and do not add a new v13-to-v14 migration item. - assorted UI/UX fixes (
6c06e043,a47981ff,3f093622): investigated; Giphy editability, dialog layering, composer state restoration, centered headers, message-list width, and channel-list dialog-portal cleanup changed runtime behavior, but they did not introduce new removed exports or renamed public override surfaces beyond the separately tracked reactions and icon buckets. - example-app refreshes (
86ada37e,887a326a): investigated; these only update example apps and do not change the public SDK surface.
- Keep the guide grouped by user task:
- imports to rename
- override keys to rename
- entrypoints to stop using
- HOCs to replace with hooks
- Prefer small before/after snippets over long prose.