stream_chat
The official Dart client for Stream Chat, a service for building chat applications.
10.3.0
45K downloads/mo
#1533 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 167 of 182 stable releases
1 version withdrawn
withdrawn after publishing
7 years old
248 releases · first in 2020
25 releases in the last 12 months
see the full history below
Release timeline
248 releases · Jan 2020 to Aug 2026Releases
latest 60 of 248-
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
StreamChatClient.isLocalUnreadCountEnabled(defaultfalse). When enabled, channels that have read events disabled (e.g. livestream channel types) track their unread count locally, on-device: incoming messages increment it, hard-deleted messages decrement it, andChannel.markRead/markUnread/markUnreadByTimestampupdate it locally without a network request — includingRead.lastReadMessageId, so the unread divider and jump-to-unread button anchor to the right message. Channels that support read receipts are unaffected and keep relying on server-driven unread counts. - Added
Event.watcherCount, exposing the server-providedwatcher_countfield on events (e.g.user.watching.start,user.watching.stop,message.new). - Added
StreamChatNetworkError.type(aStreamChatNetworkErrorTypecapturing the transport failure kind — connection error, timeout, cancellation, etc.). - Exported
FilterOperatoralongsideFilter.
⚠️ Deprecated
- Deprecated
StreamChatNetworkError.isRequestCancelledErrorin favor oftype == StreamChatNetworkErrorType.cancel.
🔄 Changed
- Raised the minimum
dioversion to^5.11.0.
🐞 Fixed
- Fixed pinned channels appearing at the bottom of the list when sorting by
pinned_atdescending. - Fixed channels without messages appearing at the top of the list when sorting by
last_message_atdescending. - Fixed
StreamWebSocketError.toString()using aWebSocketError(...)prefix instead of the class name; it now also includescode, andStreamChatNetworkError.toString()now surfaces the transporttypewhen known. - Fixed
ChannelClientState.watcherCountstaying stale during a session. - Fixed watchers not being removed from
ChannelClientState.watchersonuser.watching.stop. - Fixed
Channel.name/image/extraDatasetters throwing after a failed initialization; they now only throw once the channel is successfully initialized. - Fixed
Channel.initializedstaying errored after a failed init; it now reflects a subsequent successful (re)initialization. - Fixed a
StateError(Cannot add new events after calling close) thrown when the client is disposed while a reconnect recovery is still in flight. - Fixed
StreamChatClient.syncletting a failure from its finalupdateLastSyncAtwrite escape to the caller; it is now handled by the method's own error handling, like every other sync failure. - Fixed
Message.deleteMyReactiondropping an entire reaction group when its summed scores reached zero even though other users' reactions kept the count positive; the group is now retained as long as its count stays above zero. - Fixed reaction groups synthesized from legacy
reaction_counts/reaction_scorespayloads being discarded at parse time when their score total was zero or negative despite a positive count. - Fixed
Channel.getRepliesadding the parent message toChannelClientState.threadswhen a backend returns it alongside the replies, which rendered the thread root twice. The online path now filters it out, matching the offline one. - Fixed truncated channels dropping to the bottom of the list when sorting by
last_updated. - Fixed
ChannelClientStateno longer handlingnotification.mark_read(regression since 9.20.0), which leftunreadCountstale afterChannel.markReadon channels the user isn't watching.
-
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 →✅ Added
- Added an
upsertflag toChannelClientState.updateMessage(defaults totrue). Passfalseto update a message only if it's already loaded in the state, skipping unknown messages instead of adding them. - Added
EventType.userPresenceChanged(user.presence.changed) constant.
🔄 Changed
- Reduced the default
participantLimitandmemberLimitonThreadOptionsfrom100to10. StreamChatClient.updateSystemEnvironmentnow sanitizes the passedSystemEnvironment:sdkName,sdkVersion, andosNameare locked to internal defaults, andsdkIdentifieronly accepts thedart→flutterpromotion (other values, including aflutter→dartdemotion, are ignored).appName,appVersion,osVersion, anddeviceModelcontinue to pass through as-is.
🐞 Fixed
StreamChatNetworkError.fromDioExceptionno longer throwsFormatExceptionwhen an edge/proxy returns a non-JSON body (e.g. a plainupstream request timeoutfrom a 504); the original network error now surfaces withstatusCode/statusMessageintact.ComparableFieldnow folds diacritics/ligatures and ignores case when comparing strings, soSortOptionon fields likenameno longer pushes lowercase or non-ASCII names (jhon,Łukasz,Øystein) to the end of client-sorted lists (#2601).- Fixed
message.updatedand softmessage.deletedevents being incorrectly upserted intoChannelState.messages(and thread reply lists) when they targeted a message outside the currently loaded window.
-
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 →✅ Added
- Added roles API on
StreamChatClient:searchRolesfor searching roles. - Added user-group APIs on
StreamChatClient:listUserGroups,searchUserGroups,getUserGroup,createUserGroup,updateUserGroup,deleteUserGroup,addUserGroupMembers,removeUserGroupMembers. - Added enhanced-mention fields on
Message:mentionedChannel,mentionedHere,mentionedRoles,mentionedGroupIds, andmentionedGroups. - Added
ChannelCapability.notifyChannel,notifyHere,notifyRole, andnotifyGroupcapabilities, with matchingChannel.canNotifyChannel/canNotifyHere/canNotifyRole/canNotifyGroupgetters. - Added
ChannelConfig.pushLevel,pushNotifications, andchatPreferencesfor per-channel-type push configuration. - Added
PushLevelandChatPreferenceLevelextension types and theChatPreferencesmodel — granular per-category push preferences (direct, channel, here, role, group mentions, thread replies, default). - Added
chatPreferencesfield toPushPreferenceInput,PushPreference, andChannelPushPreference. - Added
Command.setfield andCommandSetextension type (fun,moderation) for typed access to the backend's command set classifier. - Added
StreamChatClient.pauseReconnect/resumeReconnectto suspend the WebSocket's auto-retry loop without tearing down the user session.
🔄 Changed
Commandconstructor:descriptionandargsare now optional (default to''), matching the backend's "always present, may be empty" wire shape.
🐞 Fixed
Message.toJsonmention sanitization (removeMentionsIfNotIncluded) now requires@tokento match at a word boundary, so e.g. typing@administratorno longer keeps a staleadminrole mention alive, and@channels/@hereafterno longer keepmentionedChannel/mentionedHereset.- Fixed an unhandled
WebSocketChannelExceptionsurfacing when a reconnect attempt failed (e.g. DNS lookup failed in background); the duplicate signal onsink.doneis now ignored since the stream'sonErroralready handles it. - Fixed resetting channel unread count on
message.readevents delivered for threads.
-
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 →✅ Added
- Added
StreamChatClient.appSettingsandStreamChatClient.getAppSettings()to read and refresh the per-app upload configuration set in the Stream Dashboard. - Added
AppSettingsmodel withfileUploadConfig/imageUploadConfig(bothUploadConfig) — exposessizeLimit,allowedFileExtensions,blockedFileExtensions,allowedMimeTypes, andblockedMimeTypes. - Added
StreamChatClient.recoverStateOnReconnect(defaults totrue); whenfalse, the client no longer auto-re-queries active channels on connection recovery — useful for consumers driving their own refresh from theconnectionRecoveredevent. - Added
Message.updateWith(Message? other)— merges a server-side update onto the local message while preserving locally-knownpoll,sharedLocation,ownReactions, and nestedquotedMessageenrichment when the server omits them. - Added
Channel.isOneToOne— true when the channel isisDistinctand has exactly two members. For the looser count-only check, inlinechannel.memberCount == 2. - Added
IterableMergeX.merge(keyed-map merge onIterable<T>, unsorted output) andSortedListX.mergeSorted(two-pointer merge on a sortedList<T>). Splits whatSortedListX.mergedid in 9.24.0 — see Changed below. - Added support for predefined filters for
QueryChannelsonStreamChatClient(StreamChatClient.queryChannelsandStreamChatClient.queryChannelsWithResult). - Added
ChatPersistenceClient.queryChannelStatesandChatPersistenceClient.saveChannelQueriesas the unified read/write methods for channel-query persistence. Both accept standard and predefined-filter parameters and internally dispatch.
⚠️ Deprecated
- Deprecated
Message.syncWithin favor ofMessage.updateWith. Note the arguments are flipped:local.updateWith(remote)replacesremote.syncWith(local). - Deprecated
ChatPersistenceClient.getChannelStatesandChatPersistenceClient.updateChannelQueriesin favor of the unifiedqueryChannelStates/saveChannelQueries. The deprecated methods stay overridable so downstream subclasses keep working unchanged.
🔄 Changed
- Raised minimum versions of bundled Dart dependencies (
async,collection,dio,equatable,http_parser,json_annotation,logging,synchronized,uuid,web_socket_channel) to current resolved versions. - Raised minimum Dart SDK to
^3.11.0. - Tightened
Channel.isGroupfrommemberCount != 2tomemberCount > 2 || !isDistinct. Two-member non-distinct channels now correctly report as groups, and 1-member distinct channels no longer do. Migrate via!channel.isOneToOneorchannel.memberCount != 2. - Tightened
Channel.isDistinctto require the!members-prefix (with trailing dash), matching the backend'sDistinctChannelPrefixconstant. Real server-generated ids always include the dash; only malformed/test ids that previously matched the looser!memberscheck are affected. - Renamed
SortedListX.merge(added in 9.24.0) →SortedListX.mergeSortedand moved the unsorted/iterable variant toIterableMergeX.merge. Callers onList<T>that want sorted output should switch tomergeSorted; callers onIterable<T>keep usingmerge. - Made the collection getters on
ClientState(channels,users,activeLiveLocations) unmodifiable. Direct mutation used to silently bypass their streams; update them viaaddChannels/removeChannel,updateUser/updateUsers. - Marked the cache-mutation surface on
ClientState(channels=,currentUser=,activeLiveLocations=,totalUnreadCount=,blockedUserIds=,updateUsers,updateUser,addChannels,removeChannel) as@internal. App flows (connectUser, etc.) are unaffected.
🔒 Security
- Bumped
josefloor to0.3.5+1to address CVE-2026-34240 (untrusted JWK header accepted during signature verification). The SDK only usesJsonWebToken.unverifiedand is not directly exploitable, but the floor bump ensures consumers resolve to a patched version.
🐞 Fixed
- Fixed slow mode (cooldown) not activating after sending a reply in a thread.
Channel.getRemainingCooldown()andcurrentUserLastMessageAtnow scan thread replies in addition to main-channel messages, matching the backend behaviour where both message types share the same per-channel cooldown bucket. - Fixed reactions, polls, and quoted-message enrichment briefly flickering after the app returned from the background. The reconnect path now refreshes channels and advances
lastSyncAtto the current time instead of replaying every event sincelastSyncAtthroughhandleEvent.client.sync()remains available for consumers that need event-level replay. - Fixed
Channel.sendMessage/Channel.updateMessagehanging forever when any attachment upload failed; they now throwStreamChatError. - Fixed quoted poll messages losing their poll, shared-location, or nested-quote content when the server omits it from the
quoted_messagepayload during channel re-sync. - Fixed a poll attached to a parent message disappearing when a thread reply was added; partial
message.updatedevents no longer clobber locally-knownpoll/sharedLocationon the parent.
-
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-releaseRelease notes
Open source →🐞 Fixed
-
Fixed
Location.endAtfield not being properly converted to UTC, causing "expected date" API errors when sending location messages. -
Included the changes from version
9.20.0.
-
-
10.0.0-beta.829 Oct 2025 pre-releaseRelease notes
Open source →✅ Added
-
Added support for
user.messages.deletedevent. -
Included the changes from version
9.19.0.
-
-
10.0.0-beta.715 Oct 2025 pre-releaseRelease notes
Open source →🛑️ Breaking
- Changed
MessageStatefactory constructors: Thedeleting,deleted, anddeletingFailedfactory constructors now accept aMessageDeleteScopeparameter instead ofbool hard. Pattern matching callbacks also receiveMessageDeleteScope scopeinstead ofbool hard. - Added new abstract methods to
AttachmentFileUploader: TheAttachmentFileUploaderinterface now includes four new abstract methods (uploadImage,uploadFile,removeImage,removeFile). Custom implementations must implement these methods.
For more details, please refer to the migration guide.
✅ Added
-
Added support for deleting messages only for the current user:
Channel.deleteMessageForMe()- Delete a message only for the current userStreamChatClient.deleteMessageForMe()- Delete a message only for the current user via clientMessageDeleteScope- New sealed class to represent deletion scopeMessageState.deletingForMe,MessageState.deletedForMe,MessageState.deletingForMeFailedstatesMessage.deletedOnlyForMe,Event.deletedForMe,Member.deletedMessagesmodel fields
-
Added standalone file and image upload/removal methods for CDN operations:
StreamChatClient.uploadImage()- Upload an image to the Stream CDNStreamChatClient.uploadFile()- Upload a file to the Stream CDNStreamChatClient.removeImage()- Remove an image from the Stream CDNStreamChatClient.removeFile()- Remove a file from the Stream CDN
-
Included the changes from version
9.18.0.
- Changed
-
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-releaseRelease notes
Open source →🛑️ Breaking
- Changed
sendReactionmethod signature: ThesendReactionmethod on bothClientandChannelnow accepts a fullReactionobject instead of individual parameters (type,score,extraData). This change provides more flexibility and better type safety.
✅ Added
-
Added comprehensive location sharing support with static and live location features:
Channel.sendStaticLocation()- Send a static location message to the channelChannel.startLiveLocationSharing()- Start sharing live location with automatic updatesChannel.activeLiveLocations- Track members active live location shares in the channelClient.activeLiveLocations- Access current user active live location shares across channels- Location event listeners for
locationShared,locationUpdated, andlocationExpiredevents
-
Included the changes from version
9.15.0.
- Changed
-
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:
PermissionType(use string constants like'delete-channel','update-channel'),CallApi,CallPayload,CallTokenPayload,CreateCallPayload - Removed Methods:
cooldownStartedAtgetter fromChannel,getCallTokenandcreateCallfromStreamChatClient - Removed Properties:
reactionCountsandreactionScoresgetters fromMessage(usereactionGroupsinstead),callproperty fromStreamChatApi - Removed Files:
permission_type.dart,call_api.dart,call_payload.dartand their associated tests
- Removed Classes:
-
Included the changes from version
9.14.0.
-
-
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
-
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 →🔒 Security
- Bumped
josefloor to0.3.5+1to address CVE-2026-34240 (untrusted JWK header accepted during signature verification). The SDK only usesJsonWebToken.unverifiedand is not directly exploitable, but the floor bump ensures consumers resolve to a patched version.
🐞 Fixed
-
Fixed
Channel.getMessagesByIdmutating the loaded channel window as a side effect of fetching. -
Fixed
StreamChatClient.queryDraftsnot forwarding thefilterargument to the API. -
Coalesced concurrent
queryChannelscalls with identical parameters via an in-flight cache. Rapid reconnect bursts no longer fire multiple duplicate requests in parallel.
✅ Added
-
Added
SortedListXandListXextensions onListfor keyed merge, sorted insert/upsert and conditional update. -
Added
ChannelClientState.pruneOldest(int)that drops the oldest messages and keeps at most the requested number. No-op when the channel isn't up to date. PreferStreamChannel.pruneOldestfromstream_chat_flutter_corewhen available — it also resets top-pagination. -
Added
StreamChatClient.recoverStateOnReconnectsetter (defaulttrue). Controls whether the client re-queries active channels on WebSocket reconnect. Set tofalseif your app handles its own state recovery — e.g. via channel-list controllers.
🚀 Performance
-
Faster channel state updates, especially for read receipts, reactions, and other partial-state events that don't touch the messages list. Reactions targeted at thread messages no longer scan the channel-level message list.
-
Channel.readStream,Channel.currentUserReadStream, andChannel.unreadCountStreamnow dedupe consecutive equal values via.distinct(). Previously all three were derived fromchannelStateStreamwithout deduplication, so every channel state mutation (new message, reaction, edit, member change, etc.) would push through to subscribers — causing UI listeners that only cared about read state to rebuild on unrelated events.
🔄 Changed
-
Channel.currentUserReadStreamnow emitsnullwhen the user logs out (previously the transition was swallowed). -
Removed proactive re-fetching of messages with expired CDN attachment URLs on every channel state update. URL refreshes now flow through normal server events.
-
9.23.028 Jan 2026 -
9.22.010 Dec 2025Release notes
Open source →✅ Added
- Added support for
filterTagsin channels. - Added support for
Channel.markUnreadByTimestampandClient.markChannelUnreadByTimestampmethods to mark all messages after a given timestamp as unread. - Added support for
hideHistoryBeforeinChannel.addMembersandClient.addChannelMembersto specify a timestamp before which channel history should be hidden for newly added members. When provided, it takes precedence over thehideHistoryboolean flag.
- Added support for
-
9.21.003 Dec 2025Release notes
Open source →🐞 Fixed
- Fixed user's ID from being inadvertently used as their display name during the WebSocket connection process. [#2447]
-
9.20.018 Nov 2025Release notes
Open source →✅ Added
- Added support for user-level privacy settings via
OwnUser.privacySettings. - Added
invisiblefield toUserandOwnUsermodels. - Added message delivery receipts support with
lastDeliveredAtandlastDeliveredMessageIdfields inReadmodel. - Added
Client.markChannelsDeliveredmethod to submit delivery receipts. - Added
deliveriesOfandreadsOfhelper methods toReadIterableExtensionfor querying read and delivery statuses. - Added channel capability getters:
Channel.canUseDeliveryReceipts,Channel.canUseReadReceipts,Channel.canUseTypingEvents.
⚠️ Deprecated
- Deprecated
Channel.canSendTypingEventsin favor ofChannel.canUseTypingEvents.
🔄 Changed
- Typing and read receipts now respect both channel capabilities and user privacy settings.
markRead,markUnread,markThreadRead, andmarkThreadUnreadmethods now throwStreamChatErrorwhen channel lacks required capabilities.
- Added support for user-level privacy settings via
-
9.19.029 Oct 2025 -
9.18.015 Oct 2025Release notes
Open source →🐞 Fixed
- Improved sync reliability and error handling with enhanced
lastSyncAtinitialization, 400 error recovery, and automatic flushing of stale persistence data after 30 days of inactivity.
✅ Added
- Added support for
Message.channelRolefield to provide access to the sender's channel role. - Added support for
Channel.messageCountfield. - Added support for Pending Messages. Pending messages can be accessed via
ChannelState.pendingMessagesorChannelState.pendingMessagesStream.
🐞 Fixed
- Fixed thread messages increasing the unread count in the main channel.
- Fixed
ChannelState.memberCount,ChannelState.configandChannelState.extraDatagetting reset on first load.
- Improved sync reliability and error handling with enhanced
-
9.17.024 Sep 2025Release notes
Open source →🐞 Fixed
- Fixed
currentUser.pushPreferencesnot updating immediately after callingsetPushPreferences. - Fixed
Channel.sendMessageto prevent sending empty messages when all attachments are cancelled during upload. - Fixed
toDraftMessageto only include successfully uploaded attachments in draft messages.
- Fixed
-
9.16.013 Aug 2025Release notes
Open source →🐞 Fixed
- Fixed
skipPushandskipEnrichUrlnot preserving during message send or update retry - Fixed
Channelmethods to throw properStateErrorexceptions instead of relying on assertions for state validation. - Fixed
OwnUserspecific fields getting lost when creating a newOwnUserinstance from anUserinstance. - Fixed
Client.currentUserspecific fields getting reset onuser.updatedevents.
✅ Added
- Added support for
Client.setPushPreferenceswhich allows setting PushPreferences for the current user or for a specific channel.
- Fixed
-
9.15.025 Jul 2025Release notes
Open source →✅ Added
- Added
avgResponseTimefield to theUsermodel to track average response time in seconds. - Added support for
skipPushwhile updating a channel message, which allows you to update a message without sending a push notification.
🐞 Fixed
- Fixed
WebSocketrace condition where reconnection could access null user during disconnect. - Fixed draft message persistence issues where removed drafts were not properly deleted from the database.
- Added
-
9.14.017 Jul 2025Release notes
Open source →🐞 Fixed
- Fixed cached messages are cleared from channels with unread messages when accessed offline. [#2083]
- Fixed RetryQueue skipping messages due to premature removal from the queue. [#2308]
✅ Added
- Added support for
client.getUnreadCount(), which returns the unread count information for the current user.
🔄 Changed
- Deprecated
SortOption.newconstructor in favor ofSortOption.descandSortOption.asc.
-
9.13.030 Jun 2025 -
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 →✅ Added
- Added
reactionGroupsto theMessagemodel. This field is a map of reaction types to their respective counts and scores and additional metadata such as the first and last reaction timestamps.
🔄 Changed
- Deprecated
message.reactionCounts,message.reactionScoresin favor ofmessage.reactionGroups.
🐞 Fixed
Null check operator used on a null valuein Websocket connect.- Ensure query cache is cleared when refreshing channel queries.
- Added
-
9.10.015 May 2025Release notes
Open source →🐞 Fixed
- [#2013] Fix pinned message get duplicated.
🔄 Changed
- Updated
freezed_annotationdependency to">=2.4.1 <4.0.0".
-
9.9.006 May 2025Release notes
Open source →✅ Added
- Added teams role support for users.
- Added support for Filtering and Sorting in the
client.queryThreadsmethod.
-
9.8.016 Apr 2025Release notes
Open source →✅ Added
- Added support for Channel pinning and archiving.
- Added support for 'DraftMessage' feature, which allows users to save draft messages in channels.
Several methods have been added to the
ClientandChannelclass to manage draft messages:channel.createDraft: Saves a draft message for a specific channel.channel.getDraft: Retrieves a draft message for a specific channel.channel.deleteDraft: Deletes a draft message for a specific channel.client.queryDrafts: Queries draft messages created by the current user.
🐞 Fixed
- Fixed
channelState.unreadCountnot updating if the user is not part of the read list.
🔄 Changed
- Improved read event handling in the
Channelclass to properly update unread state information.
-
9.7.003 Apr 2025Release notes
Open source →✅ Added
-
Added new helper extensions on
Channelto provide a convenient way to check if the current user has specific capabilities in a channel.final canSendMessage = channel.canSendMessage; final canSendReaction = channel.canSendReaction; -
Added support for message moderation feature.
-
Improved user blocking functionality by updating client state when blocking/unblocking users:
client.blockUsernow updatescurrentUser.blockedUserIdslist with newly blocked user IDs.client.unblockUsernow removes the unblocked user ID fromcurrentUser.blockedUserIdslist.client.queryBlockedUsersnow updatescurrentUser.blockedUserIdswith the latest blocked users data.
🐞 Fixed
- [#1964] Fixes
Channel.membershipfield not updating correctly. - [#2171] Fixed [Flutter Web] dynamic TypeError
🔄 Changed
- Deprecated
PermissionTypein favor ofChannelCapability. - Deprecated third party calls related APIs (Agora and 100ms).
-
-
9.6.013 Mar 2025 -
9.5.012 Mar 2025Release notes
Open source →✅ Added
- [#2101] Added support for system messages not updating
channel.lastMessageAt. - Added support for sending private or restricted visibility messages.
- Add
member.extraDatafield.
🐞 Fixed
- [#1774] Fixed failed to execute 'close' on 'WebSocket'.
- [#2016] Fix muted channel's unreadCount incorrectly updated.
🔄 Changed
- Refactored identifying the
Attachment.uploadStatelogic for local and remote attachments. Also updated the logic for determining the attachment type to check for ogScrapeUrl instead ofAttachmentType.giphy. - Improved the
x-stream-clientheader generation for better client identification and analytics.
- [#2101] Added support for system messages not updating
-
9.4.014 Feb 2025 -
9.3.011 Feb 2025Release notes
Open source →✅ Added
-
Added support for overriding the
baseUrlof the websocket.final client = StreamChatClient( apiKey, logLevel: Level.INFO, baseWsUrl: 'http://localhost:8080', );
-
-
9.2.021 Jan 2025 -
9.1.009 Jan 2025Release notes
Open source →✅ Added
- Added support for Threads v2 feature, which allows users to query all the threads.
-
9.0.030 Dec 2024Release notes
Open source →✅ Added
- Added support for Polls feature, which allows users to create and vote on polls in chat messages.
🔄 Changed
- Updated minimum Dart version to 3.5.4 for the SDK.
-
8.3.102 Apr 2025Nothing published for this version
-
8.3.004 Dec 2024 -
8.2.011 Nov 2024 -
8.1.019 Sep 2024Release notes
Open source →✅ Added
- Added
httpClientAdaptertoStreamHttpClientthat enables the use native http implementations
🔄 Changed
- Changed minimum Flutter version to 3.22 for the SDK.
- Added
-
8.0.022 Jul 2024Release notes
Open source →🐞 Fixed
- Fixed incorrect user object and online presence when user is updated.
-
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 2024 -
7.2.218 Jun 2024 -
7.2.104 Jun 2024 -
7.2.003 Apr 2024Release notes
Open source →✅ Added
- Added
markUnreadmethod toChannelthat marks messages from the provided message id onwards as unread
- Added
-
7.2.0-hotfix.104 Apr 2024 pre-release