Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4762c99
Point StreamChat dependency at the channel list performance branch
nuno-vieira Jul 9, 2026
ea3a97c
Diff channel updates instead of replacing the whole array
nuno-vieira Jul 9, 2026
1ad38f2
Resolve channel list item index in O(1)
nuno-vieira Jul 9, 2026
c301454
Render channel list divider as a row overlay
nuno-vieira Jul 9, 2026
b62a08f
Use the default page size when loading more channels
nuno-vieira Jul 9, 2026
11fb36a
Back the channel list with a native List on iOS 15+
nuno-vieira Jul 9, 2026
e4a651c
Trigger channel list pagination within the last 8 channels
nuno-vieira Jul 9, 2026
1f1bdc2
Update channel list snapshots for native List rendering
nuno-vieira Jul 9, 2026
77d49d0
Deduplicate channel list row rendering for SonarCloud
nuno-vieira Jul 9, 2026
fc96e45
Remove internal duplicate channel list containers
nuno-vieira Jul 9, 2026
8194619
Add channel list tests for SonarCloud coverage
nuno-vieira Jul 9, 2026
2d72125
Add channel list performance improvements to changelog
nuno-vieira Jul 9, 2026
c824680
Hide native channel list scroll content background on iOS 16+
nuno-vieira Jul 9, 2026
de2e3cd
Fix channel list LazyVStack test to verify rendering
nuno-vieira Jul 9, 2026
b20237f
Update performance changelog with SDK size reduction
nuno-vieira Jul 9, 2026
23234e4
Fix SDK size reduction number in changelog
nuno-vieira Jul 9, 2026
3b20bb2
Revert native List-backed channel list rendering
nuno-vieira Jul 9, 2026
94a0ea5
Revert "Diff channel updates instead of replacing the whole array"
nuno-vieira Jul 10, 2026
9c942fa
Update channel list snapshot references from CI
nuno-vieira Jul 10, 2026
5e126ae
Revert "Trigger channel list pagination within the last 8 channels"
nuno-vieira Jul 10, 2026
7457bb2
Revert channel list perf scope to divider overlay and pagination
nuno-vieira Jul 10, 2026
4999b1e
Update performance changelog for channel list PR
nuno-vieira Jul 10, 2026
4412c38
Point StreamChat dependency at performance branch
nuno-vieira Jul 10, 2026
1e87ed9
Update channel list snapshot references for divider overlay
nuno-vieira Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### ⚡️ Performance
- Fix the channel list rebuilding on every scroll tick after returning from a channel [#1525](https://github.com/GetStream/stream-chat-swiftui/pull/1525)

### 🔄 Changed
- Render channel list dividers as row overlays instead of sibling views [#1529](https://github.com/GetStream/stream-chat-swiftui/pull/1529)
- Reduce SDK size by 2.5 MB [#1529](https://github.com/GetStream/stream-chat-swiftui/pull/1529)

# [5.6.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/5.6.0)
_July 03, 2026_
Expand Down
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ let package = Package(
)
],
dependencies: [
.package(url: "https://github.com/GetStream/stream-chat-swift.git", from: "5.6.0")
.package(url: "https://github.com/GetStream/stream-chat-swift.git", branch: "perf/channel-list-performance-improvements")
],
targets: [
.target(
Expand Down
19 changes: 13 additions & 6 deletions Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,13 @@ public struct ChannelsLazyVStack<Factory: ViewFactory>: View {
}

public var body: some View {
let shouldRenderLastItemDivider = utils.channelListConfig.showChannelListDividerOnLastItem

LazyVStack(spacing: 0) {
ForEach(channels) { channel in
let isLastItem = channel.cid == channels.last?.cid
let showsDivider = !isLastItem || (isLastItem && shouldRenderLastItemDivider)

factory.makeChannelListItem(
options: ChannelListItemOptions(
channel: channel,
Expand All @@ -152,19 +157,21 @@ public struct ChannelsLazyVStack<Factory: ViewFactory>: View {
isSelected: selectedChannel?.channel.id == channel.id
)
))
.overlay(
Group {
if showsDivider {
factory.makeChannelListDividerItem(options: ChannelListDividerItemOptions())
}
},
alignment: .bottom
)
.onAppear {
if let index = channels.firstIndex(where: { chatChannel in
chatChannel.id == channel.id
}) {
onItemAppear(index)
}
}

let isLastItem = channels.last?.cid == channel.cid
let shouldRenderLastItemDivider = utils.channelListConfig.showChannelListDividerOnLastItem
if !isLastItem || (isLastItem && shouldRenderLastItemDivider) {
factory.makeChannelListDividerItem(options: ChannelListDividerItemOptions())
}
}

factory.makeChannelListFooterView(options: ChannelListFooterViewOptions())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ import UIKit

if !loadingNextChannels {
loadingNextChannels = true
controller?.loadNextChannels(limit: 30) { [weak self] _ in
controller?.loadNextChannels { [weak self] _ in
guard let self = self else { return }
self.loadingNextChannels = false
}
Expand Down
4 changes: 2 additions & 2 deletions StreamChatSwiftUI.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1531,8 +1531,8 @@
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/GetStream/stream-chat-swift.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 5.6.0;
branch = "perf/channel-list-performance-improvements";
kind = branch;
};
};
E3A1C01A282BAC66002D1E26 /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading