PackageTrack
Sign in Get early access

stream_chat_flutter

Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.

10.3.0 40K downloads/mo #1609 most downloaded on pub.dev GetStream/stream-chat-flutter

What this package is like to depend on

Last release 9 days ago

14 Aug 2026

Ships fairly regularly

a new release about every 3 weeks

Most releases are documented

notes for 152 of 188 stable releases

1 version withdrawn

withdrawn after publishing

6 years old

264 releases · first in 2020

25 releases in the last 12 months

see the full history below

Release timeline

264 releases · Feb 2020 to Aug 2026
2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 264
  1. 10.3.0 14 Aug 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v10.2.0...v10.3.0

    Open source →
    Release notes

    ⚠️ Changed

    • StreamMediaGallery no longer applies its own outer padding or strips the ambient MediaQuery padding; pass padding to inset the grid.
    • StreamMessageListView.config is now nullable; reading it off an instance yields StreamMessageListViewConfiguration? rather than a default instance.
    • StreamMediaGalleryPreview chrome now follows the app style — floating over full-bleed media, or docked with the media inset between the bars.
    • Thread views now show the scroll-to-bottom button, following showScrollToBottom from the effective StreamMessageListViewConfiguration; set it to false to hide it.

    ✅ Added

    • Added resolveSurfaceStyle to StreamMessageComposer, StreamChannelHeader, StreamChannelListHeader, and StreamThreadHeader, reporting the surface style each renders with so a page can lay its scaffold slot out to match.
    • Added StreamChannelPage — a ready-to-use channel page wiring up StreamChannelHeader, StreamMessageListView, and StreamMessageComposer with floating or docked layout.
    • Added StreamThreadPage — the thread equivalent, plus an onBackPressed that replaces the header back button's default pop.
    • Added onBackPressed to StreamChannelHeader and StreamThreadHeader, replacing the default back button's pop without rebuilding leading. Ignored when leading is supplied.
    • Added MessageComposerProps.surfaceStyle, selecting whether StreamMessageComposer renders floating or regular. Falls back to StreamMessageComposerThemeData.surfaceStyle, then the ambient StreamSurfaceStyle.
    • Added StreamMessageComposerTheme and StreamMessageComposerThemeData — a component theme for the composer, also available globally as StreamChatThemeData.messageComposerTheme.
    • Added StreamMessageListView.config — an explicit StreamMessageListViewConfiguration per widget, falling back to StreamChatConfigurationData.messageListViewConfiguration.
    • Added StreamChatConfigurationData.messageListViewConfiguration — an app-wide StreamMessageListViewConfiguration default, passed via StreamChat.configData.
    • Added floating support to StreamChannelHeader, StreamChannelListHeader, and StreamThreadHeader — each resolves the surface style from its per-header theme and republishes it to every slot, including the new StreamBackButton.isFloating.
    • Added StreamMessageListViewConfiguration.autoScrollPolicy to control whether and how StreamMessageListView scrolls to the newest message when a new message arrives. Use StreamAutoScrollPolicy.disabled to fully control scrolling yourself.
    • Added onReactionSelected to StreamMessageReactionPicker, a context-aware callback that provides the BuildContext for navigation.
    • Added an errorSubtitle to StreamScrollViewErrorWidget, which now falls back to the design's generic error copy (title, description, and a "Try Again" retry label) when values aren't provided.
    • Added a size (StreamLoadingSpinnerSize) parameter to StreamScrollViewLoadingWidget.
    • Added onReactionTap to StreamMessageItem and StreamMessageListView, reporting the tapped message's BuildContext and a ReactionTapDetails with the tapped message and reaction (the reaction is null for a clustered or overflow chip that maps to no single reaction).
    • Exported StreamEphemeralMessage, the row StreamMessageListView builds for ephemeral messages, matching its already-exported StreamSystemMessage and StreamModeratedMessage siblings.
    • Added an unreadIndicator parameter to StreamBackButton that overlays a widget (typically a StreamUnreadIndicator) on the button's top-end corner. Pass StreamUnreadIndicator(excludeCid: cid) to show the total unread count of other channels, or StreamUnreadIndicator.channels(cid: cid) for a single channel's count.

    ⚠️ Deprecated

    • Deprecated StreamMessageReactionPicker.onReactionPicked in favor of onReactionSelected.
    • Deprecated onReactionsTap (and the OnReactionsTap typedef) on StreamMessageItem and StreamMessageListView in favor of onReactionTap.
    • Deprecated height/width of StreamScrollViewLoadingWidget in favor of size.
    • Deprecated StreamBackButton.showUnreadCount and StreamBackButton.channelId in favor of unreadIndicator.

    🐞 Fixed

    • Fixed a failed send surfacing as an unhandled async error when StreamMessageComposer has no onError; it is now reported through FlutterError.reportError.
    • Fixed the default StreamChannel loading and error states not being themed or localized; StreamChat now installs themed, connection-aware defaults, overridable per StreamChannel or via DefaultStreamChannelBuilders.
    • Fixed the default list/scroll-view error states (channel, message, member, user, thread, poll-vote, reaction, search, and photo) showing raw or fixed errors; they are now connection-aware (no internet / slow connection), falling back to each view's specific error text.
    • Fixed StreamTypingIndicator briefly showing typing users from a different context (main channel vs. thread) on its first frame.
    • Fixed the attachment picker throwing a Tooltip assertion error when a custom TabbedAttachmentPickerOption is added without a title; the tooltip is now only shown when a title is provided.
    • Fixed the "Message deleted" bubble overflowing its maximum width when the localized label is long; the label now wraps instead.
    • Fixed the thread scroll-to-bottom button keying off the parent channel's up-to-date state instead of the thread's own scroll position, so it no longer appears while already at the newest reply.
    • Fixed the StreamBackButton unread badge including the currently open channel in its total count.
    • Fixed the thread-replies footer under a message in the channel being hardcoded English and reading "1 replies" for a single reply; it now uses threadReplyCountText, which is localized and correctly singularized.
    • Fixed a channel-list row briefly previewing another channel's last message after the list reorders. The preserved last-known message is now dropped when a row is rebound to a different channel, instead of being used as a fallback while the new channel is still loading.
    • Fixed the channel list still showing a timestamp next to "No messages yet" after a channel is truncated. ChannelLastMessageDate now reads the date off the message the preview actually shows instead of Channel.lastMessageAt, which cannot be cleared once a truncation removes every message.
    • Fixed StreamMessageListView jumping several screens when selecting text in a message on desktop or web. The ScrollablePositionedList viewports now account for their anchor in getOffsetToReveal, so implicit reveals (Scrollable.ensureVisible, RenderObject.showOnScreen) no longer overshoot. #2862
    • Fixed modal dialogs (message actions, delete/flag confirmation) rendering over a white scrim in light theme; they now use the design system's scrim token.
    • Fixed the message metadata in the long-press actions modal keeping its muted in-list colors against the dark scrim. The previewed message now renders its annotations ("Saved for later", "Pinned by", "Replied to a thread" + "View", "Reminder set"), username, sending status and read receipts, timestamp, "Edited" label, and thread-reply count in white. Added StreamSendingIndicator.color to override the indicator's icon color.

    🔄 Changed

    • Improved message text selection experience on desktop and web.
    Open source →
  2. 10.2.0 22 Jul 2026
    Release notes

    What's Changed

    • chore(deps): bump actions/checkout from 6 to 7 in the all-actions group by @dependabot[bot] in #2784
    • fix(ui): preserve last-message preview during channel-state reloads by @VelikovPetar in #2774
    • fix(core): Fix StreamChannelListController not handling notificaton.channel_deleted event by @VelikovPetar in #2791
    • perf(persistence): add indexes to speed up offline channel-list reads by @VelikovPetar in #2795
    • fix(core): Fix backwards pagination not working if channel was never opened by @VelikovPetar in #2789
    • feat(ui, localization): comprehensive a11y pass across composer by @xsahil03x in #2796
    • docs(repo): add STYLE_GUIDE.md and TESTING.md adapted from Flutter's guides by @xsahil03x in #2793
    • feat(llc): Sanitize X-Stream-Client to prevent customers overriding internal values by @VelikovPetar in #2790
    • chore(persistence): Remove unused DAO methods by @VelikovPetar in #2754
    • ci(repo): add least-privilege permissions to GitHub Actions workflows by @peter-matkovski in #2798
    • fix(ui): Fix shadowed messages not hidden in the channel list by @VelikovPetar in #2787
    • fix(persistence): treat thread reply pagination limit of 0 as unset by @VelikovPetar in #2803
    • fix(ui): skip markThreadRead for reply-less thread parents by @xsahil03x in #2807
    • fix(samples): cap firebase plugins below broken 16.4.2/5.2.5 releases by @VelikovPetar in #2813
    • fix(llc): normalize strings when comparing ComparableField by @xsahil03x in #2809
    • fix(llc): Don't upsert out-of-window messages on message.updated/message.deleted events by @VelikovPetar in #2794
    • fix(ui): Mark channel read immediately when the unread indicator is dismissed by @VelikovPetar in #2819
    • ci(repo): add e2e testing infrastructure (iOS + Android) by @testableapple in #2777
    • fix(llc): reduce default thread participant and member limits by @VelikovPetar in #2822
    • perf(llc, core): guard channel list event handlers against unnecessary re-sorts by @VelikovPetar in #2824
    • fix(ui): avoid spurious StreamTypingIndicator rebuilds on unchanged typing users by @VelikovPetar in #2826
    • fix(ui): replace get_thumbnail_video with the stream_thumbnail plugin by @xsahil03x in #2829
    • fix(ui): Removed mediakit dependency from sdk by @renefloor in #2828
    • chore(samples): Don't run firebase on linux by @renefloor in #2834
    • chore(repo): release v10.2.0 by @renefloor in #2835

    New Contributors

    Full Changelog: v10.1.0...v10.2.0

    Open source →
    Release notes

    ⚠️ Changed

    • Removed dependency on media_kit and media_kit_video. When running the VideoPlayer on Windows or Linux platforms, you need to add media_kit dependency to your pubspec.yaml file and create a custom StreamVideoPlayer implementation in the streamChatComponentBuilders. (#2828)

    ✅ Added

    • Added AccessibilityTranslations on Translations (accessed via context.translations.accessibility) — screen-reader labels, tooltips, hints, and live-region announcements. Includes formatDateTime, formatDuration, and formatRecentDateTime formatters.
    • Added AccessibleMessagePreviewFormatter — an optional interface extending MessagePreviewFormatter with formatMessageSemanticsLabel and formatDraftMessageSemanticsLabel. StreamMessagePreviewText, StreamDraftMessagePreviewText, and StreamSendingIndicator now emit natural-language screen-reader labels for the channel list.
    • Added optional semanticsLabel to StreamChannelAvatar. Group channels emit a default "Group" label; direct-message avatars stay silent.
    • Added optional semanticsLabel to StreamTimestamp. Defaults to a bucketed natural-language phrasing via AccessibilityTranslations.formatRecentDateTime.
    • Added a LastMessagePredicate typedef for the ChannelLastMessageText.lastMessagePredicate filter.
    • Added optional semanticsLabel to StreamUserAvatar, StreamUserAvatarGroup, and StreamUserAvatarStack.
    • Made StreamVideoPlayer overridable via the StreamComponentFactory (streamChatComponentBuilders(videoPlayer: ...)), with the previous implementation now available as DefaultStreamVideoPlayer.

    🐞 Fixed

    • Fixed link preview enrichment failing for uppercase URL schemes (e.g. HTTPS://) by normalizing the scheme before enriching.
    • Fixed last-message preview flicker during channel-state reloads.
    • Fixed shadowed messages not hidden in channel list items.
    • Fixed StreamMessageListView firing markThreadRead on a reply-less parent, which produced a guaranteed 404 every time the thread view was opened before the first reply.
    • Fixed dismissing the StreamMessageListView unread indicator being ignored while a channel is receiving a rapid burst of messages.
    • Fixed StreamTypingIndicator rebuilding on every typing event by comparing the typing users by id, so it only rebuilds when the set of typing users changes.
    • Fixed StreamChannelListTile announcing avatar initials and unlabeled fragments — now merges into a single accessible row summary with labeled avatar, muted / pinned icons, and unread badge.
    • Fixed StreamThreadListTile announcing content as flat comma-separated fragments — now merges into a single accessible row summary and labels the unread badge with the localized "N unread messages" phrasing.
    • Renamed attachmentPickerTooltip to state-agnostic "Toggle attachment picker" so screen readers no longer announce "Open attachment picker" while the picker is already expanded.
    • Fixed voiceRecordingText casing to sentence case ("Voice recording").
    • Fixed formatRecentDateTime hardcoding 24-hour time — displayed and announced timestamps now follow the locale's convention (e.g. 24-hour in Germany, 12-hour in India).
    • Replaced the get_thumbnail_video dependency with Stream's own stream_thumbnail plugin, resolving the iOS duplicate-VideoThumbnailPlugin-symbol crash when an app also uses video_thumbnail/video_editor (#2360).
    Open source →
  3. 10.1.0 23 Jun 2026
    Release notes

    What's Changed

    • fix(ui): wire onUserAvatarTap on StreamMessageItem by @xsahil03x in #2743
    • chore(deps): bump the all-actions group across 1 directory with 3 updates by @dependabot[bot] in #2734
    • fix(ui): add copyWith to MessageComposerProps by @xsahil03x in #2744
    • feat(ui): integrate StreamSnackbar into composer hold-to-record by @xsahil03x in #2739
    • docs(repo): sync tutorial example with website tutorial by @xsahil03x in #2746
    • perf(persistence): Move thread messages pagination to SQL by @VelikovPetar in #2688
    • perf(persistence): Move pinned messages pagination to SQL by @VelikovPetar in #2689
    • feat(samples): migrate AppDelegate to use UISceneDelegate by @renefloor in #2745
    • feat(llc, ui, core, localization): gate slash commands by composer state with snackbar feedback by @xsahil03x in #2757
    • fix(llc, core): pause WebSocket reconnect while app is backgrounded by @xsahil03x in #2759
    • feat(llc, core, persistence, ui): Add support for enhanced mentions by @VelikovPetar in #2747
    • ci(repo): trigger conventional PR title check for v9 PRs by @xsahil03x in #2764
    • fix(ui): avoid redundant setState in StreamMessageContent width measurement by @xsahil03x in #2762
    • fix(core,ui): setting value after being disposed by @renefloor in #2766
    • refactor(ui): migrate to stream_core_flutter chat.dart barrel by @xsahil03x in #2765
    • feat(llc, core, persistence): Add support for PredefinedFilters on QueryChannels by @VelikovPetar in #2709
    • docs(ui): update migration with learnings by @renefloor in #2767
    • ci(repo): fail check_db_entities when schemaVersion isn't bumped by @xsahil03x in #2771
    • feat(persistence): Bump DB version by @VelikovPetar in #2770
    • fix(repo): update docs_screenshots channel-list stub for queryChannelsWithResult by @VelikovPetar in #2776
    • fix(llc, ui): thread cooldown by @renefloor in #2738
    • chore(samples): add message-list benchmark page by @xsahil03x in #2779
    • test(ui): Add enhanced mentions docs screenshots by @VelikovPetar in #2778
    • fix(llc): Fixed resetting channel unread count on message.read events delivered for threads by @VelikovPetar in #2780
    • chore(repo): release v10.1.0 by @xsahil03x in #2783

    Full Changelog: v10.0.1...v10.1.0

    Open source →
    Release notes

    🐛 Fixed

    • Fixed a use-after-dispose race condition in StreamAttachmentPickerController, StreamAudioRecorderController, and StreamAudioPlaylistController: async methods could write value after dispose(), causing a notifyListeners() assertion throw in debug mode. All three now use the DisposeAwareValueNotifier mixin from stream_chat_flutter_core.

    ✅ Added

    • Added support for @channel, @here, role, and user-group mentions — parsed on incoming messages, rendered as styled tappable spans in message text, and selectable from the composer's @ autocomplete.
    • Added a single mentionItemBuilder on StreamMessageComposer and StreamMentionAutocompleteOptions that receives StreamMentionItemProps and covers every mention kind. Customise globally via streamChatComponentBuilders(mentionItem: ...) or per-instance via the new constructor parameter. Defaults are rendered by DefaultStreamMentionItem. Also added onMention*Tap callbacks on StreamMentionAutocompleteOptions.
    • Added StreamMessageListView.onMentionTap and StreamMessageItem.onMentionTap — receives a typed StreamMention (StreamUserMention, StreamChannelMention, StreamHereMention, StreamRoleMention, or StreamGroupMention).
    • StreamMessageComposer now surfaces the hold-to-record hint through StreamSnackbar anchored above the composer, and StreamChat provides an app-wide StreamSnackbarScope fallback.
    • Added commandValidator prop on StreamCommandAutocompleteOptions and StreamCommandPicker for marking rows as unavailable; disabled rows remain tappable so the caller can surface feedback.
    • StreamMessageComposer now surfaces a StreamSnackbar when the user taps a disabled slash command in the picker or autocomplete, explaining why it's blocked.

    ⚠️ Deprecated

    • StreamAudioRecorderController.showInfo is now deprecated. Show your own snackbar via StreamSnackbarMessenger.of(context).show(StreamSnackbar(...)) instead.
    • RecordStateIdle.message is now deprecated; the composer no longer reads it.
    • Deprecated userMentionsTileBuilder on StreamMessageComposer and mentionsTileBuilder on StreamMentionAutocompleteOptions in favor of mentionItemBuilder.
    • Deprecated StreamMessageListView.onUserMentionTap and StreamMessageItem.onUserMentionTap in favor of onMentionTap.
    • Deprecated UserListX.search.

    🔄 Changed

    • Improved the local filtering/sorting logic for the mention suggestions autocomplete.

    🐞 Fixed

    • StreamMessageItem.onUserAvatarTap now fires when the author avatar is tapped. (#2741)
    • Added MessageComposerProps.copyWith so factory overrides can tweak individual props (e.g. useSystemAttachmentPicker) without re-specifying every field. (#2742)
    • StreamMessageContent no longer re-runs setState on every inherited-widget change when the measured attachment width has not changed. (#2761)
    Open source →
  4. 10.0.1 09 Jun 2026
    Release notes

    What's Changed

    Full Changelog: v9.25.0...v10.0.1

    Open source →
    Release notes

    🐞 Fixed

    • Fixed the "Also send in Channel" checkbox not being disabled during slow mode. The checkbox and its label now render with disabled colors (colorScheme.textDisabled) when a cooldown is active, matching the rest of the composer.
    • StreamUserAvatar with StreamAvatarSize.xxl now uses StreamOnlineIndicatorSize.xxl (20px) instead of xl (16px), matching the Chat SDK design system spec.
    • Fixed the thread page flashing through a large scroll-up animation when opened from an in-channel reply with cached thread replies.
    • Fixed the thread page throwing Bad state: No element on every channel state update when the parent message wasn't in the channel's loaded window.
    • Fixed opening a thread page or long-press message-actions modal overwriting the channel's loaded window — most visibly, jumping back to latest when the user had navigated to an older message via a quoted reply.
    • StreamMessageComposer no longer clobbers pre-populated composer state (text, quoted message, attachments) when the channel's draft stream emits its initial null (no draft on server). The reset now fires only on an actual non-null → null transition, distinguishing "no draft yet" from "draft was removed".

    ✅ Added

    • StreamMessageComposer now validates attachments against the app's AppSettings (configured in the Stream Dashboard) — enforcing size, extension/MIME, and count rules. Pass onError to handle the typed AttachmentLimitReachedError, AttachmentTooLargeError, or AttachmentBlockedError instead of the default error sheet.
    • Added Translations.fileTypeNotSupportedError(String? extension) — surfaced by the composer when an attachment's extension or MIME type is rejected.
    • Added BlockUser / UnblockUser default message actions, dispatching to StreamChatClient.blockUser / unblockUser.

    🔄 Internal / Non-breaking

    • Reordered the default message actions to match the design system.

    • Renamed default English threadReplyLabel ('Thread''Thread Reply') and markAsUnreadLabel ('Mark as Unread''Mark Unread').

    • StreamThreadHeader default title now sources from the new threadLabel translation key instead of threadReplyLabel, restoring the short 'Thread' header.

    • ReactionIconResolver.supportedReactions is now wired to the full emoji picker sheet opened by the "+" button in StreamMessageReactionPicker and the add-emoji chip in ReactionDetailSheet. Override supportedReactions on a custom resolver to control which reactions appear in the full picker grid.

    • Composer UI primitives (StreamMessageComposerInputField, VoiceRecordingCallback, and the outer/inner layout containers) are now owned by stream_chat_flutter and exported from this package. They were previously supplied by stream_core_flutter. The public API of StreamMessageComposer / StreamChatMessageInput and its sub-components is unchanged.

    • Re-export StreamAvatarTheme and StreamAvatarThemeData from stream_core_flutter so consumers can theme avatars without adding a separate stream_core_flutter import.

    • Added messageLeading, messageHeader, and messageFooter factory slots to streamChatComponentBuilders for overriding the message item's avatar, annotations, or metadata row without replacing the whole messageItem.

    • Bumped jiffy to ^6.4.5 to pick up cached locale and DateFormat lookups for cheaper relative-time formatting.

    • Raised minimum Flutter to >=3.41.0 and Dart SDK to ^3.11.0.

    🛑️ Breaking

    • StreamChatConfigurationData.draftMessagesEnabled now defaults to true. Draft messages are enabled out of the box; pass draftMessagesEnabled: false to opt out.
    • StreamChatConfigurationData.enforceUniqueReactions now defaults to false. Users can add multiple distinct reaction types to a message by default; pass enforceUniqueReactions: true to restore the previous behaviour.
    • StreamMessageComposer.enableVoiceRecording now defaults to true. The voice recording button is shown out of the box; pass enableVoiceRecording: false to opt out.
    • StreamMessageListView had its large set of configuration and builder parameters reorganized. Behavior flags (e.g. swipeToReply, markReadWhenAtTheBottom, showScrollToBottom, reverse, paginationLimit, scrollPhysics, etc.) moved to StreamMessageListViewConfiguration, passed directly as StreamMessageListView.config. Custom builder callbacks (headerBuilder, footerBuilder, loadingBuilder, emptyBuilder, errorBuilder, messageListBuilder, parentMessageBuilder, dateDividerBuilder, floatingDateDividerBuilder, threadSeparatorBuilder, unreadMessagesSeparatorBuilder, scrollToBottomBuilder, paginationLoadingIndicatorBuilder, spacingWidgetBuilder, systemMessageBuilder, ephemeralMessageBuilder, moderatedMessageBuilder) moved to StreamMessageListViewBuilders, passed directly as StreamMessageListView.builders. The messageBuilder parameter is back at the root of the constructor as before.
    • Bumped file_picker to ^11.0.0 to resolve #2599. Apps depending on file_picker directly must also upgrade past 11.0.0, which replaces the instance-based FilePicker.platform.* API with static FilePicker.* methods.
    • Renamed StreamChat.streamChatThemeDataStreamChat.themeData and StreamChat.streamChatConfigDataStreamChat.configData. The StreamChatState.streamChatConfigData getter is now StreamChatState.configData.
    • Renamed StreamMessageComposer.messageInputController parameter to messageComposerController.
    • Removed StreamDraftListView, StreamDraftListTile, StreamDraftListTileTheme, and StreamDraftListTileThemeData from the SDK. Also removed StreamChatThemeData.draftListTileTheme. Refer to the sample app for a reference implementation using StreamDraftListController and PagedValueListView.
    • Renamed StreamMessageComposerInputStreamMessageComposerInputCenter (and DefaultStreamMessageComposerInputDefaultStreamMessageComposerInputCenter). The name StreamMessageComposerInput is now the input container widget (assembles header, leading, center, trailing).
    • Renamed MessageComposerInputPropsMessageComposerInputCenterProps. The name MessageComposerInputProps now refers to the new container widget's props.
    • Renamed messageComposerInput builder key in streamChatComponentBuildersmessageComposerInputCenter. The name messageComposerInput now overrides the whole input container.
    • Replaced StreamMessageInput.hintGetter with placeholderBuilder over a sealed MessageInputPlaceholder. See migrations/redesign/message_composer.md.
    • Removed StreamMessageListView.unreadIndicatorBuilder; use StreamComponentFactory.jumpToUnreadButton.
    • Renamed UnreadIndicatorButton.onTaponJumpTap.
    • Renamed stream icons to remove the size suffix from the icon names.
    • Removed StreamAttachmentUploadStateBuilder.successBuilder and the SuccessBuilder typedef (unreachable).
    • Removed StreamFileAttachmentThumbnail; use StreamImageAttachmentThumbnail / StreamVideoAttachmentThumbnail or StreamFileTypeIcon.fromMimeType(...).
    • Removed StreamMessageThemeData (ownMessageTheme / otherMessageTheme) and StreamMessageInputThemeData (messageInputTheme).
    • Removed StreamChannelPreviewThemeData (channelPreviewTheme).
    • Removed the public MessageDetails class. The new messageBuilder signature no longer receives it — use StreamChat.of(context).currentUser and StreamMessageLayout.of(context) instead. See migrations/redesign/message_list.md.
    • Renamed StreamPollOptionsDialog / StreamPollResultsDialog / StreamPollOptionVotesDialog / StreamPollCommentsDialog (and their show* helpers and ...DialogThemeData types) → ...Sheet. They now render as modal bottom sheets.
    • Replaced StreamPollCreatorDialog / StreamPollCreatorFullScreenDialog (and showStreamPollCreatorDialog) with a single StreamPollCreatorSheet (showStreamPollCreatorSheet) that renders as a modal bottom sheet, matching the other poll sheets. StreamPollCreatorWidget gained an optional scrollController parameter.
    • Removed primaryActionStyle and secondaryActionStyle from StreamPollCreatorThemeData. Use the new sheetHeaderStyle.trailingStyle / sheetHeaderStyle.leadingStyle instead — see migrations/redesign/attachments_and_polls.md.
    • Redesigned StreamPollOptionsSheetThemeData, StreamPollResultsSheetThemeData, StreamPollOptionVotesSheetThemeData and StreamPollCommentsSheetThemeData — see migrations/redesign/attachments_and_polls.md.
    • Renamed Translations.questionsLabel getter → questionLabel({bool isPlural = false}) method.
    • Renamed Translations.endVoteConfirmationTextendVoteConfirmationTitle; English default changed to 'End This Poll?'.
    • Renamed Translations.slowModeOnLabel getter → slowModeOnLabel(int cooldownTimeOut) method; English default changed from 'Slow mode ON' to 'Slow mode, wait ${cooldownTimeOut}s\u2026'. While slow mode is active for the current user the composer text input is now disabled and the trailing send button is replaced by a disabled countdown button showing the remaining seconds, matching the redesigned Figma. See migrations/redesign/message_composer.md.
    • Reworded Translations.endVoteLabel English default to 'End Poll'.
    • Removed AttachmentButton, StreamQuotedMessageWidget, EditMessageSheet, StreamMessageSendButton and DesktopReactionsBuilder.
    • Removed StreamChannelGridView, StreamChannelGridTile and StreamMessageSearchGridView.
    • StreamMessageActionConfirmationModal.cancelActionTitle / confirmActionTitle are now nullable and fall back to Translations.cancelLabel / confirmLabel.
    • Renamed Translations.attachmentsUploadProgressText parameter remainingcompleted.
    • Updated several Translations default strings and added new abstract members — see migrations/redesign/localizations.md.
    • Renamed MuteIconPositionAttributePosition (values titleinlineTitle, subtitletrailingBottom) and StreamChannelListItemThemeData.muteIconPositionattributePosition. Now controls both mute and pin icons in StreamChannelListTile.
    • Removed AttachmentModalSheet, ErrorAlertSheet and StreamChannelInfoBottomSheet.
    • Removed StreamMarkdownMessage; use StreamMessageText (re-exported from stream_core_flutter) instead.
    • Renamed message item components to align with Android Compose and SwiftUI conventions:
      • StreamMessageWidgetStreamMessageItem (file moved to message_item.dart).
      • DefaultStreamMessageDefaultStreamMessageItem.
      • StreamMessageWidgetPropsStreamMessageItemProps.
      • StreamMessageWidgetBuilder typedef → StreamMessageItemBuilder.
      • StreamMessageAnnotationsStreamMessageHeader.
      • StreamMessageMetadataStreamMessageFooter.
      • ParseAttachmentsStreamMessageAttachments.
      • streamChatComponentBuilders(messageWidget: ...)messageItem: ....
      • StreamMessageContent(annotation: ..., metadata: ...)header: ..., footer: .... See migrations/redesign/message_widget.md.
    • Redesigned the full-screen media viewer:
      • Replaced StreamFullScreenMedia (and its StreamFullScreenMediaBuilder / FullScreenMediaWidget / FullScreenMediaDesktop / fsm_stub variants) with a single cross-platform StreamMediaGalleryPreview. Renamed mediaAttachmentPackagesattachments, startIndexinitialIndex; dropped userName, sentAt, onReplyMessage, onShowMessage and attachmentActionsModalBuilder from its surface.
      • Renamed StreamGalleryHeaderStreamMediaGalleryPreviewHeader and StreamGalleryFooterStreamMediaGalleryPreviewFooter, rebuilt on StreamAppBar / StreamBottomAppBar. Both shrank to a title (+ optional subtitle) and minimal action callbacks; the more-actions overflow header was removed.
      • Renamed StreamAttachmentPackageStreamMediaGalleryAttachment and added a Message.toMediaGalleryAttachments({filter}) extension.
      • Removed VideoPackage, DesktopVideoPackage and GalleryNavigationItem from the public API — each preview page now owns its own player state internally.
      • Removed StreamMessageItem.onShowMessage / attachmentActionsModalBuilder and the matching StreamMessageListView / StreamMessageContent props; those callbacks no longer have a destination after the gallery overflow was removed.
      • Removed StreamChatThemeData.galleryHeaderTheme, StreamChatThemeData.galleryFooterTheme (and the imageFooterTheme: constructor parameter) and the StreamGalleryFooterThemeData class. Header / footer chrome now flows through StreamAppBarThemeData / StreamBottomAppBarThemeData.
      • Removed the unused StreamAvatarThemeData. See migrations/redesign/media_viewer.md.
    • Removed StreamMessageComposer.maxAttachmentSize (and the kDefaultMaxAttachmentSize constant). Per-type size limits come from StreamChatClient.appSettings (configured in the Stream Dashboard).
    • Removed StreamMessageComposer.onAttachmentLimitExceed and the AttachmentLimitExceedListener typedef. Use onError for custom error handling.
    • StreamMessageComposer.attachmentLimit is now a non-nullable int defaulting to 30 (the per-message attachment cap). Previously int? defaulting to null ("no limit").
    • StreamAttachmentPickerController constructor now takes a single validator: StreamAttachmentValidator parameter (replaces the previous size / limit / config parameters).

    ✅ Added

    • Video attachments use the shared StreamVideoPlayIndicator for the play-button overlay.
    • Redesigned StreamSystemMessage / StreamModeratedMessage with a pill-shaped style and visual customisation props.
    • Added visual customisation props to ThreadSeparator and UnreadMessagesSeparator.
    • Added StreamUnsupportedAttachment and UnsupportedAttachmentBuilder for unrecognised attachment types.
    • Added StreamMediaGallery — a 3-up thumbnail grid that pairs with StreamMediaGalleryPreview. Each tile surfaces the sender's avatar (StreamUserAvatar) plus a video duration badge for video attachments. Used by StreamMediaGalleryPreviewFooter's gallery-grid sheet and ready to drop into channel-level media listings. Customisable via streamChatComponentBuilders(mediaGallery: ...).
    • Added StreamMediaGalleryPreview — the redesigned full-screen swipeable viewer. Built on the design system's StreamMediaViewer, StreamAppBar and StreamBottomAppBar. Customisable via streamChatComponentBuilders(mediaGalleryPreview: ...). Exposes StreamMediaGalleryPreviewScope so per-page widgets (e.g. videos) can react to the active page.
    • Added StreamVideoPlayer — the platform-aware video backend used by StreamMediaGalleryPreview. Pauses itself when its page is no longer active and resumes on return.
    • Added Translations.photosAndVideosLabel — used by the footer's thumbnail-grid sheet header.
    • Added StreamQuotedMessage and StreamQuotedMessageThemeData for the quoted message preview.
    • MessagePreviewFormatter now renders AttachmentType.urlPreview messages with a link icon and caption / OG title / linkAttachmentText fallback.
    • Added StreamPollCardStyle, StreamPollQuestionStyle and StreamPollOptionVotesStyle shared style classes for the poll sheets.
    • Added a total vote count footer and per-option "View all" action to StreamPollResultsSheet.
    • Added a sheetHeaderStyle field to each poll sheet theme data (including StreamPollCreatorThemeData).
    • Re-exported StreamSheetHeader, StreamSheetHeaderStyle, StreamSheetHeaderTheme and StreamSheetHeaderThemeData from stream_core_flutter.
    • Re-exported showStreamSheet, StreamSheet, StreamSheetDragHandle, StreamSheetRoute, StreamSheetTransition, StreamSheetScrollableWidgetBuilder, StreamSheetTheme and StreamSheetThemeData from stream_core_flutter. Poll sheets (StreamPollOptionsSheet, StreamPollResultsSheet, StreamPollOptionVotesSheet, StreamPollCommentsSheet, StreamPollCreatorSheet) now present as Stream-styled modal bottom sheets via showStreamSheet. See migrations/redesign/attachments_and_polls.md.
    • Re-exported StreamMessageAttachment and StreamMessageAttachmentStyle from stream_core_flutter.
    • Added a BoxFit? fit parameter to ThumbnailSizeCalculator.calculate (null defaults to BoxFit.scaleDown, matching paintImage) so callers using cover / fill get a bitmap large enough to render without upscale blur.
    • Added Translations.totalVoteCountLabel({int? count}), viewAllLabel, pollVotesLabel, endVoteConfirmationMessage and questionLabel({bool isPlural = false}).
    • Added Translations.reactionsCountText(int count) for the reaction-detail sheet header.
    • Added StreamChannelListTile.isPinned — renders a pin icon alongside the existing mute icon for pinned channels.
    • Exported StreamScrollViewLoadMoreError and StreamScrollViewLoadMoreIndicator from the public API.
    • Exported StreamTimestamp, DateFormatter, formatDate and formatRecentDateTime from the public API.
    • Added DateTimeComparisonUtils extension on DateTime (isToday, isYesterday, isWithinLastMinute, isWithinLastWeek, isInSameYear, isSame(other, unit:)) and the DateTimeUnit enum (year / month / day / hour / minute / second / millisecond / microsecond). All getters compare in local time and read the current instant via package:clock, so they're testable under withClock(...).

    🔄 Changed

    • Widened share_plus to >=12.0.2 <14.0.0 so apps can adopt the latest major. Raised minimum versions of bundled UI/media dependencies (cached_network_image, chewie, desktop_drop, diacritic, file_selector, flutter_markdown, flutter_svg, gal, image_picker, image_size_getter, jiffy, just_audio, lottie, media_kit, media_kit_video, photo_manager, url_launcher, video_player) to current resolved versions.
    • Changed the default StreamChat.backgroundKeepAlive from 1 minute to 15 seconds, matching StreamChatCore. See stream_chat_flutter_core changelog for rationale.
    • StreamPhotoGalleryTile now auto-sizes the platform thumbnail request from the tile's layout × DPR (132px fallback) instead of always asking for 400×400, so cells decode only what they paint. Pass an explicit thumbnailSize to override.
    • formatRecentDateTime reworked to a five-state cascade matching the Figma design system: Just now (< 1 min) / Today at H:mm / Yesterday at H:mm / Weekday at H:mm (within the last week) / MMM do at H:mm (older). Previously emitted formatDate-style output with the time appended.

    🐞 Fixed

    • Set supported emojis for the reaction picker and detail sheet to the full set of supported emojis from stream_core_flutter.
    • Fixed StreamCommandAutocompleteOptions and StreamMentionAutocompleteOptions expanding to half the screen height — both now cap at a fixed max height (208px / 176px) and scroll internally so the list can't dominate the screen or overlap the header.
    • Fixed the "Add an option" button in the poll creator looking like a tappable empty option row while disabled. The button is now hidden when adding a new option isn't allowed (an existing option is empty, or the maximum has been reached) instead of rendering as a disabled lookalike.
    • Fixed voice recording duration label jumping by ~1 second when playback starts. The recording timer tracks duration in whole seconds, so the stored value can be up to 1 second longer than the actual audio file. The player now resolves this by keeping the larger of the stored and player-reported durations, matching the strategy used by the iOS SDK.
    • Fixed voice message time label displaying elapsed time instead of remaining time.
    • Fixed RTL layout for the scroll-to-bottom button, swipe-to-reply icon, and voice recording lock button.
    • Fixed draft stream updates clobbering the composer while editing a message.
    • Fixed retries of in-flight sends being routed through updateMessage instead of sendMessage.
    • Fixed composer attachment button staying rotated at 45° after the inline picker was dismissed.
    • Fixed composer focus being lost after selecting a command from the attachment picker.
    • Fixed gallery attachment picker empty placeholder using an oversized icon.
    • Fixed gallery attachment picker permission placeholder not being centered and inconsistent grid and "add more" tile spacing.
    • Fixed EndOfFrameCallbackWidget showing a generic error string when its callback throws.
    • Fixed unintended Material ink ripple on message tap.
    • Standardised empty and error states across channel, thread, draft, member, user, message search, poll vote, reaction and photo gallery scroll views.
    • Standardised list separators across thread, draft, member, user and message search scroll views to match the channel scroll view.
    • Fixed StreamPhotoGalleryTile missing rounded corners and its badges not mirroring in RTL.
    • Fixed the "thread reply" action showing on parent messages while already inside their thread view.
    • Fixed poll vote progress bars re-animating from zero whenever the poll message was re-mounted in the message list (e.g. on jump-to-message, scrolling, or after new messages were sent).
    • Voice recording playback now pauses automatically when the app moves to the background.
    • Fixed voice recording playback resetting on the first tap after the app returned from the background. StreamVoiceRecordingAttachmentPlaylist.didUpdateWidget now compares the projected playlist (content-based equality on track uri / title / duration / waveform) instead of the raw Attachment list, so re-syncs that mint fresh client-side Attachment UUIDs no longer trip a needless updatePlaylist() mid-playback.
    • Fixed PollAddCommentDialog and PollSuggestOptionDialog accepting whitespace-only or unchanged submissions; the confirm action now disables when the trimmed text is empty or matches the initial value.
    • Fixed StreamPhotoGalleryTile using a hand-rolled icon as its loading placeholder and silently rendering nothing on decode failure. Now uses the shared StreamImageLoadingPlaceholder while loading and StreamImageErrorPlaceholder if the thumbnail fails to load.
    • Fixed poll, attachment-action, and message-action dialog buttons rendering their labels in uppercase (e.g. CANCEL, SEND, FLAG, DELETE); they now use the localized labels as-is so they match the rest of the system.
    • Fixed tapping a quoted parent message inside a thread doing nothing (or kicking back to the channel). The thread message list now resolves the parent slot directly and scrolls/highlights it instead of falling through to loadChannelAtMessage.
    • Fixed the jump-to-message highlight starting before the scroll settled, which made the fade barely visible (or invisible if the target hadn't been mounted yet). The message list now awaits the scroll, then plays a 1s hold + 1s ease-out fade — closer to the highlight feel in Slack's permalink jump.
    Open source →
  5. 10.0.0 28 Jan 2026 withdrawn

    Nothing published for this version

  6. 10.0.0-beta.13 10 Apr 2026 pre-release
    Release notes

    What's Changed

    Full Changelog: v10.0.0-beta.12...v10.0.0-beta.13

    Open source →
    Release notes

    🛑️ Breaking

    • SDK Redesign Changes. For more details, please refer to the migration guide. The SDK redesign introduces a fresher default UI, but also better APIs for customization of the components.
    Open source →
  7. 10.0.0-beta.12 28 Jan 2026 pre-release
    Release notes

    🐞 Fixed

    • Fixed regression in emoji_code support for reactions.

    🛑️ Breaking

    • Replaced ArgumentError with typed errors in StreamAttachmentPickerController: AttachmentTooLargeError (file size exceeds limit) and AttachmentLimitReachedError (attachment count exceeds limit). [#2476]
    • By default the preview of the last message will show deleted message indicator instead of filtering it out.

    For more details, please refer to the migration guide.

    • Included the changes from version 9.23.0.
    Open source →
  8. 10.0.0-beta.11 10 Dec 2025 pre-release
    Release notes
    • Included the changes from version 9.22.0.
    Open source →
  9. 10.0.0-beta.10 03 Dec 2025 pre-release
    Release notes
    • Included the changes from version 9.21.0.
    Open source →
  10. 10.0.0-beta.9 18 Nov 2025 pre-release
    Release notes

    ✅ Added

    • Added reactionIndicatorBuilder parameter to StreamMessageWidget for customizing reaction indicators. Users can now display reaction counts alongside emojis on mobile, matching desktop/web behavior. Fixes #2434.

      // Example: Show reaction count next to emoji
      StreamMessageWidget(
        message: message,
        reactionIndicatorBuilder: (context, message, onTap) {
          return StreamReactionIndicator(
            message: message,
            onTap: onTap,
            reactionIcons: StreamChatConfiguration.of(context).reactionIcons,
            reactionIconBuilder: (context, icon) {
              final count = message.reactionGroups?[icon.type]?.count ?? 0;
              return Row(
                children: [
                  icon.build(context),
                  const SizedBox(width: 4),
                  Text('$count'),
                ],
              );
            },
          );
        },
      )
      
    • Added reactionIconBuilder and backgroundColor parameters to StreamReactionPicker.

    • Exported StreamReactionIndicator and related components (ReactionIndicatorBuilder, ReactionIndicatorIconBuilder, ReactionIndicatorIcon, ReactionIndicatorIconList).

    🛑️ Breaking

    • onAttachmentTap callback signature changed to include BuildContext as first parameter and returns FutureOr<bool> to indicate if handled.

      // Before
      StreamMessageWidget(
        message: message,
        onAttachmentTap: (message, attachment) {
          // Could only override - no way to fallback to default behavior
          if (attachment.type == 'location') {
            showLocationDialog(context, attachment);
          }
          // Other attachment types lost default behavior
        },
      )
      
      // After
      StreamMessageWidget(
        message: message,
        onAttachmentTap: (context, message, attachment) async {
          if (attachment.type == 'location') {
            await showLocationDialog(context, attachment);
            return true; // Handled by custom logic
          }
          return false; // Use default behavior for images, videos, URLs, etc.
        },
      )
      
    • ReactionPickerIconList constructor changed: removed message parameter, changed reactionIcons type to List<ReactionPickerIcon>, renamed onReactionPicked to onIconPicked.

    For more details, please refer to the migration guide.

    • Included the changes from version 9.20.0.
    Open source →
  11. 10.0.0-beta.8 29 Oct 2025 pre-release
    Release notes

    🛑️ Breaking

    • onCustomAttachmentPickerResult has been removed. Use onAttachmentPickerResult which returns FutureOr<bool> to indicate if the result was handled.

      // Before
      StreamMessageInput(
        onCustomAttachmentPickerResult: (result) {
          // Handle custom location attachment
          final location = result.data['location'];
          sendLocationMessage(location);
        },
      )
      
      // After
      StreamMessageInput(
        onAttachmentPickerResult: (result) {
          if (result is CustomAttachmentPickerResult) {
            // Handle custom location attachment
            final location = result.data['location'];
            sendLocationMessage(location);
            return true; // Skip default handling
          }
          return false; // Use default handling for built-in types
        },
      )
      
    • customAttachmentPickerOptions has been removed. Use attachmentPickerOptionsBuilder to modify, reorder, or extend default options.

      // Before - could only add custom options
      StreamMessageInput(
        customAttachmentPickerOptions: [
          TabbedAttachmentPickerOption(
            key: 'location',
            icon: Icon(Icons.location_on),
            // ...
          ),
        ],
      )
      
      // After - can now modify, filter, or extend default options
      StreamMessageInput(
        attachmentPickerOptionsBuilder: (context, defaultOptions) {
          return [
            ...defaultOptions, // Keep all default options
            TabbedAttachmentPickerOption(
              key: 'location',
              icon: Icon(Icons.location_on),
              // ...
            ),
          ];
        },
      )
      

    For more details, please refer to the migration guide.

    • Included the changes from version 9.19.0.
    Open source →
  12. 10.0.0-beta.7 15 Oct 2025 pre-release
    Release notes

    ✅ Added

    • Added support for StreamMessageWidget.deletedMessageBuilder to customize the deleted message UI.

    • Included the changes from version 9.18.0.

    Open source →
  13. 10.0.0-beta.6 24 Sep 2025 pre-release
    Release notes

    🐞 Fixed

    • Fixed users with sendReply capability unable to send replies in threads.

    • Fixed delete/flag message dialogs executing action when dialog is dismissed without confirmation.

    • Included the changes from version 9.17.0.

    Open source →
  14. 10.0.0-beta.5 13 Aug 2025 pre-release
    Release notes
    • Included the changes from version 9.16.0.
    Open source →
  15. 10.0.0-beta.4 25 Jul 2025 pre-release
    Release notes

    ✅ Added

    • Added emojiCode property to StreamReactionIcon to support custom emojis in reactions.

    • Updated default reaction builders with standard emoji codes. (❤️, 👍, 👎, 😂, 😮)

    • Added StreamChatConfiguration.maybeOf() method for safe context access in async operations.

    • Included the changes from version 9.15.0.

    Open source →
  16. 10.0.0-beta.3 17 Jul 2025 pre-release
    Release notes

    🛑️ Breaking

    • Deprecated API Cleanup: Removed all deprecated classes, methods, and properties for the v10 major release:
      • Removed Classes: DmCheckbox (use DmCheckboxListTile), StreamIconThemeSvgIcon (use StreamSvgIcon), StreamVoiceRecordingThemeData (use StreamVoiceRecordingAttachmentThemeData), StreamVoiceRecordingLoading, StreamVoiceRecordingSlider (use StreamAudioWaveformSlider), StreamVoiceRecordingPlayer (use StreamVoiceRecordingAttachment), StreamVoiceRecordingListPlayer (use StreamVoiceRecordingAttachmentPlaylist)
      • Removed Properties: reactionIcons and voiceRecordingTheme from StreamChatTheme, isThreadConversation from FloatingDateDivider, idleSendButton and activeSendButton from StreamMessageInput, isCommandEnabled and isEditEnabled from StreamMessageSendButton, assetName, width, and height from StreamSvgIcon
      • Removed Constructor Parameters: useNativeAttachmentPickerOnMobile from various components, allowCompression from StreamAttachmentHandler.pickFile() and StreamFilePicker (use compressionQuality instead), cid from StreamUnreadIndicator constructor
      • Removed Methods: lastUnreadMessage() from message list extensions (use StreamChannel.getFirstUnreadMessage), loadBuffer() and _loadAsync() from StreamVideoThumbnailImage
      • StreamSvgIcon Refactoring: Removed 80+ deprecated factory constructors. Use StreamSvgIcon(icon: StreamSvgIcons.iconName) instead of factory constructors like StreamSvgIcon.add()
    • PollMessage widget has been removed and replaced with PollAttachment for better integration with the attachment system. Polls can now be customized through PollAttachmentBuilder or by creating custom poll attachment widgets via the attachment builder system.
    • AttachmentPickerType enum has been replaced with a sealed class to support extensible custom types like contact and location pickers. Use built-in types like AttachmentPickerType.images or define your own via CustomAttachmentPickerType.
    • StreamAttachmentPickerOption has been replaced with two sealed classes to support layout-specific picker options: SystemAttachmentPickerOption for system pickers (e.g. camera, files) and TabbedAttachmentPickerOption for tabbed pickers (e.g. gallery, polls, location).
    • showStreamAttachmentPickerModalBottomSheet now returns a StreamAttachmentPickerResult instead of AttachmentPickerValue for improved type safety and clearer intent handling.
    • StreamMobileAttachmentPickerBottomSheet has been renamed to StreamTabbedAttachmentPickerBottomSheet, and StreamWebOrDesktopAttachmentPickerBottomSheet has been renamed to StreamSystemAttachmentPickerBottomSheet to better reflect their respective layouts.

    For more details, please refer to the migration guide.

    ✅ Added

    • Added extraData field to AttachmentPickerValue to support storing and retrieving custom picker state (e.g. tab-specific config).

    • Added customAttachmentPickerOptions to StreamMessageInput to allow injecting custom picker tabs like contact and location pickers.

    • Added onCustomAttachmentPickerResult callback to StreamMessageInput to handle results returned by custom picker tabs.

    • Included the changes from version 9.14.0.

    Open source →
  17. 10.0.0-beta.2 30 Jun 2025 pre-release
    Release notes
    • Included the changes from version 9.13.0.
    Open source →
  18. 10.0.0-beta.1 18 Jun 2025 pre-release
    Release notes

    🛑️ Breaking

    • StreamReactionPicker now requires reactions to be explicitly handled via onReactionPicked. (Automatic handling is no longer supported.)
    • StreamMessageAction is now generic (StreamMessageAction<T>), enhancing type safety. Individual onTap callbacks have been removed; actions are now handled centrally by widgets like StreamMessageWidget.onCustomActionTap or modals using action types.
    • StreamMessageReactionsModal no longer requires the messageTheme parameter. The theme now automatically derives from the reverse property.
    • StreamMessageWidget no longer requires the showReactionTail parameter. The reaction picker tail is now always shown when the reaction picker is visible.

    For more details, please refer to the migration guide.

    ✅ Added

    • Added new StreamMessageActionsBuilder which provides a list of actions to be displayed in the message actions modal.
    • Added new StreamMessageActionConfirmationModal for confirming destructive actions like delete or flag.
    • Added new StreamMessageModal and showStreamMessageModal for consistent message-related modals with improved transitions and backdrop effects.
      showStreamMessageModal(
        context: context,
        ...other parameters,
        builder: (context) => StreamMessageModal(
          ...other parameters,
          headerBuilder: (context) => YourCustomHeader(),
          contentBuilder: (context) => YourCustomContent(),
        ),
      );
      
    • Added desktopOrWeb parameter to PlatformWidgetBuilder to allow specifying a single builder for both desktop and web platforms.
    • Added reactionPickerBuilder to StreamMessageActionsModal, StreamMessageReactionsModal, and StreamMessageWidget to enable custom reaction picker widgets.
    • Added StreamReactionIcon.defaultReactions providing a predefined list of common reaction icons.
    • Exported StreamMessageActionsModal and StreamModeratedMessageActionsModal which are now based on StreamMessageModal for consistent styling and behavior.
    Open source →
  19. 9.28.0 14 Aug 2026
    Release notes

    What's Changed

    • fix(ui): enrich link previews for uppercase URL schemes by @xsahil03x in #2844
    • fix(llc, core, ui, localization): hide raw StreamChannel errors behind themed, connection-aware states by @xsahil03x in #2849
    • fix(llc): keep reaction group while its count stays positive by @xsahil03x in #2859
    • chore(repo): support Flutter 3.47 by @VelikovPetar in #2895
    • fix(llc): handle per-channel notification.mark_read events again by @xsahil03x in #2891
    • fix(llc, core): port e2e-suite thread fix and disposed-channel sort crash to v9 by @xsahil03x in #2893
    • fix(llc, persistence): truncated channels sinking to the bottom of a last_updated sort by @VelikovPetar in #2892
    • fix(llc): null ordering for pinned_at and last_message_at channel sorts by @VelikovPetar in #2889
    • fix(llc): update watcher count from realtime events and ignore events after dispose by @VelikovPetar in #2898
    • chore(repo): release v9.28.0 by @VelikovPetar in #2901

    Full Changelog: v9.27.0...v9.28.0

    Open source →
  20. 9.27.0 22 Jul 2026
    Release notes

    What's Changed

    • feat(llc, core, persistence): Add support for PredefinedFilters on QueryChannels(v9) by @VelikovPetar in #2775
    • fix(llc): suppress EquatableMixin deprecation warning in StreamChatError by @VelikovPetar in #2802
    • perf(persistence): Move thread messages pagination to SQL by @VelikovPetar in #2750
    • perf(persistence): Move pinned messages pagination to SQL by @VelikovPetar in #2751
    • chore(persistence): Remove unused DAO methods (v9) by @VelikovPetar in #2755
    • feat(llc): Sanitize X-Stream-Client to prevent customers overriding internal values (v9) by @VelikovPetar in #2799
    • perf(persistence): add indexes to speed up offline channel-list reads (v9) by @VelikovPetar in #2801
    • fix(core): Fix StreamChannelListController not handling notification.channel_deleted event (v9). by @VelikovPetar in #2800
    • fix(ui): skip markThreadRead for reply-less thread parents (v9) by @xsahil03x in #2808
    • fix(ui): Fix shadowed messages not hidden in the channel list by @VelikovPetar in #2788
    • fix(ui): preserve last-message preview during channel-state reloads by @VelikovPetar in #2811
    • fix(core): Fix backwards pagination not working if channel was never opened by @VelikovPetar in #2812
    • fix(llc): normalize strings when comparing ComparableField (v9) by @xsahil03x in #2810
    • fix(llc, core): Fix wrong changelog entries by @VelikovPetar in #2818
    • feat(llc): increase default connect and receive timeout to 30s by @xsahil03x in #2831
    • fix(llc): Don't upsert out-of-window messages on message.updated/message.deleted events by @VelikovPetar in #2815
    • fix(ui): Mark channel read immediately when the unread indicator is dismissed by @VelikovPetar in #2838
    • chore(repo): release v9.27.0 by @xsahil03x in #2840

    Full Changelog: v9.26.0...v9.27.0

    Open source →
  21. 9.26.0 23 Jun 2026
    Release notes

    What's Changed

    • chore(ci): run pana and legacy analyze on v9 branch by @renefloor in #2756
    • fix(llc, core): pause WebSocket reconnect while app is background (v9) by @xsahil03x in #2760
    • fix(ui): avoid redundant setState in MessageCard width measurement [v9] by @xsahil03x in #2763
    • fix(llc): Fix UpsertPushPreferencesResponse null values parsing by @VelikovPetar in #2749
    • fix(persistence): port poll DAO null-user fix and chunked size guard from #2731 by @VelikovPetar in #2752
    • fix(llc): Fixed resetting channel unread count on message.read events delivered for threads [v9] by @VelikovPetar in #2781
    • chore(repo): release v9.26.0 by @xsahil03x in #2782

    Full Changelog: v9.25.0...v9.26.0

    Open source →
  22. 9.25.0 05 Jun 2026
    Release notes

    What's Changed

    • ci(repo): centralize path/draft gating in a per-workflow gate job by @xsahil03x in #2669
    • chore(samples): disable Swift Package Manager for sample_app by @xsahil03x in #2672
    • fix(ci): disable SPM at CI level instead of via pubspec flag by @xsahil03x in #2675
    • chore(repo): add release-pr skill by @xsahil03x in #2657
    • perf(llc): Reduce the number of DB reads in ChatPersistenceClient.getChannelStates() by @VelikovPetar in #2664
    • fix(core): truncate channel state before reloading latest messages by @xsahil03x in #2690
    • fix(ui): auto-scroll on optimistic local messages by @xsahil03x in #2683
    • fix(ui): Don't count anchor corrections in ScrollablePositionedList by @renefloor in #2693
    • refactor(persistence): Store DateTime as ISO-8601 text in DB to preserve sub-seconds precision by @VelikovPetar in #2694
    • fix(ui): guard MessageCard._updateWidthLimit against unlaid RenderBox by @Mounix99 in #2702
    • fix(ui): stop StreamMessageListView from tripping RenderViewport layout-cycle limit by @xsahil03x in #2703
    • chore(repo): sync sample_app version to SDK + add TestFlight internal builds by @xsahil03x in #2705
    • fix(llc, core, ui): isolate channel state from sub-route wraps and smooth thread-open scroll by @xsahil03x in #2704
    • fix(ci): allow fork PRs to post DB entity comments by @xsahil03x in #2714
    • chore(deps): bump the all-actions group across 1 directory with 4 updates by @dependabot[bot] in #2712
    • ci(repo): skip sample app build when targeting master by @xsahil03x in #2720
    • fix(persistence): persist channel team field by @TheoGermain in #2700
    • perf(core, ui): back .of() lookups with StreamStateScope instead of findAncestorStateOfType by @xsahil03x in #2726
    • fix(ci): add multi_json to sample_app Gemfiles by @xsahil03x in #2728
    • perf(persistence): Reduce the number of read message per channel from DB when paginating (part 1) by @VelikovPetar in #2679
    • perf(persistence): Reduce the number of read message per channel from DB when paginating (part 2) by @VelikovPetar in #2681
    • chore(repo): release v9.25.0 by @xsahil03x in #2730

    New Contributors

    Full Changelog: v9.24.0...v9.25.0

    Open source →
    Release notes

    🐞 Fixed

    • Fixed ScrollablePositionedList.scrollTo taking the long-distance teleport path when called immediately after mount (before itemPositions had been published). It now waits one frame for layout, then animates the real pixel distance.
    • Fixed StreamMessageListView not auto-scrolling to the bottom on the user's own outgoing message until the server confirmed it.
    • Fixed StreamMessageListView tripping A RenderViewport exceeded its maximum number of layout cycles under mid-list anchored layout. ScrollablePositionedList now preserves the scroll offset across reanchors instead of resetting it to 0.
    • Fixed RenderBox was not laid out thrown by MessageCard._updateWidthLimit when the attachments subtree was detached between scheduling the post-frame callback and it firing (e.g. the list was rebuilt or the message removed). Added a hasSize guard before reading RenderBox.size.

    🚀 Improved

    • ScrollablePositionedList.padding now accepts EdgeInsetsGeometry (resolved against Directionality), and scrollTo lands the target at the content-area edge by adjusting for leading padding.
    • StreamChat.of now resolves via StreamStateScope instead of findAncestorStateOfType, replacing an O(tree-depth) element walk with an O(1) inherited-widget lookup. Callers and behavior are unchanged.
    Open source →
  23. 9.24.0 19 May 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v9.23.0...v9.24.0

    Open source →
    Release notes

    ✅ Added

    • StreamMessageListView now accepts maximumMessageLimit to cap the loaded message list. See MessageListCore for the trim semantics.

    🐞 Fixed

    • Fixed StreamMessageListView thread page crashing with StateError when the parent message was no longer present in the channel's loaded messages (e.g. filtered, shadowed, or paginated out). The thread now falls back to the captured parent message in that case.

    🚀 Improved

    • StreamMessageListView's markRead / markThreadRead now fire on the leading edge of their 1s debounce window, so the first read receipt after entering a channel or sending a message hits the server immediately instead of waiting for the trailing edge. The redundant local unreadCount = 0 short-circuit on own-message send was removed — the leading-edge mark plus readStream updates now keep the unread badge in sync without an extra setState.
    Open source →
  24. 9.23.0 28 Jan 2026
    Release notes

    🐞 Fixed

    • Fixed StreamChannelAvatar crashing with RangeError when user/channel name is empty.
    • Fixed audio tone bleeding into recorded voice message when playing custom feedback sound on recording start.
    • Fixed poll dialog AppBar back button color not being themeable. [#2484]
    Open source →
  25. 9.22.0 10 Dec 2025
    Release notes

    ✅ Added

    • Added haptic and system sound feedback for voice recording interactions. Feedback can be customized by extending AudioRecorderFeedback or using AudioRecorderFeedbackWrapper with custom callbacks. [#2463]
    • Added support for deleting options while creating a poll in StreamPollCreator. [#2453]

    🐞 Fixed

    • Fixed focus randomly shifting to poll title while editing option text in poll creator. [#2464]
    Open source →
  26. 9.21.0 03 Dec 2025
    Release notes

    🐞 Fixed

    • Fixed StreamGallery not respecting the safe area for fullscreen media. [#2454]
    Open source →
  27. 9.20.0 18 Nov 2025
    Release notes

    ✅ Added

    • Added delivered status to SendingIndicator (double grey check for delivered, double accentPrimary check for read).
    • Added isMessageDelivered parameter to SendingIndicator widget.
    • Added MessagePreviewFormatter interface and StreamMessagePreviewFormatter implementation for customizing message preview text formatting in channel lists and draft messages.
    • Added messagePreviewFormatter property to StreamChatConfigurationData for global customization of message preview formatting.
    • Added formatter properties to theme data classes for customizing date/timestamp formatting. [#2312] [#2406]

    🐞 Fixed

    • Fixed mistakenly passing the hyperlink text to the onLinkTap callback instead of the actual href.
    • Fixed high memory usage when displaying multiple image attachments. [#2228]
    Open source →
  28. 9.19.0 29 Oct 2025
    Release notes

    ✅ Added

    • Added StreamMessageListView.floatingDateDividerBuilder in order to specifically customize the floating date divider.
    • Added spacing to typing indicator.
    Open source →
  29. 9.18.0 15 Oct 2025
    Release notes

    🐞 Fixed

    • Fixed StreamMessageListView not marking thread messages as read when scrolled to the bottom of the list.
    • Fixed StreamMessageInput not validating draft messages before creating/updating them.
    Open source →
  30. 9.17.0 24 Sep 2025
    Release notes

    ✅ Added

    • Added messageBackgroundGradient property to StreamMessageThemeData for gradient message backgrounds.

    🐞 Fixed

    • Fixed .replaceMentions not escaping special characters in the username.
    • Fixed videos not being saved to gallery correctly on mobile platforms. [#2357]
    • Fixed unread indicator button using hardcoded white color instead of theme color colorTheme.barsBg. [#2366]
    • Fixed GradientAvatars for users with same-length IDs would have identical colors. [#2369]
    Open source →
  31. 9.16.0 13 Aug 2025
    Release notes

    🐞 Fixed

    • Fixed context menu being truncated and scrollable on web when there was enough space to display it fully. [#2317]
    • Fixed StreamMessageInput cooldown resume error if channel state is not yet initialized. [#2338]

    ✅ Added

    • Added padding and textInputMargin to StreamMessageInput to allow fine-tuning the layout.
    Open source →
  32. 9.15.0 25 Jul 2025
    Release notes

    ✅ Added

    • Added bottom and bottomOpacity to the StreamChannelHeader widget.
    • Added StreamChat.maybeOf() method for safe context access in async operations.

    🐞 Fixed

    • Fixed StreamMessageInput crashes with "Null check operator used on a null value" when async operations continue after widget unmounting.
    Open source →
  33. 9.14.0 17 Jul 2025
    Release notes

    🐞 Fixed

    • Fixed StreamMessageInput tries to expand to full height when used in a unconstrained environment.
    • Fixed StreamCommandAutocompleteOptions to style the command name with textHighEmphasis style.
    Open source →
  34. 9.13.0 30 Jun 2025
    Release notes

    🐞 Fixed

    • Fixed FloatingDateDivider not showing the correct date when the latest message was too big and exceeded the viewport main axis size.
    • Fixed ScrollToBottom button always showing when the latest message was too big and exceeded the viewport main axis size.
    Open source →
  35. 9.12.0 17 Jun 2025
    Release notes

    ✅ Added

    • Added support for MessageReminder feature, which allows users to bookmark or set reminders for specific messages in a channel.
    Open source →
  36. 9.11.0 03 Jun 2025
    Release notes

    🐞 Fixed

    • Fixed StreamMessageInput throwing exception when a non-initialized Channel is used.

    🔄 Changed

    • Updated just_audio dependency to ">=0.9.38 <0.11.0".
    Open source →
  37. 9.10.0 15 May 2025
    Release notes

    🔄 Changed

    • Updated share_plus dependency to ^11.0.0.
    • Updated desktop_drop dependency to ">=0.5.0 <0.7.0".
    Open source →
  38. 9.9.0 06 May 2025
    Release notes

    ✅ Added

    • Added support for Draft messages preview.
    • Added a new StreamDraftListView for displaying draft messages.
    • Added a confirmation dialog for end vote in Polls. [#2211]

    🐞 Fixed

    • [#2182] Fixes StreamMessageInput not listening to channel capabilities.

    🔄 Changed

    • Exported StreamQuotedMessageWidget to allow customization of quoted messages using StreamMessageWidget.quotedMessageBuilder.
    Open source →
  39. 9.8.0 16 Apr 2025
    Release notes

    🐞 Fixed

    • [#2184] Fixed messages not being marked as read when scrolled to the bottom.
    • [#2187] Fixed MessageListView scrolling back up after reaching bottom when unread indicator or scroll to bottom button is tapped.
    • [#2085] Fixed handling of read events in the Channel class.
    • [#2150] Fixed Push notifications for mentions shows user ID instead of Username.
    • [#2203] Fixed StreamMessageInput shows Poll option even if polls are disabled in channel config.
    Open source →
  40. 9.7.0 03 Apr 2025
    Release notes

    🐞 Fixed

    • [#2118] Fixed invalid assertions applied on message input command and attachment button.
    • [#2042] Fixed StreamMessageInput send message predicate to properly handle shift+enter for new lines and improve message text validation.

    ✅ Added

    • Added support for new message moderation feature in the SDK.
    Open source →
  41. 9.6.0 13 Mar 2025
    Release notes

    🐞 Fixed

    • [#2137] Fixed message input buttons not being able to customized.
    • [#1775] Fix incorrect message order.
    Open source →
  42. 9.5.0 12 Mar 2025
    Release notes

    🐞 Fixed

    • Fixed StreamMessageInput not able to edit the ogAttachments.
    • Fixed MessageWidget showing pinned background for deleted messages.

    ✅ Added

    • Introduced StreamMessageInput.useSystemAttachmentPicker for system media picker support.
    • Introduced StreamMessageThemeData.messageDeletedStyle to style the text on a deleted message.

    🔄 Changed

    • Updated the message list view to prevent pinning messages that have restricted visibility.
    • Deprecated StreamMessageInput.useNativeAttachmentPickerOnMobile in favor of StreamMessageInput.useSystemAttachmentPicker.
    Open source →
  43. 9.4.0 14 Feb 2025
    Release notes

    🔄 Changed

    Open source →
  44. 9.3.0 11 Feb 2025
    Release notes

    ✅ Added

    • Added support for voiceRecording type attachments.

    🔄 Changed

    • Deprecated PlayListItem in favor of PlaylistTrack.
    • Deprecated StreamVoiceRecordingListPlayer in favor of StreamVoiceRecordingAttachmentPlaylist.
    • Deprecated StreamVoiceRecordingLoading as it is no longer used.
    • Deprecated StreamVoiceRecordingPlayer in favor of StreamVoiceRecordingAttachment.
    • Deprecated StreamVoiceRecordingSlider in favor of StreamAudioWaveformSlider.
    • Deprecated VoiceRecordingAttachmentBuilder in favor of VoiceRecordingAttachmentPlaylistBuilder.
    • Deprecated StreamVoiceRecordingTheme in favor of StreamVoiceRecordingAttachmentTheme.
    Open source →
  45. 9.2.0 21 Jan 2025
    Release notes

    🐞 Fixed

    • Fixed StreamChannel not available in the widget tree for various poll-related dialogs.
    Open source →
  46. 9.2.0+1 21 Jan 2025
    Release notes
    • Remove untracked files from the package.
    Open source →
  47. 9.1.0 09 Jan 2025
    Release notes

    ✅ Added

    • Added a new StreamThreadListView widget to load and display list of threads.
    • Added a new StreamUnreadThreadsBanner widget to display count of unread threads.
    • Added new StreamUnreadIndicator.channels and StreamUnreadIndicator.threads constructors to display unread channels and threads respectively.

    🔄 Changed

    • Deprecated StreamUnreadIndicator cid property in favor of StreamUnreadIndicator.channels constructor.
    Open source →
  48. 9.0.0 30 Dec 2024
    Release notes

    🛑️ Breaking

    • The StreamAttachmentPickerController has been restructured to improve flexibility and support additional use cases like poll management.
      • Previously managed a List<Attachment> but now manages an AttachmentPickerValue object, which includes:
        • attachments: A list of attachments.
        • poll: A new field for managing polls.

    ✅ Added

    • Added a new StreamPollCreator widget to facilitate poll creation within the chat interface.
    • Added a new PollMessage widget to display poll messages within the chat interface.

    🔄 Changed

    • Updated minimum Flutter version to 3.24.5 for the SDK.
    Open source →
  49. 8.3.0 04 Dec 2024
    Release notes

    ✅ Added

    • Added several new widgets to enhance the AI assistant features.
      • StreamingMessageView to show AI assistant messages with streaming animation.
      • AITypingIndicatorView to show AI typing indicator.

    ✅ Added

    • Added several new widgets to enhance the AI assistant features.
      • StreamingMessageView to show AI assistant messages with streaming animation.
      • AITypingIndicatorView to show AI typing indicator.

    🐞 Fixed

    • [#2030] Fixed video_thumbnail Namespace not specified.
    Open source →
  50. 8.2.0 11 Nov 2024
    Release notes

    ✅ Added

    • Added onThreadTap parameter to MessageWidgetContent to enable thread tap action.
    • Messages by default now show an "Edited" label if text is edited. Use showEditedLabel to disable this functionality.

    🐞 Fixed

    • Fixed locale conversion in jiffy.

    🔄 Changed

    • Updated stream_chat_flutter_core dependency to 8.2.0.
    Open source →
  51. 8.1.0 19 Sep 2024
    Release notes

    🐞 Fixed

    • Fixed enrichment errors causing some URLs to enrich twice.
    • Added option to use the native attachment picker on mobile

    🔄 Changed

    • Changed minimum Flutter version to 3.22 for the SDK.
    Open source →
  52. 8.0.0 22 Jul 2024
    Release notes

    🐞 Fixed

    • Fixed null errors in web from markdown.
    • Fixed bug causing background events to be sent in foreground.
    Open source →
  53. 8.0.0-beta.3 08 May 2024 pre-release

    Nothing published for this version

  54. 8.0.0-beta.2 09 Jan 2024 pre-release

    Nothing published for this version

  55. 8.0.0-beta.1 04 Dec 2023 pre-release

    Nothing published for this version

  56. 7.3.0 03 Jul 2024
    Release notes

    🐞 Fixed

    • Fixed copy message function.

    🔄 Changed

    • Changed minimum Flutter version to 3.19 for the SDK.
    • Updated stream_chat_flutter_core dependency to 7.3.0.
    Open source →
  57. 7.2.2 18 Jun 2024
    Release notes

    ✅ Added

    • Added customAttachmentBuilders parameter for StreamAttachmentWidgetBuilder.defaultBuilders.
    • attachmentBuilders parameter for StreamMessageWidget now only expects custom builders.
    • Added StreamMediaAttachmentBuilder widget to show media attachments in a message.

    🐞 Fixed

    • Added export for message_widget_content_components.dart to allow for easier customization of message content components.
    • Fixed error when channel image is not set.
    • Fixes reaction picker tail showing up unexpectedly.
    • Copying a message now replaces the User IDs with user names.
    • Exported thumbnail widgets from the package.
    • Extends predicates for sending and clearing messages to mobile.

    🔄 Changed

    • Updated stream_chat_flutter_core dependency to 7.2.2.
    Open source →
  58. 7.2.1 04 Jun 2024
    Release notes

    ✅ Added

    • Added VoiceRecordingAttachmentBuilder, for displaying voice recording attachments in the chat.

    🐞 Fixed

    • Fixed wrong calculation of the last unread message indicator.
    Open source →
  59. 7.2.0 03 Apr 2024
    Release notes

    ✅ Added StreamMessageListView will now by default show unread indicator floating on top of the message list that will scroll to last read message when tapped and mark channel as unread when dismissed.

    • Added showUnreadIndicator parameter to StreamMessageListView that controls visibility of new channel unread indicator
    • Added unreadIndicatorBuilder parameter to StreamMessageListView that allows to provide custom unread indicator builder
    • Added markReadWhenAtTheBottom parameter to StreamMessageListView that will toggle, previously default, behaviour of marking channel as read when message list is scrolled to the bottom (now default is false)
    • Added showUnreadCountOnScrollToBottom parameter to StreamMessageListView that will toggle, previously shown by default, unread messages counter on the scroll to bottom button (no default is false)

    Added Mark as Unread option to StreamMessageWidget context menu that will show for non-thread messages of other users and mark channel as unread from selected message onwards.

    • Added showMarkUnreadMessage to StreamMessageWidget that controls visibility of Mark as Unread option.
    Open source →
  60. 7.2.0-hotfix.1 04 Apr 2024 pre-release
    Release notes

    🔄 Changed

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive