Skip to content

fix: keep emoji intact in avatar initials (#3927) - #3930

Merged
isekovanic merged 1 commit into
mainfrom
develop
Nov 4, 2026
Merged

isekovanic merged 1 commit into
mainfrom
develop

Conversation

@isekovanic

Copy link
Copy Markdown
Contributor

🎯 Goal

Closes #3922
Closes RN-507

Avatar initials took charAt(0) of each word, which splits emoji stored as surrogate pairs, so a name like πŸ˜€ Smiley rendered as οΏ½S.

πŸ›  Implementation details

Words that start with an emoji now keep the whole emoji, including skin tones, flags and ZWJ sequences (πŸ‘πŸ½, πŸ‡ΊπŸ‡Έ, πŸ‘¨β€πŸ‘©β€πŸ‘§). Hermes has no Intl.Segmenter, so we use explicit code point ranges and is capped at 32 code units.

🎨 UI Changes

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

🎯 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

## 🎯 Goal

Closes #3922
Closes [RN-507](https://linear.app/stream/issue/RN-507)

Avatar initials took `charAt(0)` of each word, which splits emoji stored
as surrogate pairs, so a name like `πŸ˜€ Smiley` rendered as `οΏ½S`.

## πŸ›  Implementation details

Words that start with an emoji now keep the whole emoji, including skin
tones, flags and ZWJ sequences (`πŸ‘πŸ½`, `πŸ‡ΊπŸ‡Έ`, `πŸ‘¨β€πŸ‘©β€πŸ‘§`). Hermes has no
`Intl.Segmenter`, so we use explicit code point ranges and is capped at
32 code units.

## 🎨 UI Changes

<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ 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
@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown

Next releases

v9.11.2

9.11.2 (2026-11-04)

Bug Fixes

@Stream-SDK-Bot

Copy link
Copy Markdown
Contributor

SDK Size

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

@isekovanic
isekovanic merged commit 2d12303 into main Nov 4, 2026
22 checks passed
@stream-ci-bot

Copy link
Copy Markdown
Contributor

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

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