Skip to content

Next Release - #3914

Merged
isekovanic merged 6 commits into
mainfrom
develop
Oct 29, 2026
Merged

isekovanic merged 6 commits into
mainfrom
develop

Conversation

@isekovanic

Copy link
Copy Markdown
Contributor

🎯 Goal

πŸ›  Implementation details

🎨 UI Changes

iOS
Before After
Android
Before After

πŸ§ͺ Testing

β˜‘οΈ Checklist

  • I have signed the Stream CLA (required)
  • PR targets the develop branch
  • Documentation is updated
  • New code is tested in main example apps, including all possible scenarios
    • SampleApp iOS and Android
    • Expo iOS and Android

isekovanic and others added 6 commits October 28, 2026 22:12
…by mistake

Reverts 54c967a, 03f7e17 and 2c66e7c, which were pushed without a review. They come back
through a pull request.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
## 🎯 Goal

Fixes #3903
and the related pagination problems found while testing it.

Linear ticket:
https://linear.app/stream/issue/RN-471/offline-support-channels-hydrated-from-the-local-db-get-hasprev-false

With offline support, channels hydrated from the offline DB could end up
with `hasPrev = false` even when the server has older messages, so
scrolling up never requests them. The offline DB returns at most 24
messages per channel (`RowNum < 25`).

Testing it also showed that the message lists stop paginating after a
single failed request and that `MessageFlashList` cannot load older
messages when the loaded ones do not fill the screen.

## πŸ›  Implementation details

- Channels loaded from the offline DB can get `hasPrev = false` when the
server still has older messages, so scrolling up never loads them. The
offline DB returns at most 24 messages per channel and ignores the
list's `message_limit`, so the client reads a short cached page as the
start of the channel. Fixed in 06e1be3, together with
GetStream/stream-chat-js#1958. The offline DB now returns the newest
`message_limit` messages per channel (25 when not set), and the client
reads that page against the same limit.
- The offline DB can show messages with gaps between them. If messages
1-10 were cached in one session and 16-25 in a later one, they show up
back to back with 11-15 missing. Fixed in 06e1be3, since only the
newest `message_limit` messages are read now.
- After a failed request (offline, timeout or w/e), `MessageList` and
`MessageFlashList` stop paginating until the number of messages changes.
`loadMore`, `loadMoreRecent` and `loadMoreThread` swallow their errors,
so the lists treat the failure as a successful load. Fixed in 65b9bf5,
so if a load adds nothing the list tries again on the next scroll after
a 2 second backoff.
- `MessageFlashList` can't load older messages when the loaded ones
don't fill the screen, because it only paginates on scroll events and a
list that short can't scroll. Fixed in 7e6b5e7 with the same prefill
`MessageList` has.

## 🎨 UI Changes

/

## πŸ§ͺ Testing

/

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [x] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

Linear ticket:
https://linear.app/stream/issue/REACT-1472/unhandled-rejection-when-tokenprovider-fails-during-reconnect

When the `tokenProvider` rejects while the WebSocket reconnects after an
expired token, `stream-chat` lets the rejection escape as an unhandled
promise rejection. Integrators can't catch it, and mobile error trackers
report it as a crash (e.g. a token refresh in a network dead spot).

## πŸ›  Implementation details

Bumps `stream-chat` to `^9.54.4`, which contains the fix
(GetStream/stream-chat-js#1962). A failed refresh is now handled like a
failed connect and the reconnect retries with the usual backoff.

Bumped in `package/` and the example apps (`SampleApp`, `E2ETestApp`,
`ExpoMessaging`, `ExpoChatGPTSample`). No SDK code changes.

## 🎨 UI Changes

/

## πŸ§ͺ Testing

`yarn test:typecheck` and `yarn test:unit` pass.

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [x] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android

πŸ€– Generated with [Claude Code](https://claude.com/claude-code)
@github-actions

Copy link
Copy Markdown

Next releases

v9.11.1

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)

[email protected]

4.16.4 (2026-10-29)

Bug Fixes

@Stream-SDK-Bot

Copy link
Copy Markdown
Contributor

SDK Size

title develop branch diff status
js_bundle_size 2037 KB 2037 KB 0 B 🟒
ai_components_size 163 KB 163 KB 0 B 🟒

@isekovanic
isekovanic merged commit d3b1952 into main Oct 29, 2026
22 checks passed
@stream-ci-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in version 9.11.1 πŸŽ‰

The release is available on:

Your semantic-release bot πŸ“¦πŸš€

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants