PackageTrack
Sign in Get early access

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 2026
2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

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

    What's Changed

    New Contributors

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

    Open source →
    Release notes

    ✅ Added

    • Added StreamChatClient.isLocalUnreadCountEnabled (default false). 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, and Channel.markRead / markUnread / markUnreadByTimestamp update it locally without a network request — including Read.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-provided watcher_count field on events (e.g. user.watching.start, user.watching.stop, message.new).
    • Added StreamChatNetworkError.type (a StreamChatNetworkErrorType capturing the transport failure kind — connection error, timeout, cancellation, etc.).
    • Exported FilterOperator alongside Filter.

    ⚠️ Deprecated

    • Deprecated StreamChatNetworkError.isRequestCancelledError in favor of type == StreamChatNetworkErrorType.cancel.

    🔄 Changed

    • Raised the minimum dio version to ^5.11.0.

    🐞 Fixed

    • Fixed pinned channels appearing at the bottom of the list when sorting by pinned_at descending.
    • Fixed channels without messages appearing at the top of the list when sorting by last_message_at descending.
    • Fixed StreamWebSocketError.toString() using a WebSocketError(...) prefix instead of the class name; it now also includes code, and StreamChatNetworkError.toString() now surfaces the transport type when known.
    • Fixed ChannelClientState.watcherCount staying stale during a session.
    • Fixed watchers not being removed from ChannelClientState.watchers on user.watching.stop.
    • Fixed Channel.name/image/extraData setters throwing after a failed initialization; they now only throw once the channel is successfully initialized.
    • Fixed Channel.initialized staying 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.sync letting a failure from its final updateLastSyncAt write escape to the caller; it is now handled by the method's own error handling, like every other sync failure.
    • Fixed Message.deleteMyReaction dropping 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_scores payloads being discarded at parse time when their score total was zero or negative despite a positive count.
    • Fixed Channel.getReplies adding the parent message to ChannelClientState.threads when 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 ChannelClientState no longer handling notification.mark_read (regression since 9.20.0), which left unreadCount stale after Channel.markRead on channels the user isn't watching.
    Open source →
  2. 10.2.0 22 Jul 2026
    Release notes

    What's Changed

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

    New Contributors

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

    Open source →
    Release notes

    ✅ Added

    • Added an upsert flag to ChannelClientState.updateMessage (defaults to true). Pass false to 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 participantLimit and memberLimit on ThreadOptions from 100 to 10.
    • StreamChatClient.updateSystemEnvironment now sanitizes the passed SystemEnvironment: sdkName, sdkVersion, and osName are locked to internal defaults, and sdkIdentifier only accepts the dartflutter promotion (other values, including a flutterdart demotion, are ignored). appName, appVersion, osVersion, and deviceModel continue to pass through as-is.

    🐞 Fixed

    • StreamChatNetworkError.fromDioException no longer throws FormatException when an edge/proxy returns a non-JSON body (e.g. a plain upstream request timeout from a 504); the original network error now surfaces with statusCode / statusMessage intact.
    • ComparableField now folds diacritics/ligatures and ignores case when comparing strings, so SortOption on fields like name no longer pushes lowercase or non-ASCII names (jhon, Łukasz, Øystein) to the end of client-sorted lists (#2601).
    • Fixed message.updated and soft message.deleted events being incorrectly upserted into ChannelState.messages (and thread reply lists) when they targeted a message outside the currently loaded window.
    Open source →
  3. 10.1.0 23 Jun 2026
    Release notes

    What's Changed

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

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

    Open source →
    Release notes

    ✅ Added

    • Added roles API on StreamChatClient: searchRoles for 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, and mentionedGroups.
    • Added ChannelCapability.notifyChannel, notifyHere, notifyRole, and notifyGroup capabilities, with matching Channel.canNotifyChannel / canNotifyHere / canNotifyRole / canNotifyGroup getters.
    • Added ChannelConfig.pushLevel, pushNotifications, and chatPreferences for per-channel-type push configuration.
    • Added PushLevel and ChatPreferenceLevel extension types and the ChatPreferences model — granular per-category push preferences (direct, channel, here, role, group mentions, thread replies, default).
    • Added chatPreferences field to PushPreferenceInput, PushPreference, and ChannelPushPreference.
    • Added Command.set field and CommandSet extension type (fun, moderation) for typed access to the backend's command set classifier.
    • Added StreamChatClient.pauseReconnect / resumeReconnect to suspend the WebSocket's auto-retry loop without tearing down the user session.

    🔄 Changed

    • Command constructor: description and args are now optional (default to ''), matching the backend's "always present, may be empty" wire shape.

    🐞 Fixed

    • Message.toJson mention sanitization (removeMentionsIfNotIncluded) now requires @token to match at a word boundary, so e.g. typing @administrator no longer keeps a stale admin role mention alive, and @channels / @hereafter no longer keep mentionedChannel / mentionedHere set.
    • Fixed an unhandled WebSocketChannelException surfacing when a reconnect attempt failed (e.g. DNS lookup failed in background); the duplicate signal on sink.done is now ignored since the stream's onError already handles it.
    • Fixed resetting channel unread count on message.read events delivered for threads.
    Open source →
  4. 10.0.1 09 Jun 2026
    Release notes

    What's Changed

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

    Open source →
    Release notes

    ✅ Added

    • Added StreamChatClient.appSettings and StreamChatClient.getAppSettings() to read and refresh the per-app upload configuration set in the Stream Dashboard.
    • Added AppSettings model with fileUploadConfig / imageUploadConfig (both UploadConfig) — exposes sizeLimit, allowedFileExtensions, blockedFileExtensions, allowedMimeTypes, and blockedMimeTypes.
    • Added StreamChatClient.recoverStateOnReconnect (defaults to true); when false, the client no longer auto-re-queries active channels on connection recovery — useful for consumers driving their own refresh from the connectionRecovered event.
    • Added Message.updateWith(Message? other) — merges a server-side update onto the local message while preserving locally-known poll, sharedLocation, ownReactions, and nested quotedMessage enrichment when the server omits them.
    • Added Channel.isOneToOne — true when the channel is isDistinct and has exactly two members. For the looser count-only check, inline channel.memberCount == 2.
    • Added IterableMergeX.merge (keyed-map merge on Iterable<T>, unsorted output) and SortedListX.mergeSorted (two-pointer merge on a sorted List<T>). Splits what SortedListX.merge did in 9.24.0 — see Changed below.
    • Added support for predefined filters for QueryChannels on StreamChatClient (StreamChatClient.queryChannels and StreamChatClient.queryChannelsWithResult).
    • Added ChatPersistenceClient.queryChannelStates and ChatPersistenceClient.saveChannelQueries as the unified read/write methods for channel-query persistence. Both accept standard and predefined-filter parameters and internally dispatch.

    ⚠️ Deprecated

    • Deprecated Message.syncWith in favor of Message.updateWith. Note the arguments are flipped: local.updateWith(remote) replaces remote.syncWith(local).
    • Deprecated ChatPersistenceClient.getChannelStates and ChatPersistenceClient.updateChannelQueries in favor of the unified queryChannelStates / 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.isGroup from memberCount != 2 to memberCount > 2 || !isDistinct. Two-member non-distinct channels now correctly report as groups, and 1-member distinct channels no longer do. Migrate via !channel.isOneToOne or channel.memberCount != 2.
    • Tightened Channel.isDistinct to require the !members- prefix (with trailing dash), matching the backend's DistinctChannelPrefix constant. Real server-generated ids always include the dash; only malformed/test ids that previously matched the looser !members check are affected.
    • Renamed SortedListX.merge (added in 9.24.0) → SortedListX.mergeSorted and moved the unsorted/iterable variant to IterableMergeX.merge. Callers on List<T> that want sorted output should switch to mergeSorted; callers on Iterable<T> keep using merge.
    • Made the collection getters on ClientState (channels, users, activeLiveLocations) unmodifiable. Direct mutation used to silently bypass their streams; update them via addChannels / 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 jose floor to 0.3.5+1 to address CVE-2026-34240 (untrusted JWK header accepted during signature verification). The SDK only uses JsonWebToken.unverified and 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() and currentUserLastMessageAt now 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 lastSyncAt to the current time instead of replaying every event since lastSyncAt through handleEvent. client.sync() remains available for consumers that need event-level replay.
    • Fixed Channel.sendMessage / Channel.updateMessage hanging forever when any attachment upload failed; they now throw StreamChatError.
    • Fixed quoted poll messages losing their poll, shared-location, or nested-quote content when the server omits it from the quoted_message payload during channel re-sync.
    • Fixed a poll attached to a parent message disappearing when a thread reply was added; partial message.updated events no longer clobber locally-known poll / sharedLocation on the parent.
    Open source →
  5. 10.0.0 28 Jan 2026 withdrawn

    Nothing published for this version

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

    What's Changed

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

    Open source →
    Release notes

    🛑️ Breaking

    • SDK Redesign Changes. For more details, please refer to the migration guide. The SDK redesign introduces a fresher default UI, but also better APIs for customization of the components.
    Open source →
  7. 10.0.0-beta.12 28 Jan 2026 pre-release
    Release notes
    • Included the changes from version 9.23.0.
    Open source →
  8. 10.0.0-beta.11 10 Dec 2025 pre-release
    Release notes
    • Included the changes from version 9.22.0.
    Open source →
  9. 10.0.0-beta.10 03 Dec 2025 pre-release
    Release notes
    • Included the changes from version 9.21.0.
    Open source →
  10. 10.0.0-beta.9 18 Nov 2025 pre-release
    Release notes

    🐞 Fixed

    • Fixed Location.endAt field not being properly converted to UTC, causing "expected date" API errors when sending location messages.

    • Included the changes from version 9.20.0.

    Open source →
  11. 10.0.0-beta.8 29 Oct 2025 pre-release
    Release notes

    ✅ Added

    • Added support for user.messages.deleted event.

    • Included the changes from version 9.19.0.

    Open source →
  12. 10.0.0-beta.7 15 Oct 2025 pre-release
    Release notes

    🛑️ Breaking

    • Changed MessageState factory constructors: The deleting, deleted, and deletingFailed factory constructors now accept a MessageDeleteScope parameter instead of bool hard. Pattern matching callbacks also receive MessageDeleteScope scope instead of bool hard.
    • Added new abstract methods to AttachmentFileUploader: The AttachmentFileUploader interface 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 user
      • StreamChatClient.deleteMessageForMe() - Delete a message only for the current user via client
      • MessageDeleteScope - New sealed class to represent deletion scope
      • MessageState.deletingForMe, MessageState.deletedForMe, MessageState.deletingForMeFailed states
      • Message.deletedOnlyForMe, Event.deletedForMe, Member.deletedMessages model fields
    • Added standalone file and image upload/removal methods for CDN operations:

      • StreamChatClient.uploadImage() - Upload an image to the Stream CDN
      • StreamChatClient.uploadFile() - Upload a file to the Stream CDN
      • StreamChatClient.removeImage() - Remove an image from the Stream CDN
      • StreamChatClient.removeFile() - Remove a file from the Stream CDN
    • Included the changes from version 9.18.0.

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

    🛑️ Breaking

    • Changed sendReaction method signature: The sendReaction method on both Client and Channel now accepts a full Reaction object 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 channel
      • Channel.startLiveLocationSharing() - Start sharing live location with automatic updates
      • Channel.activeLiveLocations - Track members active live location shares in the channel
      • Client.activeLiveLocations - Access current user active live location shares across channels
      • Location event listeners for locationShared, locationUpdated, and locationExpired events
    • Included the changes from version 9.15.0.

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

    🛑️ Breaking

    • Deprecated API Cleanup: Removed all deprecated classes, methods, and properties for the v10 major release:

      • Removed Classes: PermissionType (use string constants like 'delete-channel', 'update-channel'), CallApi, CallPayload, CallTokenPayload, CreateCallPayload
      • Removed Methods: cooldownStartedAt getter from Channel, getCallToken and createCall from StreamChatClient
      • Removed Properties: reactionCounts and reactionScores getters from Message (use reactionGroups instead), call property from StreamChatApi
      • Removed Files: permission_type.dart, call_api.dart, call_payload.dart and their associated tests
    • Included the changes from version 9.14.0.

    Open source →
  17. 10.0.0-beta.2 30 Jun 2025 pre-release
    Release notes
    • Included the changes from version 9.13.0.
    Open source →
  18. 10.0.0-beta.1 18 Jun 2025 pre-release
    Release notes
    • Bug fixes and improvements
    Open source →
  19. 9.28.0 14 Aug 2026
    Release notes

    What's Changed

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

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

    Open source →
  20. 9.27.0 22 Jul 2026
    Release notes

    What's Changed

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

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

    Open source →
  21. 9.26.0 23 Jun 2026
    Release notes

    What's Changed

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

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

    Open source →
  22. 9.25.0 05 Jun 2026
    Release notes

    What's Changed

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

    New Contributors

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

    Open source →
    Release notes
    • Minor bug fixes and improvements
    Open source →
  23. 9.24.0 19 May 2026
    Release notes

    What's Changed

    New Contributors

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

    Open source →
    Release notes

    🔒 Security

    • Bumped jose floor to 0.3.5+1 to address CVE-2026-34240 (untrusted JWK header accepted during signature verification). The SDK only uses JsonWebToken.unverified and is not directly exploitable, but the floor bump ensures consumers resolve to a patched version.

    🐞 Fixed

    • Fixed Channel.getMessagesById mutating the loaded channel window as a side effect of fetching.

    • Fixed StreamChatClient.queryDrafts not forwarding the filter argument to the API.

    • Coalesced concurrent queryChannels calls with identical parameters via an in-flight cache. Rapid reconnect bursts no longer fire multiple duplicate requests in parallel.

    ✅ Added

    • Added SortedListX and ListX extensions on List for 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. Prefer StreamChannel.pruneOldest from stream_chat_flutter_core when available — it also resets top-pagination.

    • Added StreamChatClient.recoverStateOnReconnect setter (default true). Controls whether the client re-queries active channels on WebSocket reconnect. Set to false if 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, and Channel.unreadCountStream now dedupe consecutive equal values via .distinct(). Previously all three were derived from channelStateStream without 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.currentUserReadStream now emits null when 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.

    Open source →
  24. 9.23.0 28 Jan 2026
    Release notes
    • Minor bug fixes and improvements
    Open source →
  25. 9.22.0 10 Dec 2025
    Release notes

    ✅ Added

    • Added support for filterTags in channels.
    • Added support for Channel.markUnreadByTimestamp and Client.markChannelUnreadByTimestamp methods to mark all messages after a given timestamp as unread.
    • Added support for hideHistoryBefore in Channel.addMembers and Client.addChannelMembers to specify a timestamp before which channel history should be hidden for newly added members. When provided, it takes precedence over the hideHistory boolean flag.
    Open source →
  26. 9.21.0 03 Dec 2025
    Release notes

    🐞 Fixed

    • Fixed user's ID from being inadvertently used as their display name during the WebSocket connection process. [#2447]
    Open source →
  27. 9.20.0 18 Nov 2025
    Release notes

    ✅ Added

    • Added support for user-level privacy settings via OwnUser.privacySettings.
    • Added invisible field to User and OwnUser models.
    • Added message delivery receipts support with lastDeliveredAt and lastDeliveredMessageId fields in Read model.
    • Added Client.markChannelsDelivered method to submit delivery receipts.
    • Added deliveriesOf and readsOf helper methods to ReadIterableExtension for querying read and delivery statuses.
    • Added channel capability getters: Channel.canUseDeliveryReceipts, Channel.canUseReadReceipts, Channel.canUseTypingEvents.

    ⚠️ Deprecated

    • Deprecated Channel.canSendTypingEvents in favor of Channel.canUseTypingEvents.

    🔄 Changed

    • Typing and read receipts now respect both channel capabilities and user privacy settings.
    • markRead, markUnread, markThreadRead, and markThreadUnread methods now throw StreamChatError when channel lacks required capabilities.
    Open source →
  28. 9.19.0 29 Oct 2025
    Release notes
    • Minor bug fixes and improvements
    Open source →
  29. 9.18.0 15 Oct 2025
    Release notes

    🐞 Fixed

    • Improved sync reliability and error handling with enhanced lastSyncAt initialization, 400 error recovery, and automatic flushing of stale persistence data after 30 days of inactivity.

    ✅ Added

    • Added support for Message.channelRole field to provide access to the sender's channel role.
    • Added support for Channel.messageCount field.
    • Added support for Pending Messages. Pending messages can be accessed via ChannelState.pendingMessages or ChannelState.pendingMessagesStream.

    🐞 Fixed

    • Fixed thread messages increasing the unread count in the main channel.
    • Fixed ChannelState.memberCount, ChannelState.config and ChannelState.extraData getting reset on first load.
    Open source →
  30. 9.17.0 24 Sep 2025
    Release notes

    🐞 Fixed

    • Fixed currentUser.pushPreferences not updating immediately after calling setPushPreferences.
    • Fixed Channel.sendMessage to prevent sending empty messages when all attachments are cancelled during upload.
    • Fixed toDraftMessage to only include successfully uploaded attachments in draft messages.
    Open source →
  31. 9.16.0 13 Aug 2025
    Release notes

    🐞 Fixed

    • Fixed skipPush and skipEnrichUrl not preserving during message send or update retry
    • Fixed Channel methods to throw proper StateError exceptions instead of relying on assertions for state validation.
    • Fixed OwnUser specific fields getting lost when creating a new OwnUser instance from an User instance.
    • Fixed Client.currentUser specific fields getting reset on user.updated events.

    ✅ Added

    • Added support for Client.setPushPreferences which allows setting PushPreferences for the current user or for a specific channel.
    Open source →
  32. 9.15.0 25 Jul 2025
    Release notes

    ✅ Added

    • Added avgResponseTime field to the User model to track average response time in seconds.
    • Added support for skipPush while updating a channel message, which allows you to update a message without sending a push notification.

    🐞 Fixed

    • Fixed WebSocket race condition where reconnection could access null user during disconnect.
    • Fixed draft message persistence issues where removed drafts were not properly deleted from the database.
    Open source →
  33. 9.14.0 17 Jul 2025
    Release notes

    🐞 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.new constructor in favor of SortOption.desc and SortOption.asc.
    Open source →
  34. 9.13.0 30 Jun 2025
    Release notes
    • Bug fixes and improvements
    Open source →
  35. 9.12.0 17 Jun 2025
    Release notes

    ✅ Added

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

    ✅ Added

    • Added reactionGroups to the Message model. 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.reactionScores in favor of message.reactionGroups.

    🐞 Fixed

    • Null check operator used on a null value in Websocket connect.
    • Ensure query cache is cleared when refreshing channel queries.
    Open source →
  37. 9.10.0 15 May 2025
    Release notes

    🐞 Fixed

    • [#2013] Fix pinned message get duplicated.

    🔄 Changed

    • Updated freezed_annotation dependency to ">=2.4.1 <4.0.0".
    Open source →
  38. 9.9.0 06 May 2025
    Release notes

    ✅ Added

    • Added teams role support for users.
    • Added support for Filtering and Sorting in the client.queryThreads method.
    Open source →
  39. 9.8.0 16 Apr 2025
    Release notes

    ✅ 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 Client and Channel class 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.unreadCount not updating if the user is not part of the read list.

    🔄 Changed

    • Improved read event handling in the Channel class to properly update unread state information.
    Open source →
  40. 9.7.0 03 Apr 2025
    Release notes

    ✅ Added

    • Added new helper extensions on Channel to 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.blockUser now updates currentUser.blockedUserIds list with newly blocked user IDs.
      • client.unblockUser now removes the unblocked user ID from currentUser.blockedUserIds list.
      • client.queryBlockedUsers now updates currentUser.blockedUserIds with the latest blocked users data.

    🐞 Fixed

    • [#1964] Fixes Channel.membership field not updating correctly.
    • [#2171] Fixed [Flutter Web] dynamic TypeError

    🔄 Changed

    • Deprecated PermissionType in favor of ChannelCapability.
    • Deprecated third party calls related APIs (Agora and 100ms).
    Open source →
  41. 9.6.0 13 Mar 2025
    Release notes

    🐞 Fixed

    • [#1775] Fix incorrect message order.
    Open source →
  42. 9.5.0 12 Mar 2025
    Release notes

    ✅ Added

    • [#2101] Added support for system messages not updating channel.lastMessageAt.
    • Added support for sending private or restricted visibility messages.
    • Add member.extraData field.

    🐞 Fixed

    • [#1774] Fixed failed to execute 'close' on 'WebSocket'.
    • [#2016] Fix muted channel's unreadCount incorrectly updated.

    🔄 Changed

    • Refactored identifying the Attachment.uploadState logic for local and remote attachments. Also updated the logic for determining the attachment type to check for ogScrapeUrl instead of AttachmentType.giphy.
    • Improved the x-stream-client header generation for better client identification and analytics.
    Open source →
  43. 9.4.0 14 Feb 2025
    Release notes

    🔄 Changed

    • Updated minimum Flutter version to 3.27.4 for the SDK.
    Open source →
  44. 9.3.0 11 Feb 2025
    Release notes

    ✅ Added

    • Added support for overriding the baseUrl of the websocket.

      final client = StreamChatClient(
        apiKey,
        logLevel: Level.INFO,
        baseWsUrl: 'http://localhost:8080',
      );
      
    Open source →
  45. 9.2.0 21 Jan 2025
    Release notes
    • Bug fixes and improvements
    Open source →
  46. 9.1.0 09 Jan 2025
    Release notes

    ✅ Added

    • Added support for Threads v2 feature, which allows users to query all the threads.
    Open source →
  47. 9.0.0 30 Dec 2024
    Release notes

    ✅ 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.
    Open source →
  48. 8.3.1 02 Apr 2025

    Nothing published for this version

  49. 8.3.0 04 Dec 2024
    Release notes

    ✅ Added

    • Added support for AI assistant states and events.
    Open source →
  50. 8.2.0 11 Nov 2024
    Release notes

    ✅ Added

    • Added user blocking to the client.
    Open source →
  51. 8.1.0 19 Sep 2024
    Release notes

    ✅ Added

    • Added httpClientAdapter to StreamHttpClient that enables the use native http implementations

    🔄 Changed

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

    🐞 Fixed

    • Fixed incorrect user object and online presence when user is updated.
    Open source →
  53. 8.0.0-beta.3 08 May 2024 pre-release

    Nothing published for this version

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

    Nothing published for this version

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

    Nothing published for this version

  56. 7.3.0 03 Jul 2024
    Release notes

    🔄 Changed

    • Changed minimum Flutter version to 3.19 for the SDK.
    Open source →
  57. 7.2.2 18 Jun 2024
    Release notes
    • Version to keep in sync with the rest of the packages
    Open source →
  58. 7.2.1 04 Jun 2024
    Release notes

    ✅ Added

    • Added voiceRecording attachment type
    Open source →
  59. 7.2.0 03 Apr 2024
    Release notes

    ✅ Added

    • Added markUnread method to Channel that marks messages from the provided message id onwards as unread
    Open source →
  60. 7.2.0-hotfix.1 04 Apr 2024 pre-release
    Release notes
    • Version to keep in sync with the rest of the packages
    Open source →

Every package, every release, already written down.

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

Browse the archive