stream_chat_flutter_core
Stream Chat official Flutter SDK Core. Build your own chat experience using Dart and Flutter.
10.3.0
44K downloads/mo
#1555 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
Nearly every release is documented
notes for 89 of 91 stable releases
1 version withdrawn
withdrawn after publishing
6 years old
134 releases · first in 2021
25 releases in the last 12 months
see the full history below
Release timeline
134 releases · Feb 2021 to Aug 2026Releases
latest 60 of 134-
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 →✅ Added
- Added
StreamChannelState.retry()to re-run a failed channel initialization, for use as the retry action inStreamChannel.errorBuilder. - Added
DefaultStreamChannelBuilders, an inherited widget that supplies default loading and error builders to descendantStreamChannels (resolved vialoadingBuilderOf/errorBuilderOf). - Added
search(),searchWithFilter(), andclearResults()toStreamMessageSearchListController,StreamUserListController, andStreamMemberListController.search()/searchWithFilter()debounce reloads by the search-text length (a filter with no search text reloads immediately) and drop superseded results;clearResults()cancels any pending search and clears the results.
🐞 Fixed
- Fixed
StreamChannel's default error state exposing raw error details; it now shows a safe error state (icon, message, and a Try Again button wired toretry()) that adapts to the failure type. - Fixed
StreamChannelListControllercrashing with a null-check error when its local sort ran over a channel disposed mid-query (e.g. a client disconnect/logout racing an in-flightloadMore); such channels are now sorted last instead.
-
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 →🐞 Fixed
- Fixed
StreamChannelListControllernot handlingnotification.channel_deletedevent. - Fixed backwards pagination not working if channel was never opened.
- Guarded
StreamChannelListController'schannel.updated,member.updated, anduser.presence.changed/user.updatedevent handlers to skip the full list re-sort when the event doesn't affect any listed channel.
-
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 all
PagedValueNotifiersubclasses (StreamChannelListController,StreamUserListController,StreamMemberListController,StreamThreadListController,StreamDraftListController,StreamMessageReminderListController,StreamPollVoteListController,StreamReactionListController,StreamMessageSearchListController): in-flight async loads could writevalueafterdispose()had been called, triggering anotifyListeners()assertion throw in debug mode. A newDisposeAwareValueNotifiermixin guards thevaluesetter and also prevents event subscriptions from being set up post-dispose.
✅ Added
- Added
DisposeAwareValueNotifier<T>mixin onValueNotifier<T>that silently drops post-disposevaluewrites and exposes adisposedgetter. Useful for anyValueNotifiersubclass with async methods. - Added
mentionedChannel,mentionedHere,mentionedRoles,addMentionedRole,mentionedUserGroups, andaddMentionedUserGrouptoStreamMessageComposerControllerfor composing enhanced mentions. - Added
StreamMessageComposerController.setCommand(Command)andactiveCommandgetter for set-aware command activation and tracking. - Added
StreamMessageComposerController.validateCommand(Command)returning a nullableCommandUnavailableReasonso callers can gate activation against the composer state. - Added
CommandUnavailableReasonenum (editing,quotedMessage,other) andCommandValidatortypedef.
⚠️ Deprecated
- Deprecated
set command(String?)onStreamMessageComposerController; usesetCommand(Command)orclearCommand()instead.
🔄 Changed
StreamMessageComposerController.quotedMessagenow auto-clears an active moderation-set command (backend doesn't support activating a moderation command alongside a quoted message).StreamMessageComposerController.editMessagenow clears any active command (backend doesn't process commands on edit).StreamMessageComposerController.setCommandnow also clearsmentionedChannel,mentionedHere,mentionedRoles, andmentionedGroups/mentionedGroupIds(was only clearingmentionedUsers);clearCommandrestores them.
🐞 Fixed
- Fixed a reconnect storm when the OS closed the WebSocket during the background keep-alive window; reconnects are now paused on background and resumed on foreground.
-
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 →🛑️ Breaking
- Renamed
StreamMessageInputController→StreamMessageComposerController. - Renamed
StreamRestorableMessageInputController→StreamRestorableMessageComposerController. - Renamed
StreamMessageComposerController.editingOriginalMessage→messageBeingEdited. StreamMessageComposerControllerconstructor no longer accepts non-initial messages; useeditMessage()to enter edit mode.StreamMessageComposerController.cancelEditMessage()is now a no-op when no edit is active.StreamMessageComposerController.clear()no longer exits edit mode; usecancelEditMessage()instead.
✅ Added
- Added support for predefined filters on
StreamChannelListController. - Added
StreamMessageComposerController.isEditinggetter. - Added
StreamMessageComposerController.clearCommand(); settingcommand = nullis now an alias for it. StreamMessageComposerController.editMessage()and thecommandsetter are now re-entrant — repeated calls preserve the original restore snapshot.
🔄 Changed
- Widened
device_info_plusto>=12.4.0 <14.0.0,package_info_plusto>=9.0.1 <11.0.0, andconnectivity_plusto>=7.1.1 <8.0.0so apps can adopt the latest majors. Floors raised to current resolved versions. - Raised minimum Flutter to
>=3.41.0and Dart SDK to^3.11.0. StreamChatCorenow setsclient.recoverStateOnReconnect = falseon mount; refreshes onconnectionRecoveredare driven by the list controllers in this package, avoiding a duplicatequeryChannelsround-trip and the historical event-replay flicker on reactions, polls, and quoted messages.- Apps watching a
Channeloutside any list controller (e.g. a deep link into a single channel screen) should subscribe toclient.on(EventType.connectionRecovered)and callchannel.watch()themselves to refresh state on reconnect. - Changed the default
backgroundKeepAlivefrom 1 minute to 15 seconds — covers quick app-switches and notification-shade checks while closing cleanly before the server's 35-second read timeout. Still configurable.
🐞 Fixed
- Fixed
StreamChatCoredisconnecting the WebSocket immediately on background when noonBackgroundEventReceivedhandler was provided; the keep-alive timer now fires before the connection closes regardless of whether a handler is set. - Fixed
StreamMessageComposerController.cancelEditMessagelosing the pre-edit draft when a remote update arrived for the message being edited.
-
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-release -
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-release -
10.0.0-beta.829 Oct 2025 pre-release -
10.0.0-beta.715 Oct 2025 pre-release -
10.0.0-beta.624 Sep 2025 pre-release -
10.0.0-beta.513 Aug 2025 pre-release -
10.0.0-beta.425 Jul 2025 pre-release -
10.0.0-beta.317 Jul 2025 pre-release -
10.0.0-beta.230 Jun 2025 pre-release -
10.0.0-beta.118 Jun 2025 pre-release -
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 →✅ Added
- Added
StreamChannel.value— exposes an already-initialized channel without running channel-page positioning. Use it for sub-route and overlay wraps. - Added
StreamStateScope<T>— a genericInheritedWidgetthat exposes aStateto descendants for O(1).of(context)lookup. Use it to backstatic of(BuildContext)accessors instead ofBuildContext.findAncestorStateOfType.
🐞 Fixed
- Fixed
StreamChannel.getMessagehitting the network for thread replies and pinned messages already in local state. - Fixed
MessageListCorereloading the parent channel from its dispose path when running in thread mode. - Fixed
StreamChannel.reloadChannelmerging the latest page on top of the previously loaded window instead of replacing it. The reload now matches a fresh open of the channel.
🚀 Performance
StreamChannel.ofandStreamChatCore.ofnow resolve viaStreamStateScope<T>instead 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
MessageListCorenow acceptsmaximumMessageLimitandretentionTrimBufferto cap the loaded message list. Trim fires on new messages pastlimit + buffer; top pagination, edits, deletions, jump-to-message, and threads don't trigger it. Disabled by default.- Added
StreamChannel.pruneOldest(int)— delegates toChannelClientState.pruneOldestand resets the top-pagination tracker.
🔄 Changed
defaultMessageFilternow accepts an optionalcurrentUserId; passingnulltreats every message as not-my-message.
🚀 Performance
MessageListCorenow caches the resolvedmessagesStream, avoiding subscription churn on every parent rebuild.MessageListCorenow applies its message filter and reversal in a single lazy pass, dropping two intermediateList<Message>allocations per emission.MessageListCoreno longer applies a redundantListEqualitycomparator on itsBetterStreamBuilderoutputs.
🐞 Fixed
- Fixed
MessageListController.paginateDatanot being cleared whenMessageListCoreis disposed or its controller is swapped. - Fixed
BetterStreamBuilderrendering the previous stream's last value for one frame after the stream changes. - Fixed
BetterStreamBuildergetting stuck on the error state when the next stream event equals the cached value. - Fixed
BetterStreamBuildersilently swallowing stream errors when noerrorBuilderis provided; errors now route throughFlutterError.reportError. - Debounced connectivity events by 3 seconds in
StreamChatCore. Rapid network flaps (cellular handovers, brief drops) now collapse into a single reconnect instead of firing a freshconnectionRecoveredper emission.
-
9.23.028 Jan 2026 -
9.22.010 Dec 2025 -
9.21.003 Dec 2025 -
9.20.018 Nov 2025Release notes
Open source →🐞 Fixed
- Fixed race condition where
connectUsercould be blocked when connectivity monitoring triggers during initial connection. [#2409]
- Fixed race condition where
-
9.19.029 Oct 2025 -
9.18.015 Oct 2025 -
9.17.024 Sep 2025 -
9.16.013 Aug 2025Release notes
Open source →🐞 Fixed
- Fixed
MessageListCorenot properly loading and paginating thread replies.
✅ Added
- Added methods for paginating thread replies in
StreamChannel.
- Fixed
-
9.15.025 Jul 2025Release notes
Open source →✅ Added
- Added
StreamChatCore.maybeOf()method for safe context access in async operations. - Added
StreamChannel.maybeOf()method for safe context access in async operations.
🐞 Fixed
- Fixed
MessageListCore.dispose()crash when channel reload fails due to insufficient permissions. - Fixed incorrect parent message comparison in
MessageListCore.didUpdateWidget(). - Ensure
StreamChannelfuture builder completes after channel initialization. [#2323]
- Added
-
9.14.017 Jul 2025Release notes
Open source →🐞 Fixed
- Fixed cached messages are cleared from channels with unread messages when accessed offline. [#2083]
-
9.13.030 Jun 2025Release notes
Open source →🐞 Fixed
- Fixed pagination end detection logic to properly determine when the top or bottom of the message list has been reached.
-
9.12.017 Jun 2025Release notes
Open source →✅ Added
- Added
StreamMessageReminderListControllerto manage the list of message reminders.
- Added
-
9.11.003 Jun 2025 -
9.10.015 May 2025Release notes
Open source →🐞 Fixed
- Fixed an issue with
StreamChannelwhere loading channel atlastReadMessageIdmight fail if the channel exceeds the member threshold. This is now handled gracefully by falling back to loading the channel at thelastReaddate.
🔄 Changed
- Updated
freezed_annotationdependency to">=2.4.1 <4.0.0".
- Fixed an issue with
-
9.9.006 May 2025Release notes
Open source →✅ Added
- Added
StreamDraftListControllerto manage the list of draft messages. - Added support for Filtering and Sorting in the
StreamThreadListController.
- Added
-
9.8.016 Apr 2025Release notes
Open source →✅ Added
- Added
StreamChannelState.getFirstUnreadMessageto get the first unread message in the channel. - Added support for Channel pinning and archiving.
- Added
-
9.7.003 Apr 2025Release notes
Open source →🐞 Fixed
- Fixed issue with not being able to use a non-initialized
ChannelinStreamChannelwidget. #2080
🔄 Changed
- Updated
StreamChannelto provide proper background colors in thedefaultLoadingBuilderanddefaultErrorBuilder - Removed redundant
Materialwidget wrapping in thebuildmethod ofStreamChannelState
- Fixed issue with not being able to use a non-initialized
-
9.6.013 Mar 2025 -
9.5.012 Mar 2025Release notes
Open source →🔄 Changed
- Simplified the logic for setting and clearing OG attachments by removing the
_ogAttachmentfield and directly working with the attachments list. - Added proper userAgent and systemEnvironment information for better diagnostics and analytics.
🐞 Fixed
- type '_$Loading<int, Channel>' is not a subtype of type 'Success<int, Channel>' in type cast #1894
- Simplified the logic for setting and clearing OG attachments by removing the
-
9.4.014 Feb 2025 -
9.3.011 Feb 2025 -
9.2.021 Jan 2025 -
9.1.009 Jan 2025Release notes
Open source →✅ Added
- Added
StreamThreadListControllerto load and paginate list of threads.
- Added
-
9.0.030 Dec 2024Release notes
Open source →✅ Added
- Added
StreamPollControllerto create and manage a poll based on the passed configs. - Added
StreamPollVoteListControllerto manage the list of votes for a poll.
🔄 Changed
- Updated minimum Flutter version to 3.24.5 for the SDK.
- Added
-
8.3.004 Dec 2024 -
8.2.011 Nov 2024 -
8.1.019 Sep 2024Release notes
Open source →🔄 Changed
- Changed minimum Flutter version to 3.22 for the SDK.
- Updated
stream_chatdependency to8.1.0.
-
8.0.022 Jul 2024Release notes
Open source →🐞 Fixed
- Fixed bug causing background events to be sent in foreground.
🔄 Changed
- Updated
stream_chatdependency to8.0.0.
-
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 →🔄 Changed
- Changed minimum Flutter version to 3.19 for the SDK.
- Updated
stream_chatdependency to7.3.0.
-
7.2.218 Jun 2024 -
7.2.104 Jun 2024 -
7.2.003 Apr 2024 -
7.2.0-hotfix.104 Apr 2024 pre-releaseRelease notes
Open source →- Updated
stream_chatdependency to7.2.0-hotfix.1. - Reverted the
connectivity_plusdependency bump causing 1889
- Updated
-
7.1.006 Mar 2024