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 2026Releases
latest 60 of 264-
10.3.014 Aug 2026Release notes
Open source →What's Changed
- chore(samples): migrate from flutter_app_badger to app_badge_plus by @xsahil03x in #2836
- chore(deps): bump actions/checkout from 6 to 7 in the all-actions group by @dependabot[bot] in #2832
- fix(ci): drop internal group from TestFlight upload_to_testflight by @testableapple in #2839
- fix(samples): add NSLocationAlwaysAndWhenInUseUsageDescription to Info.plist by @xsahil03x in #2841
- ci(repo): Add E2E reactions tests by @testableapple in #2825
- fix(ui): enrich link previews for uppercase URL schemes by @xsahil03x in #2843
- fix(ui): filter StreamTypingIndicator initial data by parentId by @VelikovPetar in #2842
- fix(llc): update watcher count and watchers from realtime events by @VelikovPetar in #2837
- feat(ui): channel-list & message-preview accessibility pass by @xsahil03x in #2827
- feat(ui): make StreamMessageListView auto-scroll configurable by @xsahil03x in #2845
- fix(ui): pass the correct BuildContext to
onReactionPickedby @w830207 in #2823 - fix(llc, core, ui, localization): hide raw StreamChannel errors behind themed, connection-aware states by @xsahil03x in #2846
- feat(samples): dynamic colors by @renefloor in #2848
- ci(repo): mock firebase for e2e tests by @testableapple in #2821
- feat(llc): Implement local unread counts by @renefloor in #2804
- feat(ci): Add opt-in offline persistence for E2E tests by @VelikovPetar in #2853
- fix(llc): Ignore events dispatched after the client is disposed by @VelikovPetar in #2855
- feat(ui): add onReactionTap reporting the tapped reaction by @xsahil03x in #2852
- chore(deps): bump actions/stale from 10 to 11 in the all-actions group by @dependabot[bot] in #2850
- fix(ui): attachment picker type without label by @renefloor in #2856
- feat(ui): add configurable
StreamBackButtonunread count by @VelikovPetar in #2816 - chore(repo): don't run e2e ios tests on pr's by @renefloor in #2857
- fix(llc): keep reaction group while its count stays positive by @xsahil03x in #2858
- ci(repo): Add E2E message list tests by @testableapple in #2854
- fix(ui): jump on text selection by @renefloor in #2864
- chore(samples): macos builds by @renefloor in #2865
- fix(ui): Message actions background by @renefloor in #2860
- fix(ui): metadata color on overlay by @renefloor in #2861
- feat(core): dynamic search debounce based on query length by @xsahil03x in #2873
- fix(ui, samples): dispose fixes on channel list and avatar by @renefloor in #2876
- ci(repo): pass the project root to pana by @xsahil03x in #2881
- fix(llc, ui): Issues found by the e2e suites by @testableapple in #2874
- perf(persistence): Speed up hydrating a page of cached messages by @VelikovPetar in #2820
- chore(repo): support Flutter 3.47 by @xsahil03x in #2882
- feat(ui): improve message text selection on desktop/web by @w830207 in #2868
- chore(ui): Update Goldens by @xsahil03x in #2883
- test(repo): derive docs mock channel dates from the supplied messages by @VelikovPetar in #2884
- test(repo): Add channel list and quoted reply e2e suites by @testableapple in #2869
- fix(llc): null ordering for
pinned_atandlast_message_atchannel sorts by @VelikovPetar in #2878 - fix(llc, persistence): truncated channels sinking to the bottom of a
last_updatedsort by @VelikovPetar in #2880 - feat(ui): channel page and floating UI by @renefloor in #2748
- fix(core): sort channels with disposed state last instead of crashing by @testableapple in #2887
- fix(llc): handle per-channel notification.mark_read events again by @xsahil03x in #2890
- chore(repo): release v10.3.0 by @xsahil03x in #2899
New Contributors
Full Changelog: v10.2.0...v10.3.0
Release notes
Open source →⚠️ Changed
StreamMediaGalleryno longer applies its own outer padding or strips the ambientMediaQuerypadding; passpaddingto inset the grid.StreamMessageListView.configis now nullable; reading it off an instance yieldsStreamMessageListViewConfiguration?rather than a default instance.StreamMediaGalleryPreviewchrome 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
showScrollToBottomfrom the effectiveStreamMessageListViewConfiguration; set it tofalseto hide it.
✅ Added
- Added
resolveSurfaceStyletoStreamMessageComposer,StreamChannelHeader,StreamChannelListHeader, andStreamThreadHeader, 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 upStreamChannelHeader,StreamMessageListView, andStreamMessageComposerwith floating or docked layout. - Added
StreamThreadPage— the thread equivalent, plus anonBackPressedthat replaces the header back button's default pop. - Added
onBackPressedtoStreamChannelHeaderandStreamThreadHeader, replacing the default back button's pop without rebuildingleading. Ignored whenleadingis supplied. - Added
MessageComposerProps.surfaceStyle, selecting whetherStreamMessageComposerrenders floating or regular. Falls back toStreamMessageComposerThemeData.surfaceStyle, then the ambientStreamSurfaceStyle. - Added
StreamMessageComposerThemeandStreamMessageComposerThemeData— a component theme for the composer, also available globally asStreamChatThemeData.messageComposerTheme. - Added
StreamMessageListView.config— an explicitStreamMessageListViewConfigurationper widget, falling back toStreamChatConfigurationData.messageListViewConfiguration. - Added
StreamChatConfigurationData.messageListViewConfiguration— an app-wideStreamMessageListViewConfigurationdefault, passed viaStreamChat.configData. - Added floating support to
StreamChannelHeader,StreamChannelListHeader, andStreamThreadHeader— each resolves the surface style from its per-header theme and republishes it to every slot, including the newStreamBackButton.isFloating. - Added
StreamMessageListViewConfiguration.autoScrollPolicyto control whether and howStreamMessageListViewscrolls to the newest message when a new message arrives. UseStreamAutoScrollPolicy.disabledto fully control scrolling yourself. - Added
onReactionSelectedtoStreamMessageReactionPicker, a context-aware callback that provides theBuildContextfor navigation. - Added an
errorSubtitletoStreamScrollViewErrorWidget, 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 toStreamScrollViewLoadingWidget. - Added
onReactionTaptoStreamMessageItemandStreamMessageListView, reporting the tapped message'sBuildContextand aReactionTapDetailswith the tappedmessageandreaction(the reaction isnullfor a clustered or overflow chip that maps to no single reaction). - Exported
StreamEphemeralMessage, the rowStreamMessageListViewbuilds for ephemeral messages, matching its already-exportedStreamSystemMessageandStreamModeratedMessagesiblings. - Added an
unreadIndicatorparameter toStreamBackButtonthat overlays a widget (typically aStreamUnreadIndicator) on the button's top-end corner. PassStreamUnreadIndicator(excludeCid: cid)to show the total unread count of other channels, orStreamUnreadIndicator.channels(cid: cid)for a single channel's count.
⚠️ Deprecated
- Deprecated
StreamMessageReactionPicker.onReactionPickedin favor ofonReactionSelected. - Deprecated
onReactionsTap(and theOnReactionsTaptypedef) onStreamMessageItemandStreamMessageListViewin favor ofonReactionTap. - Deprecated
height/widthofStreamScrollViewLoadingWidgetin favor ofsize. - Deprecated
StreamBackButton.showUnreadCountandStreamBackButton.channelIdin favor ofunreadIndicator.
🐞 Fixed
- Fixed a failed send surfacing as an unhandled async error when
StreamMessageComposerhas noonError; it is now reported throughFlutterError.reportError. - Fixed the default
StreamChannelloading and error states not being themed or localized;StreamChatnow installs themed, connection-aware defaults, overridable perStreamChannelor viaDefaultStreamChannelBuilders. - 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
StreamTypingIndicatorbriefly showing typing users from a different context (main channel vs. thread) on its first frame. - Fixed the attachment picker throwing a
Tooltipassertion error when a customTabbedAttachmentPickerOptionis added without atitle; 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
StreamBackButtonunread 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.
ChannelLastMessageDatenow reads the date off the message the preview actually shows instead ofChannel.lastMessageAt, which cannot be cleared once a truncation removes every message. - Fixed
StreamMessageListViewjumping several screens when selecting text in a message on desktop or web. TheScrollablePositionedListviewports now account for theiranchoringetOffsetToReveal, 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.colorto override the indicator's icon color.
🔄 Changed
- Improved message text selection experience on desktop and web.
-
10.2.022 Jul 2026Release notes
Open source →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
StreamChannelListControllernot handlingnotificaton.channel_deletedevent 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-Clientto 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
shadowedmessages 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.deletedevents 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
- @peter-matkovski made their first contribution in #2798
Full Changelog: v10.1.0...v10.2.0
Release notes
Open source →⚠️ Changed
- Removed dependency on
media_kitandmedia_kit_video. When running the VideoPlayer on Windows or Linux platforms, you need to addmedia_kitdependency to yourpubspec.yamlfile and create a customStreamVideoPlayerimplementation in thestreamChatComponentBuilders. (#2828)
✅ Added
- Added
AccessibilityTranslationsonTranslations(accessed viacontext.translations.accessibility) — screen-reader labels, tooltips, hints, and live-region announcements. IncludesformatDateTime,formatDuration, andformatRecentDateTimeformatters. - Added
AccessibleMessagePreviewFormatter— an optional interface extendingMessagePreviewFormatterwithformatMessageSemanticsLabelandformatDraftMessageSemanticsLabel.StreamMessagePreviewText,StreamDraftMessagePreviewText, andStreamSendingIndicatornow emit natural-language screen-reader labels for the channel list. - Added optional
semanticsLabeltoStreamChannelAvatar. Group channels emit a default"Group"label; direct-message avatars stay silent. - Added optional
semanticsLabeltoStreamTimestamp. Defaults to a bucketed natural-language phrasing viaAccessibilityTranslations.formatRecentDateTime. - Added a
LastMessagePredicatetypedef for theChannelLastMessageText.lastMessagePredicatefilter. - Added optional
semanticsLabeltoStreamUserAvatar,StreamUserAvatarGroup, andStreamUserAvatarStack. - Made
StreamVideoPlayeroverridable via theStreamComponentFactory(streamChatComponentBuilders(videoPlayer: ...)), with the previous implementation now available asDefaultStreamVideoPlayer.
🐞 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
StreamMessageListViewfiringmarkThreadReadon a reply-less parent, which produced a guaranteed 404 every time the thread view was opened before the first reply. - Fixed dismissing the
StreamMessageListViewunread indicator being ignored while a channel is receiving a rapid burst of messages. - Fixed
StreamTypingIndicatorrebuilding on every typing event by comparing the typing users by id, so it only rebuilds when the set of typing users changes. - Fixed
StreamChannelListTileannouncing avatar initials and unlabeled fragments — now merges into a single accessible row summary with labeled avatar, muted / pinned icons, and unread badge. - Fixed
StreamThreadListTileannouncing 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
attachmentPickerTooltipto state-agnostic "Toggle attachment picker" so screen readers no longer announce "Open attachment picker" while the picker is already expanded. - Fixed
voiceRecordingTextcasing to sentence case ("Voice recording"). - Fixed
formatRecentDateTimehardcoding 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_videodependency with Stream's ownstream_thumbnailplugin, resolving the iOS duplicate-VideoThumbnailPlugin-symbol crash when an app also usesvideo_thumbnail/video_editor(#2360).
-
10.1.023 Jun 2026Release notes
Open source →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
PredefinedFiltersonQueryChannelsby @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.readevents 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
Release notes
Open source →🐛 Fixed
- Fixed a use-after-dispose race condition in
StreamAttachmentPickerController,StreamAudioRecorderController, andStreamAudioPlaylistController: async methods could writevalueafterdispose(), causing anotifyListeners()assertion throw in debug mode. All three now use theDisposeAwareValueNotifiermixin fromstream_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
mentionItemBuilderonStreamMessageComposerandStreamMentionAutocompleteOptionsthat receivesStreamMentionItemPropsand covers every mention kind. Customise globally viastreamChatComponentBuilders(mentionItem: ...)or per-instance via the new constructor parameter. Defaults are rendered byDefaultStreamMentionItem. Also addedonMention*Tapcallbacks onStreamMentionAutocompleteOptions. - Added
StreamMessageListView.onMentionTapandStreamMessageItem.onMentionTap— receives a typedStreamMention(StreamUserMention,StreamChannelMention,StreamHereMention,StreamRoleMention, orStreamGroupMention). StreamMessageComposernow surfaces the hold-to-record hint throughStreamSnackbaranchored above the composer, andStreamChatprovides an app-wideStreamSnackbarScopefallback.- Added
commandValidatorprop onStreamCommandAutocompleteOptionsandStreamCommandPickerfor marking rows as unavailable; disabled rows remain tappable so the caller can surface feedback. StreamMessageComposernow surfaces aStreamSnackbarwhen the user taps a disabled slash command in the picker or autocomplete, explaining why it's blocked.
⚠️ Deprecated
StreamAudioRecorderController.showInfois now deprecated. Show your own snackbar viaStreamSnackbarMessenger.of(context).show(StreamSnackbar(...))instead.RecordStateIdle.messageis now deprecated; the composer no longer reads it.- Deprecated
userMentionsTileBuilderonStreamMessageComposerandmentionsTileBuilderonStreamMentionAutocompleteOptionsin favor ofmentionItemBuilder. - Deprecated
StreamMessageListView.onUserMentionTapandStreamMessageItem.onUserMentionTapin favor ofonMentionTap. - Deprecated
UserListX.search.
🔄 Changed
- Improved the local filtering/sorting logic for the mention suggestions autocomplete.
🐞 Fixed
StreamMessageItem.onUserAvatarTapnow fires when the author avatar is tapped. (#2741)- Added
MessageComposerProps.copyWithso factory overrides can tweak individual props (e.g.useSystemAttachmentPicker) without re-specifying every field. (#2742) StreamMessageContentno longer re-runssetStateon every inherited-widget change when the measured attachment width has not changed. (#2761)
-
10.0.109 Jun 2026Release notes
Open source →What's Changed
- refactor!(ui): add support for customising reaction picker by @xsahil03x in #2248
- refactor(ui)!: improve reaction bubble implementation by @xsahil03x in #2277
- chore(repo): release v10.0.0-beta.1 by @xsahil03x in #2283
- chore(repo): release v10.0.0-beta.2 by @xsahil03x in #2292
- feat(ui)!: refactor poll message into attachment by @xsahil03x in #2296
- refactor(llc): introduce event controller, resolver by @xsahil03x in #2301
- refactor(ui)!: add support for non-attachment types in attachment picker by @xsahil03x in #2293
- chore(repo): remove deprecated classes, methods, and properties by @xsahil03x in #2306
- chore(repo): release v10.0.0-beta.3 by @xsahil03x in #2310
- chore(ui): hide reaction picker bubble border and mask by @xsahil03x in #2316
- feat(llc): add support for sharing live and static locations by @xsahil03x in #2305
- feat(persistence): add support for location persistence by @xsahil03x in #2319
- feat(llc, ui, persistence)!: add support for reaction emoji_code by @xsahil03x in #2326
- chore(repo): release v10.0.0-beta.4 by @xsahil03x in #2333
- fix(llc): fixed skipPush and skipEnrichUrl not preserving during message send or update retry by @VladShturma in #2330
- refactor(ui): introduce showStreamDialog and replace showStreamMessageModal by @xsahil03x in #2344
- chore(repo): release v10.0.0-beta.5 by @xsahil03x in #2354
- fix(ui): ensure dialog confirmation for delete/flag actions by @xsahil03x in #2384
- fix(ui): enable sending reply in threads for users with sendReply capability by @xsahil03x in #2385
- chore(repo): release v10.0.0-beta.6 by @xsahil03x in #2393
- feat(llc, ui): add delete message for me by @xsahil03x in #2394
- feat(persistence): add deletedForMe and deletedMessages fields by @xsahil03x in #2395
- feat(llc)!: add standalone file/image upload/remove methods by @xsahil03x in #2396
- chore(repo): release v10.0.0-beta.7 by @xsahil03x in #2417
- feat(llc, persistence): handle user.messages.deleted event by @xsahil03x in #2423
- feat(ui): add
attachmentPickerOptionsBuilderby @xsahil03x in #2415 - chore(repo): release v10.0.0-beta.8 by @xsahil03x in #2425
- feat(ui)!: enhance onAttachmentTap with fallback to default behavior by @xsahil03x in #2426
- feat(llc): Store endAt in UTC by @xsahil03x in #2428
- feat(ui): add reactionIndicatorBuilder for custom reaction indicators by @xsahil03x in #2440
- chore(repo): release v10.0.0-beta.9 by @xsahil03x in #2446
- chore(repo): release v10.0.0-beta.10 by @xsahil03x in #2458
- chore(repo): release v10.0.0-beta.11 by @xsahil03x in #2470
- fix(ui): fix regression in emoji_code support for reactions by @xsahil03x in #2474
- refactor(ui)!: replace ArgumentError with typed errors by @xsahil03x in #2479
- chore(repo): release v10.0.0-beta.12 by @xsahil03x in #2493
- feat(repo)!: design refresh by @xsahil03x in #2503
- chore(repo): release v10.0.0-beta.13 by @renefloor in #2609
- fix(repo): release of stream_chat_flutter by @renefloor in #2610
- feat(samples): implement
SampleAppConfigand modernize UI architechture by @xsahil03x in #2614 - refactor(ui): attachment upload and gallery improvements by @xsahil03x in #2612
- feat(ui): Simplify icon set by @renefloor in #2619
- fix(ui): increase max width for ephemeral Giphy messages by @xsahil03x in #2615
- refactor(ui): redesign and modernize poll creator components by @xsahil03x in #2611
- fix(ui): qa issues by @xsahil03x in #2620
- chore(ui): Cleanup message theme and usages by @renefloor in #2621
- chore(ui): Cleanup channel preview theme by @renefloor in #2622
- fix(ui, core, localizations): more QA fixes by @xsahil03x in #2624
- refactor(ui): reduce max visible option count for polls to 5 by @xsahil03x in #2627
- feat(ui): thread list banner redesign by @Brazol in #2608
- feat(ui): Added exports for theming support by @renefloor in #2628
- docs(ui): screenshots by @renefloor in #2559
- fix(ui, persistence, samples): more QA fixes by @xsahil03x in #2629
- feat(ui, localization): redesign poll dialogs as modal bottom sheets by @xsahil03x in #2630
- docs(ui): update screenshots by @renefloor in #2631
- refactor(ui): migrate poll sheets to showStreamSheet by @xsahil03x in #2634
- docs(ui): screenshot background by @renefloor in #2635
- fix(llc, core, ui, localization): latest QA by @xsahil03x in #2636
- refactor(sample, ui): redesign channel info and detail sheet by @xsahil03x in #2638
- fix(llc, ui, sample): more v10 QA fixes by @xsahil03x in #2640
- refactor(ui, sample)!: align message item naming with android and ios sdks by @xsahil03x in #2643
- feat(ui): Move draftlist from sdk to sample app. by @renefloor in #2637
- feat(UI): rename message input by @renefloor in #2642
- fix(ui, core): rename input controller to composer controller by @renefloor in #2646
- refactor(ui, localization, sample)!: redesign media viewer by @xsahil03x in #2645
- chore(deps)!: bump dep floors, widen plus-plugin majors, migrate file_picker 11 by @xsahil03x in #2644
- chore(ui): theme cleanup by @Brazol in #2663
- feat(ui): Improve slow mode UI by @renefloor in #2666
- fix(llc): require attachment fileSize only when there is a file by @Brazol in #2673
- docs(ui): make docs snapshots authentic to the production SDK by @xsahil03x in #2676
- chore(sample): Set appversion to main sdk version by @renefloor in #2678
- Feat(ui): simplify messagelist constructor by @renefloor in #2674
- docs(ui): showcase, localization, theming, and composer snapshots by @renefloor in #2649
- chore(repo): merge master into v10.0.0 by @xsahil03x in #2682
- Add snapshots for autocomplete by @renefloor in #2687
- fix(llc)!: prevent external mutation of ClientState collections by @xsahil03x in #2686
- fix(ui): Remove use of svg icon by @renefloor in #2697
- docs(ui)!: correct migration docs; remove dead MessageDetails by @renefloor in #2680
- docs(ui): update flutter chat tutorial by @renefloor in #2696
- feat(ui): Update chat sdk defaults by @renefloor in #2691
- fix(ui): apply filter of supported emoji by @renefloor in #2698
- fix(ui): preserve composer state when draft stream emits initial null by @xsahil03x in #2699
- feat(ui): sync default message actions with design system by @xsahil03x in #2701
- chore(sample): refresh app icons by @xsahil03x in #2707
- fix(ui): Remove reactionOverlap from config by @renefloor in #2708
- fix(ui): map xxl avatar to xxl online indicator size by @xsahil03x in #2711
- feat(ui): factory slots for message item leading, header, footer by @xsahil03x in #2710
- feat(llc, ui, localization)!: AppSettings API and AppSettings-driven attachment validation by @renefloor in #2706
- chore(deps): bump jiffy to ^6.4.5 by @xsahil03x in #2719
- chore(repo): bump min Flutter to 3.41.0 and Dart SDK to 3.11.0 by @xsahil03x in #2721
- chore(ui): Deprecate related icon classses by @renefloor in #2722
- chore(samples): update launcher icons size for android by @xsahil03x in #2723
- rename config and themedata by @renefloor in #2725
- fix(persistence): Ensure
messageLimitis respected ingetChannelStatesby @VelikovPetar in #2717 - docs(ui): add more docs snapshots by @renefloor in #2716
- chore(ui): update core_flutter package by @renefloor in #2729
- Merge
mastertov10.0.0(08.06.2026) by @VelikovPetar in #2731 - docs(ui,llc): update sdk readmes by @renefloor in #2724
- feat(repo)!: v10.0.0 by @xsahil03x in #2499
- chore(repo): release v10.0.1 by @renefloor in #2735
Full Changelog: v9.25.0...v10.0.1
Release notes
Open source →🐞 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. StreamUserAvatarwithStreamAvatarSize.xxlnow usesStreamOnlineIndicatorSize.xxl(20px) instead ofxl(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 elementon 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.
StreamMessageComposerno longer clobbers pre-populated composer state (text, quoted message, attachments) when the channel's draft stream emits its initialnull(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
StreamMessageComposernow validates attachments against the app'sAppSettings(configured in the Stream Dashboard) — enforcing size, extension/MIME, and count rules. PassonErrorto handle the typedAttachmentLimitReachedError,AttachmentTooLargeError, orAttachmentBlockedErrorinstead 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/UnblockUserdefault message actions, dispatching toStreamChatClient.blockUser/unblockUser.
🔄 Internal / Non-breaking
-
Reordered the default message actions to match the design system.
-
Renamed default English
threadReplyLabel('Thread'→'Thread Reply') andmarkAsUnreadLabel('Mark as Unread'→'Mark Unread'). -
StreamThreadHeaderdefault title now sources from the newthreadLabeltranslation key instead ofthreadReplyLabel, restoring the short'Thread'header. -
ReactionIconResolver.supportedReactionsis now wired to the full emoji picker sheet opened by the "+" button inStreamMessageReactionPickerand the add-emoji chip inReactionDetailSheet. OverridesupportedReactionson 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 bystream_chat_flutterand exported from this package. They were previously supplied bystream_core_flutter. The public API ofStreamMessageComposer/StreamChatMessageInputand its sub-components is unchanged. -
Re-export
StreamAvatarThemeandStreamAvatarThemeDatafromstream_core_flutterso consumers can theme avatars without adding a separatestream_core_flutterimport. -
Added
messageLeading,messageHeader, andmessageFooterfactory slots tostreamChatComponentBuildersfor overriding the message item's avatar, annotations, or metadata row without replacing the wholemessageItem. -
Bumped
jiffyto^6.4.5to pick up cached locale andDateFormatlookups for cheaper relative-time formatting. -
Raised minimum Flutter to
>=3.41.0and Dart SDK to^3.11.0.
🛑️ Breaking
StreamChatConfigurationData.draftMessagesEnablednow defaults totrue. Draft messages are enabled out of the box; passdraftMessagesEnabled: falseto opt out.StreamChatConfigurationData.enforceUniqueReactionsnow defaults tofalse. Users can add multiple distinct reaction types to a message by default; passenforceUniqueReactions: trueto restore the previous behaviour.StreamMessageComposer.enableVoiceRecordingnow defaults totrue. The voice recording button is shown out of the box; passenableVoiceRecording: falseto opt out.StreamMessageListViewhad its large set of configuration and builder parameters reorganized. Behavior flags (e.g.swipeToReply,markReadWhenAtTheBottom,showScrollToBottom,reverse,paginationLimit,scrollPhysics, etc.) moved toStreamMessageListViewConfiguration, passed directly asStreamMessageListView.config. Custom builder callbacks (headerBuilder,footerBuilder,loadingBuilder,emptyBuilder,errorBuilder,messageListBuilder,parentMessageBuilder,dateDividerBuilder,floatingDateDividerBuilder,threadSeparatorBuilder,unreadMessagesSeparatorBuilder,scrollToBottomBuilder,paginationLoadingIndicatorBuilder,spacingWidgetBuilder,systemMessageBuilder,ephemeralMessageBuilder,moderatedMessageBuilder) moved toStreamMessageListViewBuilders, passed directly asStreamMessageListView.builders. ThemessageBuilderparameter is back at the root of the constructor as before.- Bumped
file_pickerto^11.0.0to resolve #2599. Apps depending onfile_pickerdirectly must also upgrade past11.0.0, which replaces the instance-basedFilePicker.platform.*API with staticFilePicker.*methods. - Renamed
StreamChat.streamChatThemeData→StreamChat.themeDataandStreamChat.streamChatConfigData→StreamChat.configData. TheStreamChatState.streamChatConfigDatagetter is nowStreamChatState.configData. - Renamed
StreamMessageComposer.messageInputControllerparameter tomessageComposerController. - Removed
StreamDraftListView,StreamDraftListTile,StreamDraftListTileTheme, andStreamDraftListTileThemeDatafrom the SDK. Also removedStreamChatThemeData.draftListTileTheme. Refer to the sample app for a reference implementation usingStreamDraftListControllerandPagedValueListView. - Renamed
StreamMessageComposerInput→StreamMessageComposerInputCenter(andDefaultStreamMessageComposerInput→DefaultStreamMessageComposerInputCenter). The nameStreamMessageComposerInputis now the input container widget (assembles header, leading, center, trailing). - Renamed
MessageComposerInputProps→MessageComposerInputCenterProps. The nameMessageComposerInputPropsnow refers to the new container widget's props. - Renamed
messageComposerInputbuilder key instreamChatComponentBuilders→messageComposerInputCenter. The namemessageComposerInputnow overrides the whole input container. - Replaced
StreamMessageInput.hintGetterwithplaceholderBuilderover a sealedMessageInputPlaceholder. Seemigrations/redesign/message_composer.md. - Removed
StreamMessageListView.unreadIndicatorBuilder; useStreamComponentFactory.jumpToUnreadButton. - Renamed
UnreadIndicatorButton.onTap→onJumpTap. - Renamed stream icons to remove the size suffix from the icon names.
- Removed
StreamAttachmentUploadStateBuilder.successBuilderand theSuccessBuildertypedef (unreachable). - Removed
StreamFileAttachmentThumbnail; useStreamImageAttachmentThumbnail/StreamVideoAttachmentThumbnailorStreamFileTypeIcon.fromMimeType(...). - Removed
StreamMessageThemeData(ownMessageTheme / otherMessageTheme) andStreamMessageInputThemeData(messageInputTheme). - Removed
StreamChannelPreviewThemeData(channelPreviewTheme). - Removed the public
MessageDetailsclass. The newmessageBuildersignature no longer receives it — useStreamChat.of(context).currentUserandStreamMessageLayout.of(context)instead. Seemigrations/redesign/message_list.md. - Renamed
StreamPollOptionsDialog/StreamPollResultsDialog/StreamPollOptionVotesDialog/StreamPollCommentsDialog(and theirshow*helpers and...DialogThemeDatatypes) →...Sheet. They now render as modal bottom sheets. - Replaced
StreamPollCreatorDialog/StreamPollCreatorFullScreenDialog(andshowStreamPollCreatorDialog) with a singleStreamPollCreatorSheet(showStreamPollCreatorSheet) that renders as a modal bottom sheet, matching the other poll sheets.StreamPollCreatorWidgetgained an optionalscrollControllerparameter. - Removed
primaryActionStyleandsecondaryActionStylefromStreamPollCreatorThemeData. Use the newsheetHeaderStyle.trailingStyle/sheetHeaderStyle.leadingStyleinstead — seemigrations/redesign/attachments_and_polls.md. - Redesigned
StreamPollOptionsSheetThemeData,StreamPollResultsSheetThemeData,StreamPollOptionVotesSheetThemeDataandStreamPollCommentsSheetThemeData— seemigrations/redesign/attachments_and_polls.md. - Renamed
Translations.questionsLabelgetter →questionLabel({bool isPlural = false})method. - Renamed
Translations.endVoteConfirmationText→endVoteConfirmationTitle; English default changed to'End This Poll?'. - Renamed
Translations.slowModeOnLabelgetter →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. Seemigrations/redesign/message_composer.md. - Reworded
Translations.endVoteLabelEnglish default to'End Poll'. - Removed
AttachmentButton,StreamQuotedMessageWidget,EditMessageSheet,StreamMessageSendButtonandDesktopReactionsBuilder. - Removed
StreamChannelGridView,StreamChannelGridTileandStreamMessageSearchGridView. StreamMessageActionConfirmationModal.cancelActionTitle/confirmActionTitleare now nullable and fall back toTranslations.cancelLabel/confirmLabel.- Renamed
Translations.attachmentsUploadProgressTextparameterremaining→completed. - Updated several
Translationsdefault strings and added new abstract members — seemigrations/redesign/localizations.md. - Renamed
MuteIconPosition→AttributePosition(valuestitle→inlineTitle,subtitle→trailingBottom) andStreamChannelListItemThemeData.muteIconPosition→attributePosition. Now controls both mute and pin icons inStreamChannelListTile. - Removed
AttachmentModalSheet,ErrorAlertSheetandStreamChannelInfoBottomSheet. - Removed
StreamMarkdownMessage; useStreamMessageText(re-exported fromstream_core_flutter) instead. - Renamed message item components to align with Android Compose and SwiftUI conventions:
StreamMessageWidget→StreamMessageItem(file moved tomessage_item.dart).DefaultStreamMessage→DefaultStreamMessageItem.StreamMessageWidgetProps→StreamMessageItemProps.StreamMessageWidgetBuildertypedef →StreamMessageItemBuilder.StreamMessageAnnotations→StreamMessageHeader.StreamMessageMetadata→StreamMessageFooter.ParseAttachments→StreamMessageAttachments.streamChatComponentBuilders(messageWidget: ...)→messageItem: ....StreamMessageContent(annotation: ..., metadata: ...)→header: ..., footer: .... Seemigrations/redesign/message_widget.md.
- Redesigned the full-screen media viewer:
- Replaced
StreamFullScreenMedia(and itsStreamFullScreenMediaBuilder/FullScreenMediaWidget/FullScreenMediaDesktop/fsm_stubvariants) with a single cross-platformStreamMediaGalleryPreview. RenamedmediaAttachmentPackages→attachments,startIndex→initialIndex; droppeduserName,sentAt,onReplyMessage,onShowMessageandattachmentActionsModalBuilderfrom its surface. - Renamed
StreamGalleryHeader→StreamMediaGalleryPreviewHeaderandStreamGalleryFooter→StreamMediaGalleryPreviewFooter, rebuilt onStreamAppBar/StreamBottomAppBar. Both shrank to atitle(+ optionalsubtitle) and minimal action callbacks; the more-actions overflow header was removed. - Renamed
StreamAttachmentPackage→StreamMediaGalleryAttachmentand added aMessage.toMediaGalleryAttachments({filter})extension. - Removed
VideoPackage,DesktopVideoPackageandGalleryNavigationItemfrom the public API — each preview page now owns its own player state internally. - Removed
StreamMessageItem.onShowMessage/attachmentActionsModalBuilderand the matchingStreamMessageListView/StreamMessageContentprops; those callbacks no longer have a destination after the gallery overflow was removed. - Removed
StreamChatThemeData.galleryHeaderTheme,StreamChatThemeData.galleryFooterTheme(and theimageFooterTheme:constructor parameter) and theStreamGalleryFooterThemeDataclass. Header / footer chrome now flows throughStreamAppBarThemeData/StreamBottomAppBarThemeData. - Removed the unused
StreamAvatarThemeData. Seemigrations/redesign/media_viewer.md.
- Replaced
- Removed
StreamMessageComposer.maxAttachmentSize(and thekDefaultMaxAttachmentSizeconstant). Per-type size limits come fromStreamChatClient.appSettings(configured in the Stream Dashboard). - Removed
StreamMessageComposer.onAttachmentLimitExceedand theAttachmentLimitExceedListenertypedef. UseonErrorfor custom error handling. StreamMessageComposer.attachmentLimitis now a non-nullableintdefaulting to30(the per-message attachment cap). Previouslyint?defaulting tonull("no limit").StreamAttachmentPickerControllerconstructor now takes a singlevalidator: StreamAttachmentValidatorparameter (replaces the previous size / limit / config parameters).
✅ Added
- Video attachments use the shared
StreamVideoPlayIndicatorfor the play-button overlay. - Redesigned
StreamSystemMessage/StreamModeratedMessagewith a pill-shaped style and visual customisation props. - Added visual customisation props to
ThreadSeparatorandUnreadMessagesSeparator. - Added
StreamUnsupportedAttachmentandUnsupportedAttachmentBuilderfor unrecognised attachment types. - Added
StreamMediaGallery— a 3-up thumbnail grid that pairs withStreamMediaGalleryPreview. Each tile surfaces the sender's avatar (StreamUserAvatar) plus a video duration badge for video attachments. Used byStreamMediaGalleryPreviewFooter's gallery-grid sheet and ready to drop into channel-level media listings. Customisable viastreamChatComponentBuilders(mediaGallery: ...). - Added
StreamMediaGalleryPreview— the redesigned full-screen swipeable viewer. Built on the design system'sStreamMediaViewer,StreamAppBarandStreamBottomAppBar. Customisable viastreamChatComponentBuilders(mediaGalleryPreview: ...). ExposesStreamMediaGalleryPreviewScopeso per-page widgets (e.g. videos) can react to the active page. - Added
StreamVideoPlayer— the platform-aware video backend used byStreamMediaGalleryPreview. 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
StreamQuotedMessageandStreamQuotedMessageThemeDatafor the quoted message preview. MessagePreviewFormatternow rendersAttachmentType.urlPreviewmessages with a link icon and caption / OG title /linkAttachmentTextfallback.- Added
StreamPollCardStyle,StreamPollQuestionStyleandStreamPollOptionVotesStyleshared style classes for the poll sheets. - Added a total vote count footer and per-option "View all" action to
StreamPollResultsSheet. - Added a
sheetHeaderStylefield to each poll sheet theme data (includingStreamPollCreatorThemeData). - Re-exported
StreamSheetHeader,StreamSheetHeaderStyle,StreamSheetHeaderThemeandStreamSheetHeaderThemeDatafromstream_core_flutter. - Re-exported
showStreamSheet,StreamSheet,StreamSheetDragHandle,StreamSheetRoute,StreamSheetTransition,StreamSheetScrollableWidgetBuilder,StreamSheetThemeandStreamSheetThemeDatafromstream_core_flutter. Poll sheets (StreamPollOptionsSheet,StreamPollResultsSheet,StreamPollOptionVotesSheet,StreamPollCommentsSheet,StreamPollCreatorSheet) now present as Stream-styled modal bottom sheets viashowStreamSheet. Seemigrations/redesign/attachments_and_polls.md. - Re-exported
StreamMessageAttachmentandStreamMessageAttachmentStylefromstream_core_flutter. - Added a
BoxFit? fitparameter toThumbnailSizeCalculator.calculate(null defaults toBoxFit.scaleDown, matchingpaintImage) so callers usingcover/fillget a bitmap large enough to render without upscale blur. - Added
Translations.totalVoteCountLabel({int? count}),viewAllLabel,pollVotesLabel,endVoteConfirmationMessageandquestionLabel({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
StreamScrollViewLoadMoreErrorandStreamScrollViewLoadMoreIndicatorfrom the public API. - Exported
StreamTimestamp,DateFormatter,formatDateandformatRecentDateTimefrom the public API. - Added
DateTimeComparisonUtilsextension onDateTime(isToday,isYesterday,isWithinLastMinute,isWithinLastWeek,isInSameYear,isSame(other, unit:)) and theDateTimeUnitenum (year/month/day/hour/minute/second/millisecond/microsecond). All getters compare in local time and read the current instant viapackage:clock, so they're testable underwithClock(...).
🔄 Changed
- Widened
share_plusto>=12.0.2 <14.0.0so 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.backgroundKeepAlivefrom 1 minute to 15 seconds, matchingStreamChatCore. Seestream_chat_flutter_corechangelog for rationale. StreamPhotoGalleryTilenow 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 explicitthumbnailSizeto override.formatRecentDateTimereworked 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 emittedformatDate-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
StreamCommandAutocompleteOptionsandStreamMentionAutocompleteOptionsexpanding 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
updateMessageinstead ofsendMessage. - 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
EndOfFrameCallbackWidgetshowing 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
StreamPhotoGalleryTilemissing 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.didUpdateWidgetnow compares the projected playlist (content-based equality on track uri / title / duration / waveform) instead of the rawAttachmentlist, so re-syncs that mint fresh client-sideAttachmentUUIDs no longer trip a needlessupdatePlaylist()mid-playback. - Fixed
PollAddCommentDialogandPollSuggestOptionDialogaccepting whitespace-only or unchanged submissions; the confirm action now disables when the trimmed text is empty or matches the initial value. - Fixed
StreamPhotoGalleryTileusing a hand-rolled icon as its loading placeholder and silently rendering nothing on decode failure. Now uses the sharedStreamImageLoadingPlaceholderwhile loading andStreamImageErrorPlaceholderif 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.
-
10.0.028 Jan 2026 withdrawnNothing published for this version
-
10.0.0-beta.1310 Apr 2026 pre-releaseRelease notes
Open source →What's Changed
- feat(repo)!: design refresh by @xsahil03x in #2503
- chore(repo): release v10.0.0-beta.13 by @renefloor in #2609
Full Changelog: v10.0.0-beta.12...v10.0.0-beta.13
Release notes
Open source →🛑️ 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.
-
10.0.0-beta.1228 Jan 2026 pre-releaseRelease notes
Open source →🐞 Fixed
- Fixed regression in
emoji_codesupport for reactions.
🛑️ Breaking
- Replaced
ArgumentErrorwith typed errors inStreamAttachmentPickerController:AttachmentTooLargeError(file size exceeds limit) andAttachmentLimitReachedError(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.
- Fixed regression in
-
10.0.0-beta.1110 Dec 2025 pre-release -
10.0.0-beta.1003 Dec 2025 pre-release -
10.0.0-beta.918 Nov 2025 pre-releaseRelease notes
Open source →✅ Added
-
Added
reactionIndicatorBuilderparameter toStreamMessageWidgetfor 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
reactionIconBuilderandbackgroundColorparameters toStreamReactionPicker. -
Exported
StreamReactionIndicatorand related components (ReactionIndicatorBuilder,ReactionIndicatorIconBuilder,ReactionIndicatorIcon,ReactionIndicatorIconList).
🛑️ Breaking
-
onAttachmentTapcallback signature changed to includeBuildContextas first parameter and returnsFutureOr<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. }, ) -
ReactionPickerIconListconstructor changed: removedmessageparameter, changedreactionIconstype toList<ReactionPickerIcon>, renamedonReactionPickedtoonIconPicked.
For more details, please refer to the migration guide.
- Included the changes from version
9.20.0.
-
-
10.0.0-beta.829 Oct 2025 pre-releaseRelease notes
Open source →🛑️ Breaking
-
onCustomAttachmentPickerResulthas been removed. UseonAttachmentPickerResultwhich returnsFutureOr<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 }, ) -
customAttachmentPickerOptionshas been removed. UseattachmentPickerOptionsBuilderto 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.
-
-
10.0.0-beta.715 Oct 2025 pre-releaseRelease notes
Open source →✅ Added
-
Added support for
StreamMessageWidget.deletedMessageBuilderto customize the deleted message UI. -
Included the changes from version
9.18.0.
-
-
10.0.0-beta.624 Sep 2025 pre-releaseRelease notes
Open source →🐞 Fixed
-
Fixed users with
sendReplycapability 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.
-
-
10.0.0-beta.513 Aug 2025 pre-release -
10.0.0-beta.425 Jul 2025 pre-releaseRelease notes
Open source →✅ Added
-
Added
emojiCodeproperty toStreamReactionIconto 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.
-
-
10.0.0-beta.317 Jul 2025 pre-releaseRelease notes
Open source →🛑️ Breaking
- Deprecated API Cleanup: Removed all deprecated classes, methods, and properties for the v10 major release:
- Removed Classes:
DmCheckbox(useDmCheckboxListTile),StreamIconThemeSvgIcon(useStreamSvgIcon),StreamVoiceRecordingThemeData(useStreamVoiceRecordingAttachmentThemeData),StreamVoiceRecordingLoading,StreamVoiceRecordingSlider(useStreamAudioWaveformSlider),StreamVoiceRecordingPlayer(useStreamVoiceRecordingAttachment),StreamVoiceRecordingListPlayer(useStreamVoiceRecordingAttachmentPlaylist) - Removed Properties:
reactionIconsandvoiceRecordingThemefromStreamChatTheme,isThreadConversationfromFloatingDateDivider,idleSendButtonandactiveSendButtonfromStreamMessageInput,isCommandEnabledandisEditEnabledfromStreamMessageSendButton,assetName,width, andheightfromStreamSvgIcon - Removed Constructor Parameters:
useNativeAttachmentPickerOnMobilefrom various components,allowCompressionfromStreamAttachmentHandler.pickFile()andStreamFilePicker(usecompressionQualityinstead),cidfromStreamUnreadIndicatorconstructor - Removed Methods:
lastUnreadMessage()from message list extensions (useStreamChannel.getFirstUnreadMessage),loadBuffer()and_loadAsync()fromStreamVideoThumbnailImage - StreamSvgIcon Refactoring: Removed 80+ deprecated factory constructors. Use
StreamSvgIcon(icon: StreamSvgIcons.iconName)instead of factory constructors likeStreamSvgIcon.add()
- Removed Classes:
PollMessagewidget has been removed and replaced withPollAttachmentfor better integration with the attachment system. Polls can now be customized throughPollAttachmentBuilderor by creating custom poll attachment widgets via the attachment builder system.AttachmentPickerTypeenum has been replaced with a sealed class to support extensible custom types like contact and location pickers. Use built-in types likeAttachmentPickerType.imagesor define your own viaCustomAttachmentPickerType.StreamAttachmentPickerOptionhas been replaced with two sealed classes to support layout-specific picker options:SystemAttachmentPickerOptionfor system pickers (e.g. camera, files) andTabbedAttachmentPickerOptionfor tabbed pickers (e.g. gallery, polls, location).showStreamAttachmentPickerModalBottomSheetnow returns aStreamAttachmentPickerResultinstead ofAttachmentPickerValuefor improved type safety and clearer intent handling.StreamMobileAttachmentPickerBottomSheethas been renamed toStreamTabbedAttachmentPickerBottomSheet, andStreamWebOrDesktopAttachmentPickerBottomSheethas been renamed toStreamSystemAttachmentPickerBottomSheetto better reflect their respective layouts.
For more details, please refer to the migration guide.
✅ Added
-
Added
extraDatafield toAttachmentPickerValueto support storing and retrieving custom picker state (e.g. tab-specific config). -
Added
customAttachmentPickerOptionstoStreamMessageInputto allow injecting custom picker tabs like contact and location pickers. -
Added
onCustomAttachmentPickerResultcallback toStreamMessageInputto handle results returned by custom picker tabs. -
Included the changes from version
9.14.0.
- Deprecated API Cleanup: Removed all deprecated classes, methods, and properties for the v10 major release:
-
10.0.0-beta.230 Jun 2025 pre-release -
10.0.0-beta.118 Jun 2025 pre-releaseRelease notes
Open source →🛑️ Breaking
StreamReactionPickernow requires reactions to be explicitly handled viaonReactionPicked. (Automatic handling is no longer supported.)StreamMessageActionis now generic(StreamMessageAction<T>), enhancing type safety. Individual onTap callbacks have been removed; actions are now handled centrally by widgets likeStreamMessageWidget.onCustomActionTapor modals using action types.StreamMessageReactionsModalno longer requires themessageThemeparameter. The theme now automatically derives from thereverseproperty.StreamMessageWidgetno longer requires theshowReactionTailparameter. 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
StreamMessageActionsBuilderwhich provides a list of actions to be displayed in the message actions modal. - Added new
StreamMessageActionConfirmationModalfor confirming destructive actions like delete or flag. - Added new
StreamMessageModalandshowStreamMessageModalfor 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
desktopOrWebparameter toPlatformWidgetBuilderto allow specifying a single builder for both desktop and web platforms. - Added
reactionPickerBuildertoStreamMessageActionsModal,StreamMessageReactionsModal, andStreamMessageWidgetto enable custom reaction picker widgets. - Added
StreamReactionIcon.defaultReactionsproviding a predefined list of common reaction icons. - Exported
StreamMessageActionsModalandStreamModeratedMessageActionsModalwhich are now based onStreamMessageModalfor consistent styling and behavior.
-
9.28.014 Aug 2026Release notes
Open source →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_updatedsort by @VelikovPetar in #2892 - fix(llc): null ordering for
pinned_atandlast_message_atchannel 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
-
9.27.022 Jul 2026Release notes
Open source →What's Changed
- feat(llc, core, persistence): Add support for
PredefinedFiltersonQueryChannels(v9) by @VelikovPetar in #2775 - fix(llc): suppress
EquatableMixindeprecation warning inStreamChatErrorby @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-Clientto 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
StreamChannelListControllernot handlingnotification.channel_deletedevent (v9). by @VelikovPetar in #2800 - fix(ui): skip markThreadRead for reply-less thread parents (v9) by @xsahil03x in #2808
- fix(ui): Fix
shadowedmessages 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.deletedevents 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
- feat(llc, core, persistence): Add support for
-
9.26.023 Jun 2026Release notes
Open source →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
UpsertPushPreferencesResponsenull 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.readevents 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
-
9.25.005 Jun 2026Release notes
Open source →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
DateTimeas 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
- @TheoGermain made their first contribution in #2700
Full Changelog: v9.24.0...v9.25.0
Release notes
Open source →🐞 Fixed
- Fixed
ScrollablePositionedList.scrollTotaking the long-distance teleport path when called immediately after mount (beforeitemPositionshad been published). It now waits one frame for layout, then animates the real pixel distance. - Fixed
StreamMessageListViewnot auto-scrolling to the bottom on the user's own outgoing message until the server confirmed it. - Fixed
StreamMessageListViewtrippingA RenderViewport exceeded its maximum number of layout cyclesunder mid-list anchored layout.ScrollablePositionedListnow preserves the scroll offset across reanchors instead of resetting it to 0. - Fixed
RenderBox was not laid outthrown byMessageCard._updateWidthLimitwhen 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 ahasSizeguard before readingRenderBox.size.
🚀 Improved
ScrollablePositionedList.paddingnow acceptsEdgeInsetsGeometry(resolved againstDirectionality), andscrollTolands the target at the content-area edge by adjusting for leading padding.StreamChat.ofnow resolves viaStreamStateScopeinstead offindAncestorStateOfType, replacing an O(tree-depth) element walk with an O(1) inherited-widget lookup. Callers and behavior are unchanged.
-
9.24.019 May 2026Release notes
Open source →What's Changed
- feat(repo)!: v10.0.0 by @xsahil03x in #2280
- chore(repo): release v10.0.0 by @xsahil03x in #2494
- revert(repo): "release v10.0.0 (#2494, #2280)" by @xsahil03x in #2498
- test(ui): fix tests by @xsahil03x in #2500
- chore(ci): add feat/design-refresh branch for internal distribution by @xsahil03x in #2504
- chore(repo): Fix build and
panareports by @VelikovPetar in #2656 - fix(llc): forward
filterparam inClient.queryDraftsby @VelikovPetar in #2647 - chore(ui): drop the bundled IANA TLD list by @xsahil03x in #2654
- ci(repo): Resolve local setup related issues by @testableapple in #2650
- perf(repo): cut StreamMessageListView UI-thread work under flood load by @xsahil03x in #2651
- perf(llc): faster channel state ingest by @xsahil03x in #2653
- fix(llc, core): coalesce queryChannels on flaky-network reconnects by @xsahil03x in #2652
- fix(llc): bump jose floor to 0.3.5+1 for CVE-2026-34240 by @xsahil03x in #2658
- test(llc): de-flake queryChannels persistence verifies by @xsahil03x in #2659
- chore(repo): fix ci issues for flutter 3.44 by @xsahil03x in #2667
- chore(samples): replace Sentry with Firebase Crashlytics by @xsahil03x in #2665
- chore(llc): tolerate duplicate-keyed inputs in
SortedListX.mergeby @xsahil03x in #2660 - chore(repo): release v9.24.0 by @xsahil03x in #2671
New Contributors
- @VelikovPetar made their first contribution in #2656
- @testableapple made their first contribution in #2650
Full Changelog: v9.23.0...v9.24.0
Release notes
Open source →✅ Added
StreamMessageListViewnow acceptsmaximumMessageLimitto cap the loaded message list. SeeMessageListCorefor the trim semantics.
🐞 Fixed
- Fixed
StreamMessageListViewthread page crashing withStateErrorwhen 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'smarkRead/markThreadReadnow 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 localunreadCount = 0short-circuit on own-message send was removed — the leading-edge mark plusreadStreamupdates now keep the unread badge in sync without an extrasetState.
-
9.23.028 Jan 2026Release notes
Open source →🐞 Fixed
- Fixed
StreamChannelAvatarcrashing withRangeErrorwhen 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]
- Fixed
-
9.22.010 Dec 2025Release notes
Open source →✅ Added
- Added haptic and system sound feedback for voice recording interactions. Feedback can be
customized by extending
AudioRecorderFeedbackor usingAudioRecorderFeedbackWrapperwith 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]
- Added haptic and system sound feedback for voice recording interactions. Feedback can be
customized by extending
-
9.21.003 Dec 2025Release notes
Open source →🐞 Fixed
- Fixed StreamGallery not respecting the safe area for fullscreen media. [#2454]
-
9.20.018 Nov 2025Release notes
Open source →✅ Added
- Added delivered status to
SendingIndicator(double grey check for delivered, double accentPrimary check for read). - Added
isMessageDeliveredparameter toSendingIndicatorwidget. - Added
MessagePreviewFormatterinterface andStreamMessagePreviewFormatterimplementation for customizing message preview text formatting in channel lists and draft messages. - Added
messagePreviewFormatterproperty toStreamChatConfigurationDatafor 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
onLinkTapcallback instead of the actualhref. - Fixed high memory usage when displaying multiple image attachments. [#2228]
- Added delivered status to
-
9.19.029 Oct 2025Release notes
Open source →✅ Added
- Added
StreamMessageListView.floatingDateDividerBuilderin order to specifically customize the floating date divider. - Added spacing to typing indicator.
- Added
-
9.18.015 Oct 2025Release notes
Open source →🐞 Fixed
- Fixed
StreamMessageListViewnot marking thread messages as read when scrolled to the bottom of the list. - Fixed
StreamMessageInputnot validating draft messages before creating/updating them.
- Fixed
-
9.17.024 Sep 2025Release notes
Open source →✅ Added
- Added
messageBackgroundGradientproperty toStreamMessageThemeDatafor gradient message backgrounds.
🐞 Fixed
- Fixed
.replaceMentionsnot 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
GradientAvatarsfor users with same-length IDs would have identical colors. [#2369]
- Added
-
9.16.013 Aug 2025Release notes
Open source →🐞 Fixed
- Fixed context menu being truncated and scrollable on web when there was enough space to display it fully. [#2317]
- Fixed
StreamMessageInputcooldown resume error if channel state is not yet initialized. [#2338]
✅ Added
- Added
paddingandtextInputMargintoStreamMessageInputto allow fine-tuning the layout.
-
9.15.025 Jul 2025Release notes
Open source →✅ Added
- Added
bottomandbottomOpacityto theStreamChannelHeaderwidget. - Added
StreamChat.maybeOf()method for safe context access in async operations.
🐞 Fixed
- Fixed
StreamMessageInputcrashes with "Null check operator used on a null value" when async operations continue after widget unmounting.
- Added
-
9.14.017 Jul 2025Release notes
Open source →🐞 Fixed
- Fixed
StreamMessageInputtries to expand to full height when used in a unconstrained environment. - Fixed
StreamCommandAutocompleteOptionsto style the command name withtextHighEmphasisstyle.
- Fixed
-
9.13.030 Jun 2025Release notes
Open source →🐞 Fixed
- Fixed
FloatingDateDividernot showing the correct date when the latest message was too big and exceeded the viewport main axis size. - Fixed
ScrollToBottombutton always showing when the latest message was too big and exceeded the viewport main axis size.
- Fixed
-
9.12.017 Jun 2025Release notes
Open source →✅ Added
- Added support for
MessageReminderfeature, which allows users to bookmark or set reminders for specific messages in a channel.
- Added support for
-
9.11.003 Jun 2025Release notes
Open source →🐞 Fixed
- Fixed
StreamMessageInputthrowing exception when a non-initializedChannelis used.
🔄 Changed
- Updated
just_audiodependency to">=0.9.38 <0.11.0".
- Fixed
-
9.10.015 May 2025Release notes
Open source →🔄 Changed
- Updated
share_plusdependency to^11.0.0. - Updated
desktop_dropdependency to">=0.5.0 <0.7.0".
- Updated
-
9.9.006 May 2025Release notes
Open source →✅ Added
- Added support for Draft messages preview.
- Added a new
StreamDraftListViewfor displaying draft messages. - Added a confirmation dialog for end vote in Polls. [#2211]
🐞 Fixed
- [#2182] Fixes StreamMessageInput not listening to channel capabilities.
🔄 Changed
- Exported
StreamQuotedMessageWidgetto allow customization of quoted messages usingStreamMessageWidget.quotedMessageBuilder.
-
9.8.016 Apr 2025Release notes
Open source →🐞 Fixed
- [#2184] Fixed messages not being marked as read when scrolled to the bottom.
- [#2187] Fixed
MessageListViewscrolling 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.
-
9.7.003 Apr 2025Release notes
Open source →🐞 Fixed
- [#2118] Fixed invalid assertions applied on message input command and attachment button.
- [#2042] Fixed
StreamMessageInputsend 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.
-
9.6.013 Mar 2025 -
9.5.012 Mar 2025Release notes
Open source →🐞 Fixed
- Fixed
StreamMessageInputnot able to edit the ogAttachments. - Fixed
MessageWidgetshowing pinned background for deleted messages.
✅ Added
- Introduced
StreamMessageInput.useSystemAttachmentPickerfor system media picker support. - Introduced
StreamMessageThemeData.messageDeletedStyleto style the text on a deleted message.
🔄 Changed
- Updated the message list view to prevent pinning messages that have restricted visibility.
- Deprecated
StreamMessageInput.useNativeAttachmentPickerOnMobilein favor ofStreamMessageInput.useSystemAttachmentPicker.
- Fixed
-
9.4.014 Feb 2025Release notes
Open source →🔄 Changed
- Updated minimum Flutter version to 3.27.4 for the SDK.
- Replaced image_gallery_saver_plus with gal
-
9.3.011 Feb 2025Release notes
Open source →✅ Added
- Added support for
voiceRecordingtype attachments.
🔄 Changed
- Deprecated
PlayListItemin favor ofPlaylistTrack. - Deprecated
StreamVoiceRecordingListPlayerin favor ofStreamVoiceRecordingAttachmentPlaylist. - Deprecated
StreamVoiceRecordingLoadingas it is no longer used. - Deprecated
StreamVoiceRecordingPlayerin favor ofStreamVoiceRecordingAttachment. - Deprecated
StreamVoiceRecordingSliderin favor ofStreamAudioWaveformSlider. - Deprecated
VoiceRecordingAttachmentBuilderin favor ofVoiceRecordingAttachmentPlaylistBuilder. - Deprecated
StreamVoiceRecordingThemein favor ofStreamVoiceRecordingAttachmentTheme.
- Added support for
-
9.2.021 Jan 2025Release notes
Open source →🐞 Fixed
- Fixed
StreamChannelnot available in the widget tree for various poll-related dialogs.
- Fixed
-
9.2.0+121 Jan 2025 -
9.1.009 Jan 2025Release notes
Open source →✅ Added
- Added a new
StreamThreadListViewwidget to load and display list of threads. - Added a new
StreamUnreadThreadsBannerwidget to display count of unread threads. - Added new
StreamUnreadIndicator.channelsandStreamUnreadIndicator.threadsconstructors to display unread channels and threads respectively.
🔄 Changed
- Deprecated
StreamUnreadIndicatorcid property in favor ofStreamUnreadIndicator.channelsconstructor.
- Added a new
-
9.0.030 Dec 2024Release notes
Open source →🛑️ Breaking
- The
StreamAttachmentPickerControllerhas been restructured to improve flexibility and support additional use cases like poll management.- Previously managed a
List<Attachment>but now manages anAttachmentPickerValueobject, which includes:attachments: A list of attachments.poll: A new field for managing polls.
- Previously managed a
✅ Added
- Added a new
StreamPollCreatorwidget to facilitate poll creation within the chat interface. - Added a new
PollMessagewidget to display poll messages within the chat interface.
🔄 Changed
- Updated minimum Flutter version to 3.24.5 for the SDK.
- The
-
8.3.004 Dec 2024Release notes
Open source →✅ Added
- Added several new widgets to enhance the AI assistant features.
StreamingMessageViewto show AI assistant messages with streaming animation.AITypingIndicatorViewto show AI typing indicator.
✅ Added
- Added several new widgets to enhance the AI assistant features.
StreamingMessageViewto show AI assistant messages with streaming animation.AITypingIndicatorViewto show AI typing indicator.
🐞 Fixed
- [#2030] Fixed
video_thumbnailNamespace not specified.
- Added several new widgets to enhance the AI assistant features.
-
8.2.011 Nov 2024Release notes
Open source →✅ Added
- Added
onThreadTapparameter toMessageWidgetContentto enable thread tap action. - Messages by default now show an "Edited" label if text is edited. Use
showEditedLabelto disable this functionality.
🐞 Fixed
- Fixed locale conversion in jiffy.
🔄 Changed
- Updated
stream_chat_flutter_coredependency to8.2.0.
- Added
-
8.1.019 Sep 2024Release notes
Open source →🐞 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.
-
8.0.022 Jul 2024Release notes
Open source →🐞 Fixed
- Fixed null errors in web from markdown.
- Fixed bug causing background events to be sent in foreground.
-
8.0.0-beta.308 May 2024 pre-releaseNothing published for this version
-
8.0.0-beta.209 Jan 2024 pre-releaseNothing published for this version
-
8.0.0-beta.104 Dec 2023 pre-releaseNothing published for this version
-
7.3.003 Jul 2024Release notes
Open source →🐞 Fixed
- Fixed copy message function.
🔄 Changed
- Changed minimum Flutter version to 3.19 for the SDK.
- Updated
stream_chat_flutter_coredependency to7.3.0.
-
7.2.218 Jun 2024Release notes
Open source →✅ Added
- Added
customAttachmentBuildersparameter forStreamAttachmentWidgetBuilder.defaultBuilders. attachmentBuildersparameter forStreamMessageWidgetnow only expects custom builders.- Added
StreamMediaAttachmentBuilderwidget to show media attachments in a message.
🐞 Fixed
- Added export for
message_widget_content_components.dartto 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_coredependency to7.2.2.
- Added
-
7.2.104 Jun 2024Release notes
Open source →✅ Added
- Added
VoiceRecordingAttachmentBuilder, for displaying voice recording attachments in the chat.
🐞 Fixed
- Fixed wrong calculation of the last unread message indicator.
- Added
-
7.2.003 Apr 2024Release notes
Open source →✅ Added
StreamMessageListViewwill 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
showUnreadIndicatorparameter toStreamMessageListViewthat controls visibility of new channel unread indicator - Added
unreadIndicatorBuilderparameter toStreamMessageListViewthat allows to provide custom unread indicator builder - Added
markReadWhenAtTheBottomparameter toStreamMessageListViewthat will toggle, previously default, behaviour of marking channel as read when message list is scrolled to the bottom (now default isfalse) - Added
showUnreadCountOnScrollToBottomparameter toStreamMessageListViewthat will toggle, previously shown by default, unread messages counter on the scroll to bottom button (no default isfalse)
Added Mark as Unread option to
StreamMessageWidgetcontext menu that will show for non-thread messages of other users and mark channel as unread from selected message onwards.- Added
showMarkUnreadMessagetoStreamMessageWidgetthat controls visibility of Mark as Unread option.
- Added
-
7.2.0-hotfix.104 Apr 2024 pre-releaseRelease notes
Open source →🔄 Changed
- Updated
stream_chat_flutter_coredependency to7.2.0-hotfix.1.
- Updated