Skip to content

v15.0.0-rc.3

Pre-release
Pre-release

Choose a tag to compare

@stream-ci-bot stream-ci-bot released this 28 Oct 10:37
· 8 commits to master since this release

15.0.0-rc.3 (2026-10-28)

⚠ BREAKING CHANGES

  • channel.watch() resolves with the channel instance to use (the channel, or the instance that superseded it), not the server response: read channel.data, channel.state and channel.messagePaginator instead.
  • channel.watch() sends no query for a channel already watched and loaded unless it asks for options the current watch was not sent with, so it no longer refreshes one: refresh with channel.reload(), load other messages through channel.messagePaginator.
  • A channel.watch() while another with the same options is in flight joins it instead of sending a request.
  • MessageList: useMessageListScrollManager no longer takes onScrollToTop. Loading older messages keeps the message the reader was looking at in place, also when loading starts at the very top, instead of pinning the newly loaded page to the top.
  • InfiniteScrollPaginator's loadNextDebounceMs now rate-limits the edge check while scrolling (the first check runs at once, then at most once per loadNextDebounceMs) instead of waiting until scrolling stops for that long. Older and newer pages start loading before the reader reaches the edge.
  • MessageList and VirtualizedMessageList pass showNotification to NewMessageNotification only when a message from someone else arrives while the list is scrolled up. Being on an older message set no longer shows it; ScrollToLatestMessageButton signals that.
  • In a channel, ScrollToLatestMessageButton shows the current user's unread count from the channel's read state instead of counting message.new events, so messages a reconnect brought in are included. In a thread it counts new replies from 0.
  • marker: the removals are v14 API, so the branch has a
    fix!: commit with a BREAKING CHANGE: footer, per the AGENTS.md
    convention. The footer to keep in the squash commit:
  • MessageList no longer accepts messages, hasMore,
    jumpToLatestMessage, loadingMoreNewer or messageLimit, and
    VirtualizedMessageList no longer accepts messages; the lists render
    and paginate the message paginator. CustomClasses.chatContainer and
    the ComponentContext.LoadingErrorIndicator slot are removed. Inside
    ChatView the channel list no longer renders its own str-chat <theme>
    scope. See ai-docs/v15-breaking-changes.md (BC-019, BC-046, BC-047,
    BC-073, BC-074).

Verification: yarn lint, tsc -p tsconfig.lib.json --noEmit, yarn types:scripts, yarn validate-translations and yarn test (281 files,
3090 tests) pass. yarn build, validate-cjs, validate-esm,
validate-entry-isolation, and the tutorial and vite example builds
passed before the rebase onto the guides branch, which brought in only
docs and the api-surface script. The ai-chatbot example build was not
verified: it hung locally in a sandboxed environment. The theme-scope
change was not checked visually in a browser.

UI Changes

No intended visual change inside ChatView. Outside ChatView, the
channel list picks up the design tokens again, as in v14. The
MessageList loading indicator now appears while older messages load.
No screenshots: the examples need Stream credentials to run.

Summary by CodeRabbit

  • New Features

    • Gallery items can display message-specific timestamp overrides.
  • Reply-count buttons honor a message’s custom thread-opening behavior.

  • Standalone channel lists now inherit the chat theme, and
    channel-detail actions use workspace navigation.

  • useMessagePaginator and useIsCooldownActive are available from the
    package entry point.

  • Message timestamps can render with an explicit message outside a
    message context.

  • Bug Fixes

  • Message-list loading indicators and pagination behavior now reflect
    active page loads more accurately.

  • Workspace navigation warns when navigation actions are used without a
    provider.

  • Breaking Changes

  • Removed legacy message-list props and the LoadingErrorIndicator
    component override slot.

Bug Fixes

Features

Refactors

  • call Channel.watch(), which replaces ensureWatched() in stream-chat (#3346) (0100d98)