Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
155 commits
Select commit Hold shift + click to select a range
9109c2d
refactor(ui)!: re-wrote message actions and modals (#2156)
xsahil03x May 22, 2025
08600ee
refactor(ui): sync theme with figma (#2263)
xsahil03x May 26, 2025
31b2809
refactor!(ui): add support for customising reaction picker (#2248)
xsahil03x Jun 10, 2025
396fcca
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jun 16, 2025
eb9d91c
refactor(ui)!: improve reaction bubble implementation (#2277)
xsahil03x Jun 17, 2025
6a5cf55
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jun 17, 2025
d2aabea
chore(ui): make `CustomMessageAction` extendable
xsahil03x Jun 17, 2025
39bc67b
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jun 17, 2025
f9d454c
chore(repo): add migration guide
xsahil03x Jun 18, 2025
5a2dc40
chore(repo): update CHANGELOG.md
xsahil03x Jun 18, 2025
76debfd
chore(repo): update migration guide
xsahil03x Jun 18, 2025
75d9d17
chore(repo): release v10.0.0-beta.1 (#2283)
xsahil03x Jun 18, 2025
c038038
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jun 27, 2025
dead3f9
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jun 30, 2025
0ffdd7c
chore: include latest stable release in beta changelogs
xsahil03x Jun 30, 2025
8c8dbd2
chore(repo): release v10.0.0-beta.2 (#2292)
xsahil03x Jun 30, 2025
74bb460
feat(ui)!: refactor poll message into attachment (#2296)
xsahil03x Jul 3, 2025
3a2b3e3
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jul 4, 2025
cc69eb3
refactor(llc): introduce event controller, resolver (#2301)
xsahil03x Jul 10, 2025
74188e3
refactor(ui)!: add support for non-attachment types in attachment pic…
xsahil03x Jul 11, 2025
cc33ba3
chore(repo): remove deprecated classes, methods, and properties (#2306)
xsahil03x Jul 16, 2025
fd1e502
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jul 17, 2025
3e95d5c
chore(repo): release v10.0.0-beta.3 (#2310)
xsahil03x Jul 17, 2025
86d3220
chore(ui): hide reaction picker bubble border and mask (#2316)
xsahil03x Jul 20, 2025
a514537
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jul 21, 2025
7d3fa7f
feat(llc): add support for sharing live and static locations (#2305)
xsahil03x Jul 23, 2025
376f0fe
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jul 23, 2025
a32d298
fix(ui): adjust reaction picker and message modal animations
xsahil03x Jul 24, 2025
84b2994
feat(persistence): add support for location persistence (#2319)
xsahil03x Jul 24, 2025
00c0b15
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jul 24, 2025
7fe34aa
feat(llc, ui, persistence)!: add support for reaction emoji_code (#2326)
xsahil03x Jul 25, 2025
bf33673
feat(ui): add `StreamChatConfiguration.maybeOf()` method
xsahil03x Jul 25, 2025
c37fa34
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jul 25, 2025
0a6b932
chore: Update Goldens
xsahil03x Jul 25, 2025
d1819c1
chore(repo): release v10.0.0-beta.4 (#2333)
xsahil03x Jul 25, 2025
48b0cc7
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jul 30, 2025
ba38c8e
chore: merge fixes
xsahil03x Jul 30, 2025
3ad5cab
fix(llc): fixed skipPush and skipEnrichUrl not preserving during mess…
VladShturma Jul 30, 2025
8e06a36
fix(llc, ui): update message state on failure
xsahil03x Jul 30, 2025
4ca7fe9
refactor(ui): introduce showStreamDialog and replace showStreamMessag…
xsahil03x Aug 6, 2025
74fecb2
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Aug 6, 2025
dfa6170
chore: fix lints
xsahil03x Aug 6, 2025
1433346
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Aug 13, 2025
8376c94
chore: merge fixes
xsahil03x Aug 13, 2025
b138da2
chore: Update Goldens
xsahil03x Aug 13, 2025
2b8a21e
chore(repo): release v10.0.0-beta.5 (#2354)
xsahil03x Aug 13, 2025
c511c68
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Sep 19, 2025
0f8a4f5
chore: Update Goldens
xsahil03x Sep 19, 2025
90d5bc2
fix(ui): ensure dialog confirmation for delete/flag actions (#2384)
xsahil03x Sep 19, 2025
c7c1dd3
fix(ui): enable sending reply in threads for users with sendReply cap…
xsahil03x Sep 23, 2025
74f46ab
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Sep 24, 2025
4d8635c
chore: Update Goldens
xsahil03x Sep 24, 2025
9af6ba2
test: fix tests
xsahil03x Sep 24, 2025
6a52cb0
chore(repo): release v10.0.0-beta.6 (#2393)
xsahil03x Sep 24, 2025
e7576f9
feat(llc, ui): add delete message for me (#2394)
xsahil03x Sep 26, 2025
5a02491
feat(persistence): add deletedForMe and deletedMessages fields (#2395)
xsahil03x Sep 26, 2025
4bb47e1
feat(llc)!: add standalone file/image upload/remove methods (#2396)
xsahil03x Sep 26, 2025
7ba65c2
feat(llc): improve message validation for upload criteria
xsahil03x Oct 9, 2025
bd17255
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Oct 15, 2025
37e0466
chore: merge fixes
xsahil03x Oct 15, 2025
e6f5e25
chore(repo): release v10.0.0-beta.7 (#2417)
xsahil03x Oct 15, 2025
0db0485
feat(llc, persistence): handle user.messages.deleted event (#2423)
xsahil03x Oct 21, 2025
ea361cd
feat(ui): add `attachmentPickerOptionsBuilder` (#2415)
xsahil03x Oct 29, 2025
b38b320
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Oct 29, 2025
76fdb59
chore: update migration guide
xsahil03x Oct 29, 2025
3f89e28
chore(repo): release v10.0.0-beta.8 (#2425)
xsahil03x Oct 29, 2025
f594ac4
feat(ui)!: enhance onAttachmentTap with fallback to default behavior …
xsahil03x Oct 31, 2025
30da524
feat(llc): Store endAt in UTC (#2428)
xsahil03x Nov 3, 2025
182706c
feat(ui): add reactionIndicatorBuilder for custom reaction indicators…
xsahil03x Nov 13, 2025
341973d
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Nov 18, 2025
736a7be
chore: merge fixes
xsahil03x Nov 18, 2025
b5874a1
chore: Update Goldens
xsahil03x Nov 18, 2025
2a117b0
chore(repo): release v10.0.0-beta.9 (#2446)
xsahil03x Nov 18, 2025
302ade6
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Dec 3, 2025
ee5d767
chore: Update Goldens
xsahil03x Dec 3, 2025
e223a99
chore(repo): release v10.0.0-beta.10 (#2458)
xsahil03x Dec 3, 2025
56e021f
chore: Fix version typo in changelog
xsahil03x Dec 3, 2025
976b06f
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Dec 10, 2025
44a4e9d
chore: Update Goldens
xsahil03x Dec 10, 2025
3ceae47
chore(repo): release v10.0.0-beta.11 (#2470)
xsahil03x Dec 10, 2025
276ad42
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Dec 23, 2025
ae9c8ee
fix(ui): fix regression in emoji_code support for reactions (#2474)
xsahil03x Dec 30, 2025
88f8a93
refactor(ui)!: replace ArgumentError with typed errors (#2479)
xsahil03x Jan 14, 2026
c758522
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jan 28, 2026
f8b5f71
chore(repo): bump drift and drift_dev to version 2.28.0
xsahil03x Jan 28, 2026
c7ac636
chore: apply review fixes
xsahil03x Jan 28, 2026
43705e0
chore: fix lints
xsahil03x Jan 28, 2026
7a758b1
chore: fix tests
xsahil03x Jan 28, 2026
4ddccab
chore(repo): release v10.0.0-beta.12 (#2493)
xsahil03x Jan 28, 2026
25bca48
Merge branch 'master' into v10.0.0
xsahil03x Feb 2, 2026
ae4d075
Merge branch 'master' into v10.0.0
xsahil03x Feb 2, 2026
6b3ef7c
chore: update migration.md
xsahil03x Feb 2, 2026
6780dc3
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Feb 4, 2026
210ff93
feat(repo)!: design refresh (#2503)
xsahil03x Apr 10, 2026
de33f88
chore(repo): release v10.0.0-beta.13 (#2609)
renefloor Apr 10, 2026
4428a96
fix release of stream_chat_flutter (#2610)
renefloor Apr 10, 2026
cc8eb16
feat(samples): implement `SampleAppConfig` and modernize UI architech…
xsahil03x Apr 16, 2026
9eaa4a9
refactor(ui): attachment upload and gallery improvements (#2612)
xsahil03x Apr 16, 2026
7107dc7
feat(ui): Simplify icon set (#2619)
renefloor Apr 16, 2026
0f532ff
fix(ui): increase max width for ephemeral Giphy messages (#2615)
xsahil03x Apr 16, 2026
9a1d8a4
refactor(ui): redesign and modernize poll creator components (#2611)
xsahil03x Apr 16, 2026
ca78f2f
fix(ui): qa issues (#2620)
xsahil03x Apr 16, 2026
ac3528a
chore(ui): Cleanup message theme and usages (#2621)
renefloor Apr 17, 2026
29750a3
chore(ui): Cleanup channel preview theme (#2622)
renefloor Apr 17, 2026
97f7614
fix(ui, core, localizations): more QA fixes (#2624)
xsahil03x Apr 21, 2026
fa064e3
refactor(ui): reduce max visible option count for polls to 5 (#2627)
xsahil03x Apr 21, 2026
1a9bcba
feat(ui): thread list banner redesign (#2608)
Brazol Apr 23, 2026
65e68b7
Added exports for theming support (#2628)
renefloor Apr 23, 2026
ac860fb
docs(ui): screenshots (#2559)
renefloor Apr 23, 2026
a813128
fix(ui, persistence, samples): more QA fixes (#2629)
xsahil03x Apr 28, 2026
d0d1d74
feat(ui, localization): redesign poll dialogs as modal bottom sheets …
xsahil03x Apr 28, 2026
8a514fa
docs(ui): update screenshots (#2631)
renefloor Apr 28, 2026
e1417b2
refactor(ui): migrate poll sheets to showStreamSheet (#2634)
xsahil03x Apr 29, 2026
45dde33
docs(ui): screenshot background (#2635)
renefloor Apr 30, 2026
c2cdf29
fix(llc, core, ui, localization): latest QA (#2636)
xsahil03x May 1, 2026
9ddf688
refactor(sample, ui): redesign channel info and detail sheet (#2638)
xsahil03x May 7, 2026
85c6b10
fix(llc, ui, sample): more v10 QA fixes (#2640)
xsahil03x May 8, 2026
4a22a44
refactor(ui, sample)!: align message item naming with android and ios…
xsahil03x May 12, 2026
76a4adf
feat(ui): Move draftlist from sdk to sample app. (#2637)
renefloor May 12, 2026
dfc9213
feat(UI): rename message input (#2642)
renefloor May 13, 2026
3fbd3a8
fix(ui, core): rename input controller to composer controller (#2646)
renefloor May 15, 2026
8bfb68b
refactor(ui, localization, sample)!: redesign media viewer (#2645)
xsahil03x May 15, 2026
a58afdb
chore(deps)!: bump dep floors, widen plus-plugin majors, migrate file…
xsahil03x May 18, 2026
b73bb71
chore(ui): theme cleanup (#2663)
Brazol May 20, 2026
95c77b8
feat(ui): Improve slow mode UI (#2666)
renefloor May 20, 2026
3e5f7d8
fix(llc): require attachment fileSize only when there is a file (#2673)
Brazol May 20, 2026
ea29e6d
docs(ui): make docs snapshots authentic to the production SDK (#2676)
xsahil03x May 21, 2026
101cf0f
chore(sample): Set appversion to main sdk version (#2678)
renefloor May 21, 2026
7ae7874
Feat(ui): simplify messagelist constructor (#2674)
renefloor May 21, 2026
29fc127
docs(ui): showcase, localization, theming, and composer snapshots (#2…
renefloor May 21, 2026
427609a
chore(repo): merge master into v10.0.0 (#2682)
xsahil03x May 26, 2026
0f435f5
Add snapshots for autocomplete (#2687)
renefloor May 27, 2026
2501f53
fix(llc)!: prevent external mutation of ClientState collections (#2686)
xsahil03x May 28, 2026
d713fee
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x May 28, 2026
f0b80d5
merge master
xsahil03x May 28, 2026
3b50b8f
Remove use of svg icon (#2697)
renefloor May 28, 2026
b425866
docs(ui)!: correct migration docs; remove dead MessageDetails (#2680)
renefloor May 29, 2026
d54f2fd
update flutter chat tutorial (#2696)
renefloor May 29, 2026
6d71de9
feat(ui): Update chat sdk defaults (#2691)
renefloor May 29, 2026
ee37fc1
fix(ui): apply filter of supported emoji (#2698)
renefloor May 29, 2026
8fc3f86
fix(ui): preserve composer state when draft stream emits initial null…
xsahil03x Jun 1, 2026
98097fa
feat(ui): sync default message actions with design system (#2701)
xsahil03x Jun 1, 2026
0885ed2
Merge branch 'master' into v10.0.0
xsahil03x Jun 1, 2026
ae51c18
chore(repo): pin .fvmrc to v10's min Flutter 3.38.1
xsahil03x Jun 1, 2026
b25e20b
chore(sample): refresh app icons (#2707)
xsahil03x Jun 2, 2026
cac22c0
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jun 2, 2026
00b4ed1
fix(ui, sample): use StreamChannel.value at remaining sub-route and o…
xsahil03x Jun 2, 2026
af2637a
fix(sample): wire onEditMessageTap in ThreadPage
xsahil03x Jun 2, 2026
cd25dfd
fix(ui): smooth thread-open scroll when highlighting an in-channel reply
xsahil03x Jun 2, 2026
d9b3105
fix(ui): Remove reactionOverlap from config (#2708)
renefloor Jun 2, 2026
7795b10
fix(ui): map xxl avatar to xxl online indicator size (#2711)
xsahil03x Jun 2, 2026
803b70d
feat(ui): factory slots for message item leading, header, footer (#2710)
xsahil03x Jun 3, 2026
b5617c1
Merge remote-tracking branch 'origin/v10.0.0' into v10.0.0
xsahil03x Jun 3, 2026
96863e0
Merge remote-tracking branch 'origin/master' into v10.0.0
xsahil03x Jun 3, 2026
583f7b6
chore(core): apply dart format to stream_channel.dart
xsahil03x Jun 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .fvmrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"flutter": "3.27.4"
}
"flutter": "3.38.1"
}
1 change: 0 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ updates:
# All packages grouped into a single configuration using multi-directory support
- package-ecosystem: "pub"
directories:
- "/sample_app"
- "/packages/stream_chat"
- "/packages/stream_chat_flutter_core"
- "/packages/stream_chat_flutter"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/distribute_internal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ on:
push:
branches:
- master
# TODO: Remove feat/design-refresh once merged to master
- feat/design-refresh
# TODO: Remove once merged to master
- v10.0.0
workflow_dispatch:
inputs:
platform:
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/legacy_version_analyze.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: legacy_version_analyze
env:
# Note: The versions below should be manually updated after a new stable
# version comes out.
flutter_version: "3.27.4"
flutter_version: "3.38.1"

on:
push:
Expand Down Expand Up @@ -65,7 +65,6 @@ jobs:
with:
flutter-version: ${{ env.flutter_version }}
channel: stable
cache: true
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}

- name: πŸ“Š Analyze and test packages
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/stream_flutter_workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ jobs:
with:
filters: |
relevant:
- 'docs/**'
- 'packages/**'
- 'sample_app/**'
- '.github/workflows/stream_flutter_workflow.yml'
Expand Down
131 changes: 124 additions & 7 deletions .github/workflows/update_goldens.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,82 @@
name: update_goldens

on: workflow_dispatch
on:
workflow_dispatch:
inputs:
target:
description: "Which goldens to update"
required: true
type: choice
default: both
options:
- both
- sdk
- docs

jobs:
update_goldens:
update_sdk_goldens:
if: inputs.target == 'sdk' || inputs.target == 'both'
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.detect.outputs.changed }}
steps:
- name: πŸ“š Checkout branch
uses: actions/checkout@v6

- name: 🐦 Install Flutter
uses: subosito/flutter-action@v2
with:
ssh-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }}
flutter-version: "3.x"
channel: stable
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}

- name: πŸ“¦ Install Tools
run: flutter pub global activate melos

- name: πŸ”§ Bootstrap Workspace
run: melos bootstrap --verbose

- name: πŸ–ΌοΈ Update SDK Goldens
continue-on-error: true
run: melos run update:goldens:sdk

- name: πŸ” Detect changed goldens
id: detect
run: |
if [[ -z "$(git status --porcelain -- 'packages/**/test/**/goldens/**/*.png')" ]]; then
echo "changed=false" >> "$GITHUB_OUTPUT"
else
echo "changed=true" >> "$GITHUB_OUTPUT"
fi

- name: πŸ“¦ Bundle SDK goldens
if: steps.detect.outputs.changed == 'true'
run: |
find packages -path '*/test/*/goldens/*' -name '*.png' -print0 \
| tar --null -czf sdk-goldens.tgz -T -

- name: πŸ“€ Upload SDK goldens artifact
if: steps.detect.outputs.changed == 'true'
uses: actions/upload-artifact@v4
with:
name: sdk-goldens
path: sdk-goldens.tgz
retention-days: 1

update_docs_goldens:
if: inputs.target == 'docs' || inputs.target == 'both'
runs-on: macos-latest
outputs:
changed: ${{ steps.detect.outputs.changed }}
steps:
- name: πŸ“š Checkout branch
uses: actions/checkout@v6

- name: 🐦 Install Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.x"
channel: stable
cache: true
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}

- name: πŸ“¦ Install Tools
Expand All @@ -25,14 +85,71 @@ jobs:
- name: πŸ”§ Bootstrap Workspace
run: melos bootstrap --verbose

- name: πŸ–ΌοΈ Update Goldens
- name: πŸ–ΌοΈ Update Docs Goldens
continue-on-error: true
run: melos run update:goldens
run: melos run update:goldens:docs

- name: πŸ” Detect changed goldens
id: detect
run: |
if [[ -z "$(git status --porcelain -- 'docs/**/test/**/goldens/**/*.png')" ]]; then
echo "changed=false" >> "$GITHUB_OUTPUT"
else
echo "changed=true" >> "$GITHUB_OUTPUT"
fi

- name: πŸ“¦ Bundle docs goldens
if: steps.detect.outputs.changed == 'true'
run: |
find docs -path '*/test/*/goldens/*' -name '*.png' -print0 \
| tar --null -czf docs-goldens.tgz -T -

- name: πŸ“€ Upload docs goldens artifact
if: steps.detect.outputs.changed == 'true'
uses: actions/upload-artifact@v4
with:
name: docs-goldens
path: docs-goldens.tgz
retention-days: 1

commit_goldens:
needs: [update_sdk_goldens, update_docs_goldens]
# `always()` lets this run even when one regen job was skipped (e.g. target=sdk).
# We commit only when at least one regen produced actual changes β€” no diff means
# no artifact uploaded, so a workflow run with no golden changes ends as a no-op.
if: |
always() &&
(needs.update_sdk_goldens.outputs.changed == 'true' ||
needs.update_docs_goldens.outputs.changed == 'true')
runs-on: ubuntu-latest
steps:
- name: πŸ“š Checkout branch
uses: actions/checkout@v6
with:
ssh-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }}

- name: πŸ“₯ Download SDK goldens
if: needs.update_sdk_goldens.outputs.changed == 'true'
uses: actions/download-artifact@v4
with:
name: sdk-goldens

- name: πŸ“₯ Download docs goldens
if: needs.update_docs_goldens.outputs.changed == 'true'
uses: actions/download-artifact@v4
with:
name: docs-goldens

- name: πŸ“¦ Extract goldens
run: |
for tgz in sdk-goldens.tgz docs-goldens.tgz; do
[[ -f "$tgz" ]] && tar -xzf "$tgz" && rm "$tgz"
done

- name: πŸ“€ Commit Changes
uses: stefanzweifel/git-auto-commit-action@v7
with:
commit_message: "chore: Update Goldens"
file_pattern: "**/test/**/goldens/*.png"
file_pattern: "**/test/**/goldens/**/*.png"
commit_user_name: "Stream SDK Bot"
commit_user_email: "60655709+Stream-SDK-Bot@users.noreply.github.com"
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ coverage_helper_test.dart
**/doc/api/
pubspec.lock
pubspec_overrides.yaml
devtools_options.yaml
flutter_export_environment.sh
generated_plugin_registrant.*
GeneratedPluginRegistrant.*
Expand Down Expand Up @@ -66,6 +67,7 @@ GeneratedPluginRegistrant.*
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/ephemeral
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
Expand Down
148 changes: 148 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Overview

This is a Dart/Flutter monorepo for Stream Chat's official Flutter SDK, managed with [Melos](https://pub.dev/packages/melos). All packages live under `packages/`.

## Common Commands

### Setup
```bash
melos bootstrap # Fetch and link all dependencies (equivalent to pub get for all packages)
```

### Testing
```bash
melos run test:all # Run all Dart & Flutter tests
melos run test:dart # Run Dart-only tests
melos run test:flutter # Run Flutter tests
# Run tests in a specific package:
cd packages/stream_chat_flutter && flutter test
cd packages/stream_chat_flutter && flutter test test/src/path/to/test_file.dart
```

### Golden Tests
```bash
melos run update:goldens # Regenerate all golden image files
# In CI, CI goldens are used; locally, platform goldens are used (configured via alchemist)
```

### Linting & Formatting
```bash
melos run lint:all # Run analyze + format
melos run analyze # Run dart analyze --fatal-infos on all packages
melos run format # Check formatting (page width: 120)
```

### Code Generation
```bash
melos run generate:all # Run build_runner for all packages
melos run generate:flutter # Run build_runner for Flutter packages only
melos run generate:dart # Run build_runner for Dart packages only
```

### Versioning
```bash
melos run version:update # Regenerate version.dart from pubspec.yaml (runs automatically after bootstrap)
```

## Package Architecture

The SDK is layered β€” each package builds on top of the previous:

```
stream_chat # Pure Dart, no Flutter dependency
└── stream_chat_persistence # Local disk cache using Drift (optional)
└── stream_chat_flutter_core # Flutter business logic, no UI
└── stream_chat_flutter # Full UI component library
└── stream_chat_localizations # i18n for UI components
```

### `stream_chat`
Low-level Dart client. Key types:
- `StreamChatClient` β€” central API client, manages WebSocket, REST, and state
- `Channel` β€” represents a chat channel, has its own state and streaming APIs
- Models in `lib/src/core/models/`: `Message`, `User`, `Member`, `Reaction`, `Poll`, `Event`, `Attachment`, `Draft`, etc.
- Generated code (`.g.dart`, `.freezed.dart`) for JSON serialization/immutable models β€” do not edit manually

### `stream_chat_flutter_core`
Business logic layer. Key types:
- `StreamChatCore` β€” root widget, manages app lifecycle, WebSocket reconnection, and connectivity
- `StreamChannel` β€” provides a `Channel` to the widget tree via `StreamChannel.of(context)`
- `PagedValueNotifier<Key, Value>` β€” base class for all list controllers
- Controllers: `StreamChannelListController`, `StreamMessageListController` (via `MessageListCore`), `StreamUserListController`, `StreamMemberListController`, `StreamThreadListController`, `StreamDraftListController`, `StreamMessageReminderListController`, `StreamPollController`
- `BetterStreamBuilder<T>` β€” efficient StreamBuilder that only rebuilds when data changes

### `stream_chat_flutter`
Full UI package. Key architectural points:

**Root widget hierarchy:**
`StreamChat` β†’ `StreamChatTheme` β†’ `StreamChatConfiguration` β†’ `StreamChatCore` β†’ app content

**Theming:** `StreamChatThemeData` (accessed via `StreamChatTheme.of(context)`) contains per-component theme data objects. Components read their theme from context. `StreamChatConfigurationData` holds non-theme UI config.

**Widget tree integration pattern:**
- `StreamChat.of(context)` β€” get the chat state (current user, client)
- `StreamChannel.of(context)` β€” get the current channel state
- `StreamChatTheme.of(context)` β€” get current theme data

**Key UI components:**
- `StreamChannelListView` + `StreamChannelListTile` β€” channel list using `StreamChannelListController`
- `StreamMessageListView` β€” message list with floating date dividers, unread indicators, thread separators
- `StreamMessageComposer` (full-featured) / `StreamChatMessageInput` (new design system, UI-only) β€” message composition
- `StreamMessageWidget` β€” renders individual messages with attachments, reactions, threads
- Scroll views in `lib/src/scroll_view/` β€” generic paged scroll views for channels, threads, members, users, drafts, polls

**New design system components** (`lib/src/components/`):
- `StreamUserAvatar`, `StreamChannelAvatar`, `StreamUserAvatarGroup` β€” avatar components; these are chat-domain wrappers around the base components in `stream_core_flutter`
- `StreamChatMessageInput` β€” new composer using `MessageComposerFactory` for custom layouts

**Golden tests:** Use `alchemist` package. Platform goldens used locally, CI goldens used in CI (detected via `CI`/`GITHUB_ACTIONS` env vars). Goldens stored alongside tests in `goldens/` subdirectories.

### `stream_chat_localizations`
Provides `StreamChatLocalizations` β€” Flutter localizations delegate with translations for all UI strings.

### `stream_chat_persistence`
Optional local persistence using Drift (SQLite). Implements `ChatPersistenceClient` from `stream_chat`.

## Code Style

- Line length: **120 characters** (configured in `analysis_options.yaml`)
- Imports: always use package imports (`always_use_package_imports`), not relative imports
- All public APIs **must** have doc comments (`public_member_api_docs`)
- Sort constructors first, unnamed constructors before named
- Prefer `const` constructors, `final` locals, single quotes
- Trailing commas: `preserve` (formatter setting)
- Generated files (`.g.dart`, `.freezed.dart`) are excluded from analysis

## PR & Commit Conventions

PR titles follow [Conventional Commits](https://www.conventionalcommits.org/):
- `fix(scope): description` β€” bug fix
- `feat(scope): description` β€” new feature
- `refactor(scope)!: description` β€” breaking change
- `chore(scope): description`, `docs:`, `test:`, etc.

After modifying any package, update its `CHANGELOG.md`.

## Figma Designs

UI designs for this SDK are in the **Chat SDK Design system** Figma project. Use the Figma MCP server to look up designs when implementing or updating UI components.

## `stream_core_flutter` (external sibling repo)

Basic UI components that can be shared across Stream products live in the `stream_core_flutter` package in the **stream-core-flutter** repository (a sibling repo, not inside this monorepo). These components:
- Never depend on chat domain models (`Channel`, `Message`, `User`, etc.)
- Provide primitive building blocks: avatars, layout primitives, theming tokens, etc.

Components in this repo can be wrappers around those base components, adding chat domain models and extra logic on top. For example, `StreamChannelAvatar` wraps the base `StreamAvatarGroup` from `stream_core_flutter` and adds channel-specific member resolution logic.

`stream_core_flutter` types used here are re-exported via a `show` allowlist in `lib/stream_chat_flutter.dart`. When adding a new type from `stream_core_flutter`, add it to that allowlist.

## Dependency Management

Dependencies are centrally managed in `melos.yaml` under `command.bootstrap.dependencies`. Do **not** edit version constraints directly in individual `pubspec.yaml` files β€” update `melos.yaml` and run `melos bootstrap`.

> Note: `stream_chat_flutter` uses a local path dependency to `stream_core_flutter` (pointing to the sibling repo) when making changes to both repos together. Use a git dependency when no local changes to `stream_core_flutter` are needed.
Loading
Loading