Skip to content

Releases

v10.0.1

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 10 Nov 22:55

10.0.1 (2026-11-10)

Bug Fixes

v9.14.0

Choose a tag to compare

@isekovanic isekovanic released this 10 Nov 20:38
646995d

What's Changed

  • feat(ai-components): move AIConversation to its own entry point by @isekovanic in #3960
  • feat(ExpoCrewAssistant): restaurant team assistant demo by @isekovanic in #3963

Full Changelog: v9.13.0...v9.14.0

v9.13.0

Choose a tag to compare

@isekovanic isekovanic released this 10 Nov 20:25
da644ed

What's Changed

  • chore: manual release flow for the v9-release maintenance branch by @isekovanic in #3947
  • feat(ai-components): parse agent reply steps from message attachments by @isekovanic in #3920
  • feat(ai-components): AI translations via the chat SDK, AI sample on the agents router by @isekovanic in #3921
  • feat(ai-components): agent reply steps (reasoning, tool calls, approvals) by @isekovanic in #3924
  • feat(ai-components): native AIAgent module for install id and tool-call sign-in by @isekovanic in #3926
  • feat(ai-components): message views, reply actions and icon overrides by @isekovanic in #3928
  • feat(ai-components): AIConversation on LegendList by @isekovanic in #3929
  • feat(ai-components): chat options, suggestions and attachment preview fixes by @isekovanic in #3931
  • feat(ai-components): client tool runner by @isekovanic in #3933
  • feat(ai-components): polish agent conversations by @isekovanic in #3934
  • feat(ai-components): generated UI with an A2UI renderer by @isekovanic in #3936
  • fix(ai-components): follow-up polishing of agent conversations by @isekovanic in #3944
  • fix(a2ui): keep list-row secrets private and recover from a malformed message by @isekovanic in #3958
  • feat(ai-components): conversation state with AIConversationController by @isekovanic in #3957

Full Changelog: v9.12.1...v9.13.0

v10.0.0

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 06 Nov 16:24

stream-chat-react-native v10.0.0

v10 rebuilds the React Native SDK on stream-chat v10. The SDK no longer keeps its own copy of channel, message, thread and channel-list state; components read from the client's state stores and paginators instead. Threads render as standalone components, the channel list is driven by a paginator your app owns, and connection handling, recovery and optimistic updates come from the client. The release also adds an i18n layer with typed keys and new voice-agent visualizations.

This release covers stream-chat-react-native, stream-chat-expo and stream-chat-react-native-core.

Important

v10 moves to stream-chat@^10.0.0 and has many breaking changes. Before you upgrade, read the v9 → v10 migration guide. Every break is listed in the breaking changes reference, and the translation changes have their own i18n migration guide. Because v10 also moves to stream-chat v10, read the stream-chat v10 release notes as well.


✨ Highlights

Built on stream-chat v10 state

  • The SDK no longer keeps a copy of channel state. Components read from channel.state and the paginators through useStateStore(), useChannel() and useMessagePaginator().
  • MessageList and MessageFlashList page the paginator they render, either the channel's or, inside a thread, the thread's. They track their own loading state, so the loadMore / hasMore props are gone. Old messages are pruned from memory as the list grows.
  • useMessageOperations() handles sending, editing and deleting messages, and reactions. All of them are optimistic and roll back if they fail. Before v10, reactions were only optimistic with offline support enabled.
  • Request handlers for send, update, mark-read and uploads are registered once on the client through client.config. The <Channel> request props are gone.

Threads as standalone components

  • <Thread thread={thread}> takes a Thread instance from client.threads.ensure(), renders next to <Channel> instead of inside it, and renders its children: <Thread thread={thread}><MessageList /><MessageComposer /></Thread>.
  • Threads have their own paginator, unread state and reconnect recovery. Thread list rows always show the latest reply.

Channel list driven by a ChannelPaginator

  • <ChannelList> takes a ChannelPaginator that your app creates and registers with client.channelManager. Filters, sort and the request override live on the paginator, so the same lists are shared across screens.
  • Lists follow their filters / sort and reconcile after a reconnect. Channel rows re-render only when their own channel changes, preview data is reactive, and drafts with only attachments show in the preview.

Connectivity and recovery

  • New useNetworkConnectionState(), useWSConnectionState() and useSettledWSConnectionHealth() hooks. <Chat> registers the NetInfo status reporter for you.
  • The network indicator tells a dropped socket ("Reconnecting...") apart from the device being offline ("Waiting for network...").
  • After a reconnect, the client reloads the channels and threads you have open, and unsent messages survive the rebuild.

Messages and composer

  • Sending and editing go through messageComposer.send() / update(). The client waits for pending uploads before sending, which you turn on with messageComposer.attachments.pendingUploadsEnabled.
  • The command middlewares are installed by default, so typing /giphy cats works with no setup.
  • Delivery and read status come from the client's receipts. MessageStatus shows read / delivered and works them out by default.
  • Jumping to a message, highlighting it and returning to the latest messages are built on the paginator. Use useIsTargetedMessage(id) to read the highlight and useJumpToLatestOnOpen() to jump on open.
  • The messageActions function runs only when a message's menu opens, not on every render of every row.

i18n

  • The translation runtime is shared with React and the JS client through @stream-io/i18n.
  • Translation keys are stable dotted identifiers, and t() is typed to the catalog. Use asDynamicKey() for your own app keys.
  • Only English is bundled. Register other languages yourself.

AI components

  • New VoiceWave and VoiceGlow visualizations for voice agents.

Performance

  • ChatContext holds only client, getAppSettings and isMessageAIGenerated. Its consumers no longer re-render on mute changes or when the app returns from the background.
  • <Channel> no longer re-renders on channel updates that leave its capabilities unchanged.
  • Attachment picker cells re-render only when their own selection changes, not on every upload progress tick.
  • The first message page loads 25 messages instead of about 100.

⚠️ Breaking changes

These are the most common changes. The breaking changes reference has the full list, with a migration for each.

Dependencies and platform

  • stream-chat moves to ^10.0.0. If your app depends on stream-chat directly, move it to the same major.
  • The react-native peer is now >=0.79 (Metro ≥0.82 is needed for package exports), and the expo peer is now >=53.
  • stream-chat requires Node >=22.18.0 at install time. Yarn 1 refuses to install the package on older Node versions.
  • @stream-io/i18n is a new dependency, and i18next is no longer a direct dependency. dayjs moves to ^1.11.23 and must resolve to a single copy.
  • Import StateStore from @stream-io/state-store, and make sure the app resolves only one copy.
  • The offline database is rebuilt. On the first launch after the upgrade, the SQLite cache is wiped and recreated, which also drops v9's queued offline writes. Dates are now stored as unix nanoseconds.

<Chat> and contexts

  • ChatContext holds only { client, getAppSettings, isMessageAIGenerated }. channel, setActiveChannel, isOnline, connectionRecovering, appSettings, mutedUsers and enableOfflineSupport are removed. Use the connection hooks, getAppSettings(), useMutedUsers() and your own navigation state instead.
  • TypingContext, PaginatedMessageListContext and DebugContext are removed. Read typing from channel.state and messages from useMessagePaginator().
  • ChannelContext no longer provides members, read, watchers, markRead, targetedMessage, loadChannelAroundMessage, reloadChannel, loading or error. Use useStateStore(channel.state, …), useMarkRead() and the paginator's jumpToMessage() / jumpToTheFirstUnreadMessage() / state instead.
  • MessagesContext no longer provides sendReaction, deleteReaction, deleteMessage, retrySendMessage or updateMessage. Use useMessageOperations() instead.
  • useCreateChatClient takes the stream-chat configuration tree ({ client: { … } }) instead of StreamChatOptions.

<Channel>

  • messages, loadingMore, threadMessages, messageId, thread and threadList are removed. Jump with channel.messagePaginator.jumpToMessage(), and render <Thread> next to <Channel>.
  • doSendMessageRequest, doUpdateMessageRequest, doMarkReadRequest, preSendMessageRequest and doFileUploadRequest are removed. Register them with client.config under channel.requestHandlers and messageComposer.attachments.doUploadRequest (with customCdn: true).
  • maximumMessageLimit, stateUpdateThrottleInterval, allowSendBeforeAttachmentsUpload and enableOfflineSupport moved into client.config. Offline support is set on <Chat>.
  • <Channel> no longer listens for events, resyncs on reconnect or unmounts when the channel is deleted. The client reloads active channels, and your app decides what to show from channel.pendingDisposal.

<ChannelList>

  • The paginator prop is required. filters, sort, options, lockChannelOrder and queryChannelsOverride move onto the ChannelPaginator. Your app removes and disposes the paginator on logout.
  • The event-handler props (onNewMessage, onChannelUpdated, onAddedToChannel, …) are removed. Membership and order follow the paginator's filters and sort. Customize global behavior with client.channelManager.addEventHandler().
  • ChannelsContext no longer provides channels, hasNextPage, loadingChannels or refreshing. Read the list's paginator instead. loadNextPage() takes no arguments.

Threads

  • <Thread> requires a Thread instance as thread, not the parent message, and renders its children. closeThread, loadMoreThread, additionalMessageListProps, additionalMessageComposerProps and similar props are removed; configure the list and composer through their own props.
  • ThreadContext is now { thread?: Thread, allowThreadMessagesInChannel }. onThreadSelect receives a Thread instead of a message. ThreadType is removed.
  • The ThreadMessageComposer and MessageList component slots are removed.

Messages and message lists

  • MessageList / MessageFlashList drop loadMore, loadMoreRecent, hasMore, threadList, targetedMessage, channelUnreadStateStore and the other state props. The thread prop is now a Thread instance.
  • The handle* action props, messageActions and supportedReactions on <Message> are removed. Set them on <Channel> and customize per message through the messageActions function. useMessageActions() / useMessageActionHandlers() take no arguments.
  • MessageStatus takes read / delivered booleans instead...
Read more

v9.12.1

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 06 Nov 13:30

9.12.1 (2026-11-06)

Bug Fixes

v9.12.0

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 05 Nov 16:21

9.12.0 (2026-11-05)

Features

v9.11.3

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 05 Nov 12:31

9.11.3 (2026-11-05)

Bug Fixes

v9.11.2

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 04 Nov 14:33

9.11.2 (2026-11-04)

Bug Fixes

v9.11.1

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 29 Oct 18:06

9.11.1 (2026-10-29)

Bug Fixes

  • load older messages in MessageFlashList until the list fills the screen (54c967a)
  • offline message limit pagination (#3907) (59528b7)
  • read message_limit messages per channel from the offline DB (2c66e7c)
  • retry message list pagination after a load that loaded nothing (03f7e17)
  • token provider rejection during reconnect (#3913) (07e1b0e), closes GetStream/stream-chat-js#1962

Reverts

  • offline message_limit and pagination fixes pushed to develop by mistake (cb078c7)

v9.11.0

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 28 Oct 16:43

9.11.0 (2026-10-28)

Bug Fixes

  • adjusted message composer bottom offset calculation (0e9a0c0)
  • adjusted message composer bottom offset calculation (9bc37a3)
  • bump stream-chat to 9.54.2 (fc6b6e6)
  • bump stream-chat to 9.54.2 (a6bb08f)

Features