Releases: GetStream/stream-chat-react
v14.0.1
v13.14.4
v14.0.0
Released: 2026-04-16 Β· Full diff Β· Migration guide
A full visual and architectural refresh of the SDK. This release brings a redesigned component system, new message composer, overhauled theming, and a cleaner customization model β alongside significant breaking changes to component APIs, CSS class names, and context wrappers.
β οΈ Breaking Changes
Resources for migrating:
- π Human-readable migration guide β step-by-step with code examples
- π€
ai-docs/breaking-changes.mdβ machine-readable summary of all breaking changes, intended for use with AI coding assistants (Copilot, Cursor, Claude, etc.)
π€ai-docs/ai-migration.md- Coding Agents-optimized migration plan.
Component & Import Renames
| v13 | v14 |
|---|---|
MessageInput |
MessageComposer |
MessageInputFlat |
MessageComposerUI |
MessageInputContext |
MessageComposerContext |
useMessageInputContext |
useMessageComposerContext |
MessageOptions |
MessageActions |
MessageDeleted |
MessageDeletedBubble |
MessageNotification |
NewMessageNotification |
ScrollToBottomButton |
ScrollToLatestMessageButton |
ReactionsListModal |
MessageReactionsDetail |
ChannelListMessenger |
ChannelListUI |
ChannelPreview |
ChannelListItem |
ChannelPreviewMessenger |
ChannelListItemUI |
ChannelSearch |
Search (now stable, main entrypoint) |
Modal |
GlobalModal |
UploadButton |
FileInput |
MessageIsThreadReplyInChannelButtonIndicator |
MessageAlsoSentInChannelIndicator |
MessageListNotifications |
NotificationList |
isOnlyEmojis |
messageTextHasEmojisOnly |
useAudioController |
useAudioPlayer |
Removed entirely (no replacement via rename): FixedHeightMessage, EditMessageForm, EditMessageModal, MessageActionsBox, MessageActionsWrapper, CustomMessageActionsList, QuotedPoll, ButtonWithSubmenu, ConnectionStatus, MessageErrorText, RemindMeActionButton. See the migration guide for recommended alternatives.
Removed icon exports: ActionsIcon, ReactionIcon, ThreadIcon, MessageErrorIcon, PauseIcon, PlayTriangleIcon, GeolocationIcon, CloseIcon, SendIcon, MicIcon. Migrate to the public Icons set or higher-level components such as MessageActions, SendButton, and MessageStatus.
MessageActions and Search are no longer exported from stream-chat-react/experimental. Import from the main package:
import { MessageActions, Search } from 'stream-chat-react';UI Overrides: Channel β WithComponents
Channelno longer accepts component override props. Move all overrides to<WithComponents overrides={{...}}>.ChannelListdirect override props removed:List,Preview,Avatar,LoadingIndicator,LoadingErrorIndicator. UseWithComponentsfor all of these.- The
with*ContextHOC wrappers have been removed:withChannelActionContext,withChannelStateContext,withChatContext,withComponentContext,withMessageContext,withTranslationContext,withTypingContext. Useuse*Contexthooks inside function components instead. Channelnow rendersEmptyStateIndicatorby default when no channel is active. PassEmptyPlaceholder={null}to restore the old blank behavior.ChannelList.additionalChannelSearchPropsand theChannelList.ChannelSearchoverride prop were removed. Customize search viaWithComponentswithSearch,SearchBar, orSearchResults.
Message, Actions & Notifications
handleDeletesignature changed from(event, options?)to(options?). It now rethrows server-side failures β wrap intry/catchin custom delete buttons.onlySenderCanEditremoved fromMessageProps. Editability follows channel capabilities; filtereditout of yourmessageActionSetfor custom restrictions.- Notification callback props removed from
Message:getDeleteMessageErrorNotification,getFetchReactionsErrorNotification,getFlagMessageErrorNotification,getMuteUserSuccessNotification, and others. Use notification translators inStreami18noruseNotificationApi(). customMessageActionsremoved fromMessageContext,Message,MessageList, andVirtualizedMessageList. UsemessageActionSetandMessageActions.- Own messages can no longer be marked unread, even when the channel has the
read-eventscapability. MessageEditedTimestampremoved. UseMessageEditedIndicator, or render your ownTimestampagainstmessage.message_text_updated_at.MessageTimestampnow defaults to time-only formatting (HH:mm). Override viaStreami18nor provide a customMessageTimestampfor the old calendar-style output.- Edit-message flow no longer uses
EditMessageForm/EditMessageModal. Start editing withmessageComposer.initState({ composition: message }), cancel withmessageComposer.clear(). MessagePropsno longer injectsendOfGroup,firstOfGroup, orgroupedByUseras props. Read them fromuseMessageContext()inside your custom component.- The order of actions in
MessageActionshas changed. Define your ownmessageActionSetexplicitly if your UX depends on a stable action order.
Message Composer (formerly MessageInput)
additionalMessageInputPropsβadditionalMessageComposerPropshandleSubmitnow accepts only an optional event. ThecustomMessageDataandSendMessageOptionsarguments were removed. Use composer middleware ormessageComposer.customDataManagerinstead.- The default textarea now grows up to 10 rows (was 1). Pass
maxRows={1}to restore single-line behavior. QuotedMessagePreviewHeaderremoved. Customize the full quoted preview throughQuotedMessagePrevieworQuotedMessagePreviewUI.- Voice recordings moved out of
AttachmentPreviewListinto a dedicatedVoiceRecordingPreviewSlot. - The
EmojiPickerplugin now requires a separate stylesheet import:import 'stream-chat-react/dist/css/emoji-picker.css';
str-chat__message-composer-containernow wraps the full message composer area.
Avatar, Gallery & Attachments
Avatarprops renamed:imageβimageUrl,nameβuserName. Theuserprop was removed.sizenow accepts arbitrary strings.ChannelAvatar/GroupAvatar: usedisplayMembersinstead ofgroupChannelDisplayInfo.GroupAvatarnow auto-caps displayed members at 4 (or 2 with an overflow badge) β callers no longer control slicing.AvatarStack: newcapLimitprop (default3) controls overflow. Previously callers managed slicing manually.AttachmentProps.GalleryβAttachmentProps.ModalGallery. The oldGallerycomponent is now a carousel provider; useModalGalleryfor the thumbnail-grid-plus-viewer behavior.ModalGallery: migrate from theimages/indexAPI to theitems-based API. Gallery payloads changed fromimagestoitemsof typeGalleryItem.FileIcon:filenameβfileName;big,size,sizeSmall,typeremoved;mimeTypeToIcon(type, mimeType)βmimeTypeToIcon(mimeType?).ReactionSelector: propsAvatar,detailedView,latest_reactions,reaction_counts,reaction_groups,reactionOptions, andreverseremoved.BaseImagenow uses theImageFallbackcomponent (instead of a CSS mask) to display fallbacks on error.
CSS Classes & Stylesheet
CSS import path: stream-chat-react/dist/css/v2/* is no longer valid. Use stream-chat-react/dist/css/* instead.
Removed CSS variables: --str-chat__message-bounce-*, --str-chat__jump-to-latest-message-*
| Old class | New class |
|---|---|
str-chat__channel-preview* |
str-chat__channel-list-item* |
str-chat__channel-preview-container |
str-chat__channel-list-item-container |
str-chat__message-input-cooldown |
str-chat__message-composer-cooldown |
str-chat__message-simple-name |
str-chat__message-metadata__name |
str-chat__simple-message--error-failed |
str-chat__message-inner--error |
str-chat__message-simple-timestamp |
str-chat__message-metadata__timestamp |
str-chat__message-error-icon |
str-chat__message-error-indicator |
str-chat__reaction-list |
str-chat__message-reactions |
str-chat__message-reactions |
str-chat__message-reactions__list |
str-chat__message-reaction |
str-chat__message-reactions__list-item |
str-chat__message-reaction-emoji |
str-chat__message-reactions__item-icon |
str-chat__message-reaction-count |
str-chat__message-reactions__item-count |
str-chat__reaction-list--counter |
str-chat__message-reactions__total-count |
str-chat__channel-list-messenger |
str-chat__channel-list-inner |
str-chat__channel-header-end |
str-chat__channel-header__data |
str-chat__message-reactions-container |
(removed) |
str-chat__reaction-list--reverse |
(removed) |
str-chat__message-reaction-own |
(removed) |
str-chat__message-simple (root) |
(removed from MessageUI) |
str-chat__avatar--single |
(removed) |
str-chat__avatar-group--three-part |
(removed) |
Sidebar, Polls, Dialogs & Misc
- Sidebar state is now app-owned. The
initialNavOpenprop andnavOpen/openMobileNav/closeMobileNavfromuseChatContext()have been removed. Manage sidebar state in your own app and inject toggle UI via `HeaderS...
v14.0.0-beta.8
14.0.0-beta.8 (2026-04-16)
Bug Fixes
- dialog: prevent outside-click from other dialog managers closing active dialogs (#3112) (233ec89)
- MessageUI: use isDeleted as a flag to determine message deletion (#3113) (f95f287)
- prevent hiding floating date separator in message lists (#3119) (397fadd)
- remove UI issues in poll related components (#3118) (d7870bb)
- unify what is considered a deleted message across the components (#3117) (20b4022)
Features
v14.0.0-beta.7
14.0.0-beta.7 (2026-04-14)
β BREAKING CHANGES
- remove onlySenderCanEdit from MessageProps
-
- Removed legacy notification text callback props from Message props:
getDeleteMessageErrorNotification,
getFetchReactionsErrorNotification,
getFlagMessageErrorNotification,
getFlagMessageSuccessNotification,
getMarkMessageUnreadErrorNotification,
getMarkMessageUnreadSuccessNotification,
getMuteUserErrorNotification,
getMuteUserSuccessNotification,
getPinMessageErrorNotification.
Notification customization must now be done through notification
translators
(Streami18n translationBuilder topic: "notification") and/or custom
MessageActions.
- Removed legacy notification text callback props from Message props:
-
- Message action handlers no longer publish notifications internally.
Errors now propagate to call sites, which are responsible for
success/error notifications.
- Message action handlers no longer publish notifications internally.
-
- Removed ConnectionStatus component. Connection notification UI is app
responsibility now.
- Removed ConnectionStatus component. Connection notification UI is app
- externalize sidebar toggle and remove navOpen state from the SDK (#3088)
- remove deprecated APIs ahead of v14 stable (#3086)
Bug Fixes
- adjust padding for messages containing only padding (#3102) (443b9a8)
- AudioPlayback: improve wave progress bar smoothness and sizing (#3094) (982cf2a)
- correct various UI glitches (#3110) (6605f63)
- Giphy: use fixed height for giphy preview to prevent layout shifts (#3095) (30e45fa)
- MessageList: prevent jump-to-message snap-back from bottom autoscroll (#3109) (be8ed26)
Features
- add EmojiPicker plugin stylesheet (#3108) (b4ed464)
- add MediaBadge (#3103) (e15caa4)
- add new styles for unsupported attachments (preview, message, channel preview) (#3107) (19a0add)
- add notification API wrapper (#3096) (2060768)
- externalize sidebar toggle and remove navOpen state from the SDK (#3088) (dc16bb5)
- introduce extended reaction list to a reactions detail component (#3100) (b284802)
- redesign UnsupportedAttachment (#3099) (9156f6f)
- remove onlySenderCanEdit prop from MessageProps (#3098) (759cadf)
- track upload progress in attachment preview components (#3060) (8b13863)
Refactors
v14.0.0-beta.6
14.0.0-beta.6 (2026-04-03)
β BREAKING CHANGES
- for existing code but changes the accepted values.
getGroupChannelDisplayInfo return value changed
The utility function getGroupChannelDisplayInfo (from
src/components/ChannelListItem/utils.tsx) no longer returns
overflowCount in its result object.
AvatarProps.size type widened to accept arbitrary strings
The size prop on AvatarProps changed from the union '2xl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs' | null to '2xl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs' | (string & {}) | null. This allows passing custom size strings
while preserving autocomplete for the known values.
GroupAvatarProps.size type widened to accept arbitrary strings
The size prop on GroupAvatarProps changed from '2xl' | 'xl' | 'lg' | null to '2xl' | 'xl' | 'lg' | (string & {}) | null. This allows
passing custom size strings while preserving autocomplete for the known
values.
New capLimit prop on AvatarStack
A new optional capLimit prop (type number, default 3) controls the
maximum number of avatars rendered before overflow. When displayInfo
has more entries than capLimit, only the first capLimit items are
shown and a "+N" badge displays the remainder.
GroupAvatarMember type gains optional id field
The GroupAvatarMember type now includes an optional id?: string
field. When present, it is used as the React key for rendered avatars
instead of the fallback ${userName}-${imageUrl}-${index} pattern.
Behavioral Changes
ChannelAvatar always renders via GroupAvatar internally
Previously, ChannelAvatar conditionally chose between <Avatar> (for
0β1 members) and <GroupAvatar> (for 2+ members). It now always
delegates to <GroupAvatar>, which itself renders a single <Avatar>
when fewer than 2 members are present. The visual output is unchanged,
but the component tree structure differs.
GroupAvatar auto-caps displayed members at 4 (or 2 with overflow)
Previously, callers controlled how many members to display and the
overflow count. Now GroupAvatar internally slices displayMembers:
- 4 or fewer members: all are rendered, no badge.
- More than 4 members: only the first 2 are rendered, with a "+N"
badge showing the count of remaining members.
AvatarStack auto-caps displayed items (default: 3, configurable
via capLimit)
Previously, callers controlled how many items to display and the
overflow count. Now AvatarStack internally slices displayInfo based
on the capLimit prop (default 3):
capLimitor fewer items: all are rendered, no badge.- More than
capLimititems: only the firstcapLimitare
rendered, with a "+N" badge showing the count of remaining items.
TypingIndicator no longer manually slices typing users
The TypingIndicator component previously sliced the list of typing
users to a maximum of 3 before passing to AvatarStack. It now passes
all typing users, relying on AvatarStack's internal capping (also at
3). The net visual result is unchanged.
chore
Bug Fixes
- examples: clean up tutorial examples for v14 (#3089) (6239895)
- examples: enable async voice recording preview in thread composer (#3092) (6c7cd42)
- examples: fix resize handle alignment and thread border gap in RTL (#3091) (2f060ae)
- Icons, RTL: update icon catalog, RTL layout fixes, dark mode & thread voice recording (#3090) (a4b1c26), closes #3080
v14.0.0-beta.5
14.0.0-beta.5 (2026-03-31)
Bug Fixes
- assorted UI/UX fixes (Giphy, polls, dialogs, composer, headers) (#3081) (6c06e04)
- close CSS gaps, fix ChannelList dialog portal, and clean up icons (#3079) (a47981f)
- Icons: sync icon catalog with refreshed Line SVGs (#3080) (9472f7b)
- MessageList: set width on message list scroll container (#3077) (3f09362)
- post-review
MessageReactionsDetailadjustments (#3082) (a82bdcb) - use link icon for link-type attachments (#3083) (241209e)
Features
v14.0.0-beta.4
14.0.0-beta.4 (2026-03-30)
β BREAKING CHANGES
- Importing styles from
stream-chat-react/dist/css/v2/*
would no longer work, import fromstream-chat-react/dist/css/*
instead.
Bug Fixes
Features
v14.0.0-beta.3
Released: 2026-03-27
Diff: v14.0.0-beta.2...v14.0.0-beta.3
Full breaking changes reference: breaking-changes.md
Bug Fixes
- align message reactions vertically to the center of the message list (#3064) (55dd2e8)
- increase message list width (f81cae4)
- increase message list width (#3062) (fdf0e15)
- keep MessageList scrolled to the bottom (#3068) (91eba1b)
- reliably detect whether the click originated inside before closing mobile nav (#3061) (8d25ead)
- remove bottom padding from poll option with votes in poll results (#3059) (a55774d)
Features
v14.0.0-beta.2
Released: 2026-03-25
Diff: v14.0.0-beta.1...v14.0.0-beta.2
Full breaking changes reference: breaking-changes.md
β Breaking Changes
Removed Components
ActionsIcon,ReactionIcon,ThreadIcon,MessageErrorIconβ removed (#3050) (f4caa0e)MessageErrorTextβ removed (#3042) (e0207cd)
CSS Class Renames
| Old | New |
|---|---|
str-chat__message-error-icon |
str-chat__message-error-indicator |
Behavioral Changes
handleDeleteinMessageContextnow re-throws errors instead of swallowing them. (#3042) (e0207cd)- Users can no longer mark their own messages as unread. (#3043) (fe05b62)
β¨ Features
- Redesigned message actions icons and message error badge (#3050) (f4caa0e)
- Shared gallery preview in
AttachmentPreviewList(#3044) (f05f47d) - "Voice message deleted" notification (#3045) (9982c45)
- Prevent marking own messages as unread (#3043) (fe05b62)
π Bug Fixes
- Adjust message UI for network error when sending a message (#3042) (e0207cd)
- Calculate message read status for the first message in a channel (ported from v13) (#3056) (b7c33c8)
- Clear message composer on unmount (#3053) (f2a79ab)
- Prevent empty message composer textarea from growing (#3051) (880d12d)
- Align textarea placeholder and text with surroundings (#3052) (da293f0)
- Keep command menu distance constant from the invoking button (#3049) (960c1f9)
- Prevent poll options layout shifting upon voting (#3048) (cdaf480)
- Allow
useNotificationTargetto return undefined (#3046) (38b278e)