Skip to content

feat(repo)!: v10.0.0#2499

Merged
xsahil03x merged 174 commits into
masterfrom
v10.0.0
Jun 9, 2026
Merged

feat(repo)!: v10.0.0#2499
xsahil03x merged 174 commits into
masterfrom
v10.0.0

Conversation

@xsahil03x

@xsahil03x xsahil03x commented Feb 2, 2026

Copy link
Copy Markdown
Member

v10.0.0 — Design Refresh & API Modernization

This is the v10.0.0 major release for Stream Chat Flutter. It introduces a refreshed UI, redesigned customization APIs, new chat features (location sharing, delete-for-me, slow mode UI), and aligns naming with the Android and iOS SDKs.

📖 Full migration guide — start here if you're upgrading from v9.x or any v10 beta.


Headline changes

🎨 SDK redesign (#2503)

A full visual refresh across the entire UI package, synced with the Figma design system. New default theme, updated channel/message/composer/poll/media surfaces, simplified icon set (#2619), default chat SDK defaults updated for v10 (#2691).

💬 New chat features

🧱 Breaking API redesigns

🛠 Other notable changes

🐞 Notable fixes


Scope

Test plan

CI status as of the latest push:

  • Analyzeanalyze, analyze_legacy_versions (Flutter 3.41.0 floor), CodeQL, language-specific analyzers (actions, c-cpp, ruby) all green
  • Formatformat job green (page width 120)
  • Unit + golden tests — all package jobs green: stream_chat, stream_chat_flutter, stream_chat_flutter_core, stream_chat_localizations, stream_chat_persistence
  • iOSbuild (ios) and ios end-to-end green
  • Coveragecodecov/patch and codecov/project green
  • Repo gatescheck_entity_modifications, conventional_pr_title, semantic_changelog_update green
  • Androidbuild (android), android, ios_testflight jobs still running on the latest commit
  • Sample app smoke against a live channel: send/edit/delete messages, react, share location, create poll, change channel info
  • Migration guide validated end-to-end against a v9.x upgrade in a scratch project
  • Existing beta consumers verified against v10.0.0-beta.1310.0.0

🤖 Generated with Claude Code

xsahil03x and others added 30 commits May 26, 2025 16:59
Co-authored-by: xsahil03x <25670178+xsahil03x@users.noreply.github.com>
Co-authored-by: xsahil03x <25670178+xsahil03x@users.noreply.github.com>
Co-authored-by: xsahil03x <25670178+xsahil03x@users.noreply.github.com>
# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
Co-authored-by: xsahil03x <25670178+xsahil03x@users.noreply.github.com>
# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
#	packages/stream_chat_flutter_core/CHANGELOG.md
# Conflicts:
#	melos.yaml
#	packages/stream_chat/CHANGELOG.md
#	packages/stream_chat/example/pubspec.yaml
#	packages/stream_chat/lib/version.dart
#	packages/stream_chat/pubspec.yaml
#	packages/stream_chat_flutter/example/pubspec.yaml
#	packages/stream_chat_flutter/pubspec.yaml
#	packages/stream_chat_flutter_core/example/pubspec.yaml
#	packages/stream_chat_flutter_core/pubspec.yaml
#	packages/stream_chat_localizations/CHANGELOG.md
#	packages/stream_chat_localizations/example/pubspec.yaml
#	packages/stream_chat_localizations/pubspec.yaml
#	packages/stream_chat_persistence/CHANGELOG.md
#	packages/stream_chat_persistence/example/pubspec.yaml
#	packages/stream_chat_persistence/pubspec.yaml
#	sample_app/pubspec.yaml
# Conflicts:
#	packages/stream_chat/CHANGELOG.md
#	packages/stream_chat_flutter_core/CHANGELOG.md
# Conflicts:
#	melos.yaml
#	packages/stream_chat/CHANGELOG.md
#	packages/stream_chat/example/pubspec.yaml
#	packages/stream_chat/lib/version.dart
#	packages/stream_chat/pubspec.yaml
#	packages/stream_chat_flutter/CHANGELOG.md
#	packages/stream_chat_flutter/example/pubspec.yaml
#	packages/stream_chat_flutter/pubspec.yaml
#	packages/stream_chat_flutter_core/example/pubspec.yaml
#	packages/stream_chat_flutter_core/pubspec.yaml
#	packages/stream_chat_localizations/CHANGELOG.md
#	packages/stream_chat_localizations/example/pubspec.yaml
#	packages/stream_chat_localizations/pubspec.yaml
#	packages/stream_chat_persistence/CHANGELOG.md
#	packages/stream_chat_persistence/example/pubspec.yaml
#	packages/stream_chat_persistence/pubspec.yaml
#	sample_app/pubspec.yaml
Co-authored-by: xsahil03x <25670178+xsahil03x@users.noreply.github.com>
# Conflicts:
#	packages/stream_chat/CHANGELOG.md
#	packages/stream_chat_flutter_core/CHANGELOG.md
# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
#	packages/stream_chat_flutter/lib/src/message_input/stream_message_input.dart
#	packages/stream_chat_persistence/CHANGELOG.md
The animation curves and durations for the reaction picker and message modal have been updated for a smoother user experience.

- The `reaction_picker_icon_list.dart` animation curve is now `Curves.easeOutBack` and the duration is 335 milliseconds.
- The `message_modal.dart` transition duration is now 335 milliseconds, and the scale animation curve is `Curves.easeOutBack`.
# Conflicts:
#	packages/stream_chat_persistence/CHANGELOG.md
#	packages/stream_chat_persistence/lib/src/db/drift_chat_database.dart
xsahil03x and others added 7 commits June 3, 2026 09:58
# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…attachment validation (#2706)

* Add appSettings API for upload config

* rename sizeLimit

* Added validation also for dropping attachments

* fix doc for maxAttachmentSize

* cover localizations

* fix(ui): remove padding from StreamPhotoGallery

* Wrap `StreamPhotoGallery` with `MediaQuery.removePadding` to fix a bottom padding issue in the gallery picker.

* refactor(llc, ui): restructure appSettings into AppSettingsManager and StreamAttachmentValidator

LLC:
- Move appSettings caching into a dedicated AppSettingsManager owned by the
  client; expose `client.appSettings` (cached) and `client.getAppSettings()`
  (refresh). Auto-loads on connect, clears on disconnect.
- Drop the `UploadConfig.isAllowed` helper — validation logic lives in the
  UI package where it has access to translations and the composer error sheet.
- Add `UploadConfig.defaultSizeLimit` (100 MB, matching backend default).
- Make `AppSettings` and `UploadConfig` equatable.

UI:
- Add `StreamAttachmentValidator` — a stateless rule set built from
  `AppSettings`. Exposes `validateCount(int)` and `validate(Attachment)`
  that return typed errors instead of throwing.
- Add typed errors `AttachmentLimitReachedError`, `AttachmentTooLargeError`,
  and `AttachmentBlockedError`.
- `StreamAttachmentPickerController` now takes a single `validator` param.
- `StreamMessageComposer` validates picked/pasted/dropped attachments via
  the validator (built from `client.appSettings`) and surfaces the first
  failure through the localized error sheet.
- Remove `StreamMessageComposer.maxAttachmentSize`, `onAttachmentLimitExceed`,
  the `AttachmentLimitExceedListener` typedef, and `kDefaultMaxAttachmentSize`.
- `attachmentLimit` becomes non-nullable, defaulting to
  `StreamAttachmentValidator.defaultMaxAttachmentCount` (30 — the backend cap).

Tests:
- 9 new tests for `AppSettingsManager` (cache, refresh, clear, error swallow).
- 28 tests for `StreamAttachmentValidator` covering both lists across both
  dimensions, size fallback, image/file routing, compound extensions, and
  count validation.

Docs:
- Update CHANGELOGs for both packages to reflect the shipped surface.
- Rewrite the `attachmentLimit` section in `migrations/redesign/message_composer.md`
  and add an "AppSettings-driven attachment validation" section.
- Add `AttachmentBlockedError` to the typed-errors section in
  `migrations/v10-migration.md`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: point custom-error-UI guidance to StreamMessageComposer.onError

`onError` on the composer short-circuits the default error sheet and
receives the typed validator errors directly, so it's the right hook
for custom UI. The previous wording reached past the composer into
`StreamAttachmentPickerController.addAttachment`, which leaked
internal wiring.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: document new fileTypeNotSupportedError translation key

Add the new abstract member to:
- migrations/redesign/localizations.md (New Required Abstract Members + checklist count)
- stream_chat_localizations CHANGELOG (Added)
- stream_chat_flutter CHANGELOG (cross-references the localizations migration)

The key is mandatory for any custom Translations subclass and was missing
from the migration docs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(localizations): use early-return in fileTypeNotSupportedError

Replace the inline ternary with an explicit early-return for the
extension-known branch across all locale implementations, the
DefaultTranslations base, the example custom-locale, and the migration
guide.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* i18n: translate fileTypeNotSupportedError across all locales

Replace the English fallback with actual translations in ca, de, es, fr,
hi, it, ja, ko, no, and pt — matching the tone of the adjacent
fileTooLargeError in each locale.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: attribute upload config to Stream Dashboard, not the backend

The size/extension/MIME lists in AppSettings are configured by customers
in the Stream Dashboard and served via GET /app — they're not defined by
the backend. References to "backend-configured" / "the backend value" /
"by the backend" mis-attributed the source; updated to "app-configured"
or "configured in the Stream Dashboard".

Kept "backend" where it's still correct:
- The hard-coded MaxNumberOfMessageAttachments = 30 cap (a backend constant).
- Server-side enforcement (the server does reject mis-typed messages).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: drop "construct your own picker controller" suggestion

The picker controller is constructed inside StreamMessageComposer, not
by SDK users, so suggesting they instantiate one to inject a custom
validator was misleading.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: tighten changelog entries to public surface only

Drop impl details from the AppSettings changelog entries — users care
about the public API (StreamChatClient.appSettings, the typed errors
via onError, the new translation key, the removed/changed composer
params) not about how the SDK loads, caches, or wires things together
under the hood.

Removed entries for StreamAttachmentValidator (plumbing — users never
construct it) and the standalone "Added typed validator errors" line
(the errors are mentioned where they matter, inside the composer
behavior entry).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: drop duplicate migration-doc links from changelog entries

Multiple breaking entries linked to the same message_composer.md
section; the localizations entry duplicated the catch-all link
already present further down. Readers find the migration docs through
the normal route.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: trim verbose changelog entries to match neighbour density

- Tighten the composer-validates entry from two long sentences to two
  short ones (drops "every picked, pasted, and dropped attachment" and
  the "render your own UI" tail).
- Drop the trailing "Required override on any custom Translations
  subclass" — line 58 catch-all already states this.
- Restore the "(replaces the previous size / limit / config parameters)"
  context on the picker controller breaking entry — it's migration info,
  not impl detail, and matches the rename-style neighbours.
- Tighten the localizations changelog entry to two lines, matching the
  threadLabel / commandUsernameLabel format.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(localizations): drop UI context from changelog entry

The stream_chat_localizations package doesn't know which UI surface
consumes a translation; localizations CHANGELOG entries should describe
the translation itself, not the consumer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Sahil Kumar <sahil@getstream.io>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Sahil Kumar <xdsahil@gmail.com>
xsahil03x and others added 4 commits June 4, 2026 12:48
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* deprecate typedef

* deprecate icons

---------

Co-authored-by: Sahil Kumar <xdsahil@gmail.com>
Comment thread .github/workflows/update_goldens.yml Dismissed
Comment thread .github/workflows/update_goldens.yml Dismissed
@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/GetStream/stream-chat-flutter/issues/comments/3835441827","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: skip review by coderabbit.ai -->\n\n> [!IMPORTANT]\n> ## Review skipped\n> \n> Too many files!\n> \n> This PR contains 227 files, which is 77 over the limit of 150.\n> \n> To get a review, narrow the scope:\n>   • coderabbit review --type committed     # exclude uncommitted changes\n>   • coderabbit review --dir <path>         # limit to a subdirectory\n>   • coderabbit review --base <branch>      # compare against a closer base\n> \n> <details>\n> <summary>⚙️ Run configuration</summary>\n> \n> **Configuration used**: defaults\n> \n> **Review profile**: CHILL\n> \n> **Plan**: Pro\n> \n> **Run ID**: `f7e29025-773b-4aa3-84d6-91d8d910fcad`\n> \n> </details>\n> \n> <details>\n> <summary>📥 Commits</summary>\n> \n> Reviewing files that changed from the base of the PR and between 13798f045dcfd24ac59ff65340ab2a40c7f81afe and 5746058e1820565074d0bc21541d608b60d16b90.\n> \n> </details>\n> \n> <details>\n> <summary>⛔ Files ignored due to path filters (73)</summary>\n> \n> * `docs/docs_screenshots/test/channel/goldens/macos/channel_header.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/channel_header_custom_title.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/channel_list_header.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/channel_list_header_custom_subtitle.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/channel_list_header_custom_title.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/channel_list_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/channel_preview.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/slidable_channel_list.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/channel/goldens/macos/swipe_channel.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/amelia-moore.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/charlotte-anderson.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/elena-barros.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/elisa-ramirez.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/ethan-wilson.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/james-garcia.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/jason-thompson.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/liam-johnson.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/lina-park.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/mateo-alvarez.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/maya-ross.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/mia-thompson.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/noah-smith.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/oliver-schmidt.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/omar-jackson.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/sophia-lee.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/sophie-laurent.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/fixtures/avatars/wesley-lau.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/localization/goldens/macos/localization_support.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/member_list/goldens/macos/member_grid_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/member_list/goldens/macos/member_list_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/autocomplete_trigger_commands.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/autocomplete_trigger_mention.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/message_composer_slow_mode.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/message_input.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/message_input_change_position.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/message_input_custom_buttons.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/message_input_custom_send_icon.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/message_input_quoted_message.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_input/goldens/macos/stream_message_composer_default.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_list_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_list_view_pin.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_list_view_threads.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_reaction_theming.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_rounded_avatar.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_styles.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_theming.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_list/goldens/macos/message_widget_actions.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/message_search/goldens/macos/message_search_list_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/polls/goldens/macos/poll_creator.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/polls/goldens/macos/poll_interactor.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/polls/goldens/macos/polls_composer.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/reactions/goldens/macos/reaction_detail_sheet.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/reactions/goldens/macos/reaction_list_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/reactions/goldens/macos/reaction_picker.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/reactions/goldens/macos/reaction_position_footer.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/reactions/goldens/macos/reaction_position_header.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/theming/goldens/macos/theming_default.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/theming/goldens/macos/theming_red.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/thread_list/goldens/macos/thread_list_tile_custom.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/thread_list/goldens/macos/thread_list_unread_banner.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/thread_list/goldens/macos/thread_list_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/thread_list/goldens/macos/thread_list_view_empty.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/user_list/goldens/macos/user_list_view.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_attachment.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_attachment_custom.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_attachment_playing.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_enabled.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_finished.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_hold_recording.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_idle.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_idle_tooltip.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_locked_recording.png` is excluded by `!**/*.png`\n> * `docs/docs_screenshots/test/voice_recording/goldens/macos/voice_recording_stopped.png` is excluded by `!**/*.png`\n> \n> </details>\n> \n> <details>\n> <summary>📒 Files selected for processing (227)</summary>\n> \n> * `.fvmrc`\n> * `.github/dependabot.yml`\n> * `.github/workflows/distribute_internal.yml`\n> * `.github/workflows/legacy_version_analyze.yml`\n> * `.github/workflows/stream_flutter_workflow.yml`\n> * `.github/workflows/update_goldens.yml`\n> * `.gitignore`\n> * `CLAUDE.md`\n> * `analysis_options.yaml`\n> * `docs/analysis_options.yaml`\n> * `docs/docs_screenshots/.fvmrc`\n> * `docs/docs_screenshots/.gitignore`\n> * `docs/docs_screenshots/dart_test.yaml`\n> * `docs/docs_screenshots/pubspec.yaml`\n> * `docs/docs_screenshots/test/channel/channel_header_test.dart`\n> * `docs/docs_screenshots/test/channel/channel_list_header_test.dart`\n> * `docs/docs_screenshots/test/channel/channel_preview_test.dart`\n> * `docs/docs_screenshots/test/flutter_test_config.dart`\n> * `docs/docs_screenshots/test/localization/localization_support_test.dart`\n> * `docs/docs_screenshots/test/member_list/member_list_test.dart`\n> * `docs/docs_screenshots/test/message_input/autocomplete_triggers_test.dart`\n> * `docs/docs_screenshots/test/message_input/stream_message_composer_test.dart`\n> * `docs/docs_screenshots/test/message_list/message_list_view_test.dart`\n> * `docs/docs_screenshots/test/message_list/message_widget_test.dart`\n> * `docs/docs_screenshots/test/message_search/message_search_list_view_test.dart`\n> * `docs/docs_screenshots/test/polls/poll_test.dart`\n> * `docs/docs_screenshots/test/reactions/reactions_test.dart`\n> * `docs/docs_screenshots/test/src/fakes.dart`\n> * `docs/docs_screenshots/test/src/golden_client_stubs.dart`\n> * `docs/docs_screenshots/test/src/golden_component_factory.dart`\n> * `docs/docs_screenshots/test/src/golden_network_image.dart`\n> * `docs/docs_screenshots/test/src/golden_theme.dart`\n> * `docs/docs_screenshots/test/src/mocks.dart`\n> * `docs/docs_screenshots/test/src/sample_users.dart`\n> * `docs/docs_screenshots/test/theming/theming_test.dart`\n> * `docs/docs_screenshots/test/thread_list/thread_list_view_test.dart`\n> * `docs/docs_screenshots/test/user_list/user_list_view_test.dart`\n> * `docs/docs_screenshots/test/voice_recording/voice_recording_test.dart`\n> * `melos.yaml`\n> * `migrations/redesign/README.md`\n> * `migrations/redesign/attachments_and_polls.md`\n> * `migrations/redesign/audio_theme.md`\n> * `migrations/redesign/channel_list_item.md`\n> * `migrations/redesign/headers_and_icons.md`\n> * `migrations/redesign/image_cdn.md`\n> * `migrations/redesign/localizations.md`\n> * `migrations/redesign/media_viewer.md`\n> * `migrations/redesign/message_actions.md`\n> * `migrations/redesign/message_composer.md`\n> * `migrations/redesign/message_list.md`\n> * `migrations/redesign/message_widget.md`\n> * `migrations/redesign/reaction_list.md`\n> * `migrations/redesign/reaction_picker.md`\n> * `migrations/redesign/stream_avatar.md`\n> * `migrations/redesign/unread_indicator.md`\n> * `migrations/redesign/unread_indicator_button.md`\n> * `migrations/v10-migration.md`\n> * `packages/stream_chat/CHANGELOG.md`\n> * `packages/stream_chat/example/lib/main.dart`\n> * `packages/stream_chat/example/pubspec.yaml`\n> * `packages/stream_chat/lib/src/client/channel.dart`\n> * `packages/stream_chat/lib/src/client/channel_delivery_reporter.dart`\n> * `packages/stream_chat/lib/src/client/client.dart`\n> * `packages/stream_chat/lib/src/client/event_resolvers.dart`\n> * `packages/stream_chat/lib/src/client/key_stroke_handler.dart`\n> * `packages/stream_chat/lib/src/client/retry_policy.dart`\n> * `packages/stream_chat/lib/src/client/retry_queue.dart`\n> * `packages/stream_chat/lib/src/core/api/attachment_file_uploader.dart`\n> * `packages/stream_chat/lib/src/core/api/call_api.dart`\n> * `packages/stream_chat/lib/src/core/api/channel_api.dart`\n> * `packages/stream_chat/lib/src/core/api/device_api.dart`\n> * `packages/stream_chat/lib/src/core/api/general_api.dart`\n> * `packages/stream_chat/lib/src/core/api/message_api.dart`\n> * `packages/stream_chat/lib/src/core/api/requests.dart`\n> * `packages/stream_chat/lib/src/core/api/requests.g.dart`\n> * `packages/stream_chat/lib/src/core/api/responses.dart`\n> * `packages/stream_chat/lib/src/core/api/responses.g.dart`\n> * `packages/stream_chat/lib/src/core/api/sort_order.dart`\n> * `packages/stream_chat/lib/src/core/api/sort_order.g.dart`\n> * `packages/stream_chat/lib/src/core/api/stream_chat_api.dart`\n> * `packages/stream_chat/lib/src/core/api/user_api.dart`\n> * `packages/stream_chat/lib/src/core/error/chat_error_code.dart`\n> * `packages/stream_chat/lib/src/core/error/stream_chat_error.dart`\n> * `packages/stream_chat/lib/src/core/http/app_settings_manager.dart`\n> * `packages/stream_chat/lib/src/core/http/interceptor/logging_interceptor.dart`\n> * `packages/stream_chat/lib/src/core/http/stream_chat_dio_error.dart`\n> * `packages/stream_chat/lib/src/core/http/stream_http_client.dart`\n> * `packages/stream_chat/lib/src/core/http/stream_http_client_options.dart`\n> * `packages/stream_chat/lib/src/core/http/system_environment_manager.dart`\n> * `packages/stream_chat/lib/src/core/http/token.dart`\n> * `packages/stream_chat/lib/src/core/http/token_manager.dart`\n> * `packages/stream_chat/lib/src/core/models/action.g.dart`\n> * `packages/stream_chat/lib/src/core/models/app_settings.dart`\n> * `packages/stream_chat/lib/src/core/models/app_settings.g.dart`\n> * `packages/stream_chat/lib/src/core/models/attachment.dart`\n> * `packages/stream_chat/lib/src/core/models/attachment.g.dart`\n> * `packages/stream_chat/lib/src/core/models/attachment_file.dart`\n> * `packages/stream_chat/lib/src/core/models/attachment_file.freezed.dart`\n> * `packages/stream_chat/lib/src/core/models/attachment_file.g.dart`\n> * `packages/stream_chat/lib/src/core/models/attachment_giphy_info.dart`\n> * `packages/stream_chat/lib/src/core/models/banned_user.dart`\n> * `packages/stream_chat/lib/src/core/models/banned_user.g.dart`\n> * `packages/stream_chat/lib/src/core/models/call_payload.dart`\n> * `packages/stream_chat/lib/src/core/models/call_payload.g.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_config.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_config.g.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_model.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_model.g.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_mute.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_mute.g.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_state.dart`\n> * `packages/stream_chat/lib/src/core/models/channel_state.g.dart`\n> * `packages/stream_chat/lib/src/core/models/command.dart`\n> * `packages/stream_chat/lib/src/core/models/command.g.dart`\n> * `packages/stream_chat/lib/src/core/models/comparable_field.dart`\n> * `packages/stream_chat/lib/src/core/models/device.g.dart`\n> * `packages/stream_chat/lib/src/core/models/draft.dart`\n> * `packages/stream_chat/lib/src/core/models/draft.g.dart`\n> * `packages/stream_chat/lib/src/core/models/draft_message.dart`\n> * `packages/stream_chat/lib/src/core/models/draft_message.g.dart`\n> * `packages/stream_chat/lib/src/core/models/event.dart`\n> * `packages/stream_chat/lib/src/core/models/event.g.dart`\n> * `packages/stream_chat/lib/src/core/models/filter.dart`\n> * `packages/stream_chat/lib/src/core/models/location.dart`\n> * `packages/stream_chat/lib/src/core/models/location.g.dart`\n> * `packages/stream_chat/lib/src/core/models/location_coordinates.dart`\n> * `packages/stream_chat/lib/src/core/models/member.dart`\n> * `packages/stream_chat/lib/src/core/models/member.g.dart`\n> * `packages/stream_chat/lib/src/core/models/message.dart`\n> * `packages/stream_chat/lib/src/core/models/message.g.dart`\n> * `packages/stream_chat/lib/src/core/models/message_delete_scope.dart`\n> * `packages/stream_chat/lib/src/core/models/message_delete_scope.freezed.dart`\n> * `packages/stream_chat/lib/src/core/models/message_delete_scope.g.dart`\n> * `packages/stream_chat/lib/src/core/models/message_delivery.g.dart`\n> * `packages/stream_chat/lib/src/core/models/message_reminder.dart`\n> * `packages/stream_chat/lib/src/core/models/message_reminder.g.dart`\n> * `packages/stream_chat/lib/src/core/models/message_state.dart`\n> * `packages/stream_chat/lib/src/core/models/message_state.freezed.dart`\n> * `packages/stream_chat/lib/src/core/models/message_state.g.dart`\n> * `packages/stream_chat/lib/src/core/models/moderation.dart`\n> * `packages/stream_chat/lib/src/core/models/moderation.g.dart`\n> * `packages/stream_chat/lib/src/core/models/mute.g.dart`\n> * `packages/stream_chat/lib/src/core/models/own_user.dart`\n> * `packages/stream_chat/lib/src/core/models/own_user.g.dart`\n> * `packages/stream_chat/lib/src/core/models/poll.dart`\n> * `packages/stream_chat/lib/src/core/models/poll.g.dart`\n> * `packages/stream_chat/lib/src/core/models/poll_option.dart`\n> * `packages/stream_chat/lib/src/core/models/poll_option.g.dart`\n> * `packages/stream_chat/lib/src/core/models/poll_vote.dart`\n> * `packages/stream_chat/lib/src/core/models/poll_vote.g.dart`\n> * `packages/stream_chat/lib/src/core/models/poll_voting_mode.freezed.dart`\n> * `packages/stream_chat/lib/src/core/models/privacy_settings.g.dart`\n> * `packages/stream_chat/lib/src/core/models/push_preference.dart`\n> * `packages/stream_chat/lib/src/core/models/push_preference.g.dart`\n> * `packages/stream_chat/lib/src/core/models/reaction.dart`\n> * `packages/stream_chat/lib/src/core/models/reaction.g.dart`\n> * `packages/stream_chat/lib/src/core/models/reaction_group.dart`\n> * `packages/stream_chat/lib/src/core/models/reaction_group.g.dart`\n> * `packages/stream_chat/lib/src/core/models/read.dart`\n> * `packages/stream_chat/lib/src/core/models/read.g.dart`\n> * `packages/stream_chat/lib/src/core/models/thread.dart`\n> * `packages/stream_chat/lib/src/core/models/thread.g.dart`\n> * `packages/stream_chat/lib/src/core/models/thread_participant.dart`\n> * `packages/stream_chat/lib/src/core/models/thread_participant.g.dart`\n> * `packages/stream_chat/lib/src/core/models/unread_counts.dart`\n> * `packages/stream_chat/lib/src/core/models/unread_counts.g.dart`\n> * `packages/stream_chat/lib/src/core/models/user.dart`\n> * `packages/stream_chat/lib/src/core/models/user.g.dart`\n> * `packages/stream_chat/lib/src/core/models/user_block.dart`\n> * `packages/stream_chat/lib/src/core/models/user_block.g.dart`\n> * `packages/stream_chat/lib/src/core/platform_detector/platform_detector.dart`\n> * `packages/stream_chat/lib/src/core/util/event_controller.dart`\n> * `packages/stream_chat/lib/src/core/util/extension.dart`\n> * `packages/stream_chat/lib/src/core/util/immutable_collection_subjects.dart`\n> * `packages/stream_chat/lib/src/core/util/list_extensions.dart`\n> * `packages/stream_chat/lib/src/core/util/message_rules.dart`\n> * `packages/stream_chat/lib/src/core/util/serializer.dart`\n> * `packages/stream_chat/lib/src/core/util/utils.dart`\n> * `packages/stream_chat/lib/src/db/chat_persistence_client.dart`\n> * `packages/stream_chat/lib/src/event_type.dart`\n> * `packages/stream_chat/lib/src/permission_type.dart`\n> * `packages/stream_chat/lib/src/ws/connect_user_details.g.dart`\n> * `packages/stream_chat/lib/src/ws/websocket.dart`\n> * `packages/stream_chat/lib/stream_chat.dart`\n> * `packages/stream_chat/lib/version.dart`\n> * `packages/stream_chat/pubspec.yaml`\n> * `packages/stream_chat/test/fixtures/app_settings.json`\n> * `packages/stream_chat/test/fixtures/channel_state_to_json.json`\n> * `packages/stream_chat/test/fixtures/member.json`\n> * `packages/stream_chat/test/fixtures/message.json`\n> * `packages/stream_chat/test/fixtures/message_to_json.json`\n> * `packages/stream_chat/test/fixtures/reaction.json`\n> * `packages/stream_chat/test/src/client/channel_delivery_reporter_test.dart`\n> * `packages/stream_chat/test/src/client/channel_test.dart`\n> * `packages/stream_chat/test/src/client/client_test.dart`\n> * `packages/stream_chat/test/src/client/event_resolvers_test.dart`\n> * `packages/stream_chat/test/src/client/retry_queue_test.dart`\n> * `packages/stream_chat/test/src/core/api/attachment_file_uploader_test.dart`\n> * `packages/stream_chat/test/src/core/api/call_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/channel_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/device_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/general_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/guest_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/message_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/moderation_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/polls_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/reminders_api_test.dart`\n> * `packages/stream_chat/test/src/core/api/responses_test.dart`\n> * `packages/stream_chat/test/src/core/api/sort_order_test.dart`\n> * `packages/stream_chat/test/src/core/api/user_api_test.dart`\n> * `packages/stream_chat/test/src/core/error/stream_chat_error_test.dart`\n> * `packages/stream_chat/test/src/core/http/adapter/custom_adapter_test.dart`\n> * `packages/stream_chat/test/src/core/http/app_settings_manager_test.dart`\n> * `packages/stream_chat/test/src/core/http/interceptor/auth_interceptor_test.dart`\n> * `packages/stream_chat/test/src/core/http/stream_http_client_test.dart`\n> * `packages/stream_chat/test/src/core/http/token_manager_test.dart`\n> * `packages/stream_chat/test/src/core/http/token_test.dart`\n> * `packages/stream_chat/test/src/core/models/app_settings_test.dart`\n> * `packages/stream_chat/test/src/core/models/attachment_file_test.dart`\n> * `packages/stream_chat/test/src/core/models/attachment_giphy_info_test.dart`\n> * `packages/stream_chat/test/src/core/models/attachment_test.dart`\n> * `packages/stream_chat/test/src/core/models/call_payload_test.dart`\n> * `packages/stream_chat/test/src/core/models/channel_state_test.dart`\n> * `packages/stream_chat/test/src/core/models/draft_message_test.dart`\n> * `packages/stream_chat/test/src/core/models/event_test.dart`\n> * `packages/stream_chat/test/src/core/models/location_test.dart`\n> * `packages/stream_chat/test/src/core/models/member_test.dart`\n> \n> </details>\n> \n> You can disable this status message by setting the `reviews.review_status` to `false` in the CodeRabbit configuration file.\n> \n> Use the checkbox below for a quick retry:\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: skip review by coderabbit.ai -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Commit unit tests in branch `v10.0.0`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=GetStream/stream-chat-flutter&utm_content=2499)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->"},"request":{"retryCount":3,"signal":{},"retries":3,"retryAfter":16}}}

xsahil03x and others added 9 commits June 5, 2026 11:59
* docs(screenshots): add delivery states, avatar factory, and composer header goldens

New golden tests for docs screenshots:
- message_delivery_states: four StreamSendingIndicator states (sending/sent/delivered/read)
- avatar_group_custom / avatar_stack_custom: custom avatarGroup and avatarStack factory slots
- message_composer_input_header: custom messageComposerInputHeader slot with a banner

Avatar tests register networkImage: goldenNetworkImageBuilder in the inner
StreamComponentFactory so the outer GoldenComponentFactory's image stub isn't shadowed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Add emoji autocomplete example

* Add channellist draft and RTL screenshots

* Add tests for default avatars

* chore: Update Goldens

* fix formatting and pubspec order

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: renefloor <15101411+renefloor@users.noreply.github.com>
Co-authored-by: Sahil Kumar <xdsahil@gmail.com>
* update core_flutter package

* removed todo
Restores the missing piece from #2726 that wasn't carried over in the
master -> v10.0.0 merge. CHANGELOGs already advertised the switch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* perf(persistence): Reduce the number of read message per channel from DB when paginating (part 1) (#2679)

* refactor(dao): Filter reactions by userId at DB level.

* refactor(dao): Filter reactions by userId at DB level (pinned messages).

* refactor(dao): optimize message retrieval with SQL-side pagination filters

* refactor(dao): fix formatting

* refactor(dao): Update CHANGELOG.md

* refactor(dao): Apply formatting

* refactor(dao): enhance message pagination logic to support inclusive cursors

* refactor(dao): Update docs

* refactor(dao): Add message.id tiebreakier

* refactor(dao): Add message.id tiebreaker

* refactor(dao): Update CHANGELOG.md

* perf(persistence): Reduce the number of read message per channel from DB when paginating (part 2) (#2681)

* refactor(dao): Filter reactions by userId at DB level.

* refactor(dao): Filter reactions by userId at DB level (pinned messages).

* refactor(dao): optimize message retrieval with SQL-side pagination filters

* refactor(dao): fix formatting

* refactor(dao): Update CHANGELOG.md

* refactor(dao): Apply formatting

* refactor(dao): optimize message and reaction retrieval with grouped queries

* refactor(dao): add tests for new methods

* refactor(dao): enhance message pagination logic to support inclusive cursors

* refactor(dao): Update docs

* refactor(dao): Remove legacy method

* refactor(dao): Remove legacy method

* refactor(dao): Remove legacy method

* refactor(dao): Fix warnings

* refactor(dao): Add message.id tiebreakier

* refactor(dao): Add message.id tiebreaker

* refactor(dao): Update CHANGELOG.md

* fix(persistence): Prevent fetching drafts/quotes for quoted messages.

* chore(repo): release v9.25.0 (#2730)

* feat(persistence): Add batched getLocationsByMessageIds.

* Clean-up location dao.

* Fix formatting.

* Fix PR remarks.

---------

Co-authored-by: Sahil Kumar <xdsahil@gmail.com>
# Conflicts:
#	melos.yaml
#	packages/stream_chat/CHANGELOG.md
#	packages/stream_chat/example/pubspec.yaml
#	packages/stream_chat/lib/version.dart
#	packages/stream_chat/pubspec.yaml
#	packages/stream_chat_flutter/CHANGELOG.md
#	packages/stream_chat_flutter/example/pubspec.yaml
#	packages/stream_chat_flutter/pubspec.yaml
#	packages/stream_chat_flutter_core/CHANGELOG.md
#	packages/stream_chat_flutter_core/example/pubspec.yaml
#	packages/stream_chat_flutter_core/pubspec.yaml
#	packages/stream_chat_localizations/CHANGELOG.md
#	packages/stream_chat_localizations/example/pubspec.yaml
#	packages/stream_chat_localizations/pubspec.yaml
#	packages/stream_chat_persistence/CHANGELOG.md
#	packages/stream_chat_persistence/example/pubspec.yaml
#	packages/stream_chat_persistence/lib/src/dao/draft_message_dao.dart
#	packages/stream_chat_persistence/lib/src/dao/message_dao.dart
#	packages/stream_chat_persistence/lib/src/dao/pinned_message_dao.dart
#	packages/stream_chat_persistence/lib/src/dao/pinned_message_reaction_dao.dart
#	packages/stream_chat_persistence/lib/src/dao/poll_dao.dart
#	packages/stream_chat_persistence/lib/src/dao/reaction_dao.dart
#	packages/stream_chat_persistence/lib/src/db/query_utils.dart
#	packages/stream_chat_persistence/pubspec.yaml
#	packages/stream_chat_persistence/test/src/dao/draft_message_dao_test.dart
#	packages/stream_chat_persistence/test/src/dao/message_dao_test.dart
#	packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart
#	packages/stream_chat_persistence/test/src/dao/pinned_message_reaction_dao_test.dart
#	packages/stream_chat_persistence/test/src/dao/poll_dao_test.dart
#	packages/stream_chat_persistence/test/src/dao/poll_vote_dao_test.dart
#	packages/stream_chat_persistence/test/src/dao/reaction_dao_test.dart
#	sample_app/pubspec.yaml
* update sdk readmes

* fix review issues

* make hero image smaller
@xsahil03x xsahil03x merged commit 29d4515 into master Jun 9, 2026
35 of 36 checks passed
@xsahil03x xsahil03x deleted the v10.0.0 branch June 9, 2026 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants