Skip to content

Releases: GetStream/stream-chat-react

v14.0.1

17 Apr 14:58

Choose a tag to compare

14.0.1 (2026-04-17)

Bug Fixes

  • allow flipping message actions context menu (#3130) (f8c9600)
  • drop unused/outdated CSS variables (#3128) (1a2a61f)
  • recognize async moderated shadow blocked messages as blocked (#3131) (eac76dc)

v13.14.4

17 Apr 14:54

Choose a tag to compare

13.14.4 (2026-04-17)

Bug Fixes

  • recognize async moderated shadow blocked messages as blocked (#3132) (096de30)

v14.0.0

16 Apr 15:17

Choose a tag to compare

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:

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

  • Channel no longer accepts component override props. Move all overrides to <WithComponents overrides={{...}}>.
  • ChannelList direct override props removed: List, Preview, Avatar, LoadingIndicator, LoadingErrorIndicator. Use WithComponents for all of these.
  • The with*Context HOC wrappers have been removed: withChannelActionContext, withChannelStateContext, withChatContext, withComponentContext, withMessageContext, withTranslationContext, withTypingContext. Use use*Context hooks inside function components instead.
  • Channel now renders EmptyStateIndicator by default when no channel is active. Pass EmptyPlaceholder={null} to restore the old blank behavior.
  • ChannelList.additionalChannelSearchProps and the ChannelList.ChannelSearch override prop were removed. Customize search via WithComponents with Search, SearchBar, or SearchResults.

Message, Actions & Notifications

  • handleDelete signature changed from (event, options?) to (options?). It now rethrows server-side failures β€” wrap in try/catch in custom delete buttons.
  • onlySenderCanEdit removed from MessageProps. Editability follows channel capabilities; filter edit out of your messageActionSet for custom restrictions.
  • Notification callback props removed from Message: getDeleteMessageErrorNotification, getFetchReactionsErrorNotification, getFlagMessageErrorNotification, getMuteUserSuccessNotification, and others. Use notification translators in Streami18n or useNotificationApi().
  • customMessageActions removed from MessageContext, Message, MessageList, and VirtualizedMessageList. Use messageActionSet and MessageActions.
  • Own messages can no longer be marked unread, even when the channel has the read-events capability.
  • MessageEditedTimestamp removed. Use MessageEditedIndicator, or render your own Timestamp against message.message_text_updated_at.
  • MessageTimestamp now defaults to time-only formatting (HH:mm). Override via Streami18n or provide a custom MessageTimestamp for the old calendar-style output.
  • Edit-message flow no longer uses EditMessageForm / EditMessageModal. Start editing with messageComposer.initState({ composition: message }), cancel with messageComposer.clear().
  • MessageProps no longer injects endOfGroup, firstOfGroup, or groupedByUser as props. Read them from useMessageContext() inside your custom component.
  • The order of actions in MessageActions has changed. Define your own messageActionSet explicitly if your UX depends on a stable action order.

Message Composer (formerly MessageInput)

  • additionalMessageInputProps β†’ additionalMessageComposerProps
  • handleSubmit now accepts only an optional event. The customMessageData and SendMessageOptions arguments were removed. Use composer middleware or messageComposer.customDataManager instead.
  • The default textarea now grows up to 10 rows (was 1). Pass maxRows={1} to restore single-line behavior.
  • QuotedMessagePreviewHeader removed. Customize the full quoted preview through QuotedMessagePreview or QuotedMessagePreviewUI.
  • Voice recordings moved out of AttachmentPreviewList into a dedicated VoiceRecordingPreviewSlot.
  • The EmojiPicker plugin now requires a separate stylesheet import:
    import 'stream-chat-react/dist/css/emoji-picker.css';
  • str-chat__message-composer-container now wraps the full message composer area.

Avatar, Gallery & Attachments

  • Avatar props renamed: image β†’ imageUrl, name β†’ userName. The user prop was removed. size now accepts arbitrary strings.
  • ChannelAvatar / GroupAvatar: use displayMembers instead of groupChannelDisplayInfo. GroupAvatar now auto-caps displayed members at 4 (or 2 with an overflow badge) β€” callers no longer control slicing.
  • AvatarStack: new capLimit prop (default 3) controls overflow. Previously callers managed slicing manually.
  • AttachmentProps.Gallery β†’ AttachmentProps.ModalGallery. The old Gallery component is now a carousel provider; use ModalGallery for the thumbnail-grid-plus-viewer behavior.
  • ModalGallery: migrate from the images / index API to the items-based API. Gallery payloads changed from images to items of type GalleryItem.
  • FileIcon: filename β†’ fileName; big, size, sizeSmall, type removed; mimeTypeToIcon(type, mimeType) β†’ mimeTypeToIcon(mimeType?).
  • ReactionSelector: props Avatar, detailedView, latest_reactions, reaction_counts, reaction_groups, reactionOptions, and reverse removed.
  • BaseImage now uses the ImageFallback component (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 initialNavOpen prop and navOpen / openMobileNav / closeMobileNav from useChatContext() have been removed. Manage sidebar state in your own app and inject toggle UI via `HeaderS...
Read more

v14.0.0-beta.8

16 Apr 09:13

Choose a tag to compare

v14.0.0-beta.8 Pre-release
Pre-release

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 Apr 09:14

Choose a tag to compare

v14.0.0-beta.7 Pre-release
Pre-release

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.
    • Message action handlers no longer publish notifications internally.
      Errors now propagate to call sites, which are responsible for
      success/error notifications.
    • Removed ConnectionStatus component. Connection notification UI is app
      responsibility now.
  • 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

03 Apr 12:53

Choose a tag to compare

v14.0.0-beta.6 Pre-release
Pre-release

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):

  • capLimit or fewer items: all are rendered, no badge.
  • More than capLimit items: only the first capLimit are
    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

  • adjustmens to Avatar, GroupAvatar and ChannelAvatar (#3087) (49d576e)

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

31 Mar 15:29

Choose a tag to compare

v14.0.0-beta.5 Pre-release
Pre-release

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 MessageReactionsDetail adjustments (#3082) (a82bdcb)
  • use link icon for link-type attachments (#3083) (241209e)

Features

  • examples: add RTL direction toggle to vite example app (#3084) (887a326)
  • examples: refresh react tutorial app for v14 (#3078) (86ada37)

v14.0.0-beta.4

30 Mar 11:26

Choose a tag to compare

v14.0.0-beta.4 Pre-release
Pre-release

14.0.0-beta.4 (2026-03-30)

⚠ BREAKING CHANGES

  • Importing styles from stream-chat-react/dist/css/v2/*
    would no longer work, import from stream-chat-react/dist/css/*
    instead.

Bug Fixes

Features

  • Icons: migrate SDK icons to Phosphor icon set (#3075) (30c1bee)

v14.0.0-beta.3

27 Mar 12:09

Choose a tag to compare

v14.0.0-beta.3 Pre-release
Pre-release

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

  • add ContextMenu animations API and global close-on-click-outside configuration mechanism (#3067) (630e5c7)
  • quick dropdown toggle and cleanup (#3054) (30ddab0)
  • reset audio player progress when the track is fully played (#3066) (7914e51)

v14.0.0-beta.2

25 Mar 10:34

Choose a tag to compare

v14.0.0-beta.2 Pre-release
Pre-release

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

  • handleDelete in MessageContext now 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 useNotificationTarget to return undefined (#3046) (38b278e)