chore: remove emojione in favor of native emojis
Merged
SA
4mo ago+2219+2219+0123456789012345678901234567890123456789-21131-21131-01234567890123456789012345678901234567890123456789
Replace Emojione with Native Unicode Emojis
Summary
This PR removes the dependency on Emojione and transitions Rocket.Chat to use native Unicode emojis across the platform. All emojis will now be stored and processed as standard Unicode characters directly in the database.
Why this change
Emojione introduced an additional abstraction layer (shortcodes + image mapping) that increases complexity, impacts performance, and limits interoperability with modern protocols.
By adopting native Unicode emojis, we align Rocket.Chat with current standards used across messaging platforms and protocols.
Performance Improvements
- Reduced payload size: Unicode emojis are significantly smaller than image-based representations or shortcode mappings.
- Faster rendering: Native emojis are rendered directly by the client/OS, eliminating image lookups and replacements.
- Lower processing overhead: No need for parsing, conversion, or maintaining emoji dictionaries.
- Database efficiency: Storing raw Unicode reduces storage complexity and improves query performance.
Improved Compatibility (Matrix & Open Protocols)
- Matrix-native support: Matrix uses Unicode emojis by default. This change ensures seamless compatibility with Matrix federation.
- No translation layer needed: Eliminates the need to convert between Emojione shortcodes and Matrix events.
- Better interoperability: Messages retain their original emoji representation across federated systems and external clients.
- Standards alignment: Moves Rocket.Chat closer to protocol-native communication without proprietary transformations.
Developer & Maintenance Benefits
- Simplifies the codebase by removing emoji parsing/mapping logic
- Reduces dependency on third-party emoji libraries
- Easier to maintain and extend
- Fewer edge cases when handling emoji rendering across platforms
Migration Notes
- Existing messages using Emojione shortcodes will NOT be converted to their corresponding Unicode equivalents.
- Emojis will now be different in each OS.
- Custom emojis remain unaffected.
Result
A simpler, faster, and more interoperable emoji system that:
- Improves performance across clients and backend
- Reduces technical debt
- Enables cleaner Matrix federation
- Aligns Rocket.Chat with modern messaging standards
Before:
After:
Summary by CodeRabbit
- New Features
- Added native emoji rendering backed by emoji data (including improved ZWJ/compound sequence handling).
- Emoji picker/composer now insert the Unicode character when available (fallback to shortcode).
- PDF transcript emoji rendering is generated locally.
- Bug Fixes
- Improved emoji shortcode-to-Unicode conversion across message previews, notifications, reactions, and federation flows; updated reaction emoji DOM selectors.
- Documentation
- Updated βPowered byβ branding to Rocket.Chat and removed JoyPixels credit wording.
- Tests
- Updated e2e/unit expectations and locators for the new emoji behavior and UI changes (including removal of the EmojiPicker footer).