{ "reviewed": "2026-09-26", "clients": [ { "name": "Lotus Chat", "sub": "chat.lotusguild.org
Our Cinny fork" }, { "name": "Cinny", "sub": "cinny.in
Official" }, { "name": "Element X", "sub": "iOS & Android" }, { "name": "FluffyChat", "sub": "Android, iOS, Web & Linux" }, { "name": "Commet", "sub": "Android / Win / Linux / Web" }, { "name": "Element", "sub": "Web & Desktop" }, { "name": "Nheko", "sub": "Desktop only" } ], "sections": [ { "title": "Platform", "rows": [ { "feature": "iOS", "cells": [ { "mark": "no" }, { "mark": "no" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Android", "cells": [ { "mark": "no" }, { "mark": "no" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Desktop app", "cells": [ { "mark": "yes" }, { "mark": "yes", "note": "Cinny Desktop" }, { "mark": "part", "note": "iOS build runs on Apple Silicon Macs (no Windows/Linux)" }, { "mark": "yes" }, { "mark": "yes", "note": "Windows & Linux (macOS: build from source only)" }, { "mark": "yes" }, { "mark": "yes" } ] }, { "feature": "Web browser", "cells": [ { "mark": "yes" }, { "mark": "yes" }, { "mark": "no" }, { "mark": "yes" }, { "mark": "yes", "note": "app.commet.chat (v0.5.0)" }, { "mark": "yes" }, { "mark": "no" } ] }, { "feature": "Performance", "cells": [ { "text": "Light" }, { "text": "Light" }, { "text": "Very fast", "note": "Sliding Sync" }, { "text": "Moderate" }, { "text": "Moderate" }, { "text": "Heavy", "note": "Electron / JS" }, { "text": "Light", "note": "Native C++" } ] } ] }, { "title": "Desktop App", "rows": [ { "feature": "Native rich notifications (click→open, inline reply)", "cells": [ { "mark": "yes" }, { "mark": "no" }, { "mark": "no" }, { "mark": "part", "note": "Linux: click opens chat, Mark-as-read/Mute actions; no inline reply" }, { "mark": "yes", "note": "Windows & Linux: click-to-open, inline reply, call accept/decline" }, { "mark": "part" }, { "mark": "yes", "note": "Linux inline reply (D-Bus), macOS quick reply, click-to-open" } ] }, { "feature": "Windows Jump List (recent rooms)", "cells": [ { "mark": "yes" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Taskbar + volume-flyout call controls", "cells": [ { "mark": "yes" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Focus Assist → auto Do-Not-Disturb", "cells": [ { "mark": "yes" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Stay awake during calls", "cells": [ { "mark": "yes" }, { "mark": "no" }, { "mark": "no" }, { "mark": "part", "note": "wakelock during (experimental) calls" }, { "mark": "no" }, { "mark": "part" }, { "mark": "no" } ] }, { "feature": "Recursive folder drag-drop upload", "cells": [ { "mark": "yes" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] } ] }, { "title": "Security & Encryption", "rows": [ { "feature": "E2EE", "cells": [ { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" } ] }, { "feature": "Vodozemac encryptionstronger crypto track record", "cells": [ { "mark": "yes", "note": "Rust crypto (matrix-sdk-crypto-wasm) via js-sdk" }, { "mark": "yes", "note": "Rust crypto (matrix-sdk-crypto-wasm) via js-sdk" }, { "mark": "yes", "note": "Rust SDK" }, { "mark": "yes", "note": "dart-sdk" }, { "mark": "yes", "note": "dart-sdk" }, { "mark": "yes", "note": "Rust crypto (matrix-sdk-crypto-wasm)" }, { "mark": "no" } ] }, { "feature": "Device verification", "cells": [ { "mark": "yes", "note": "SAS emoji, cross-client requests show inline card" }, { "mark": "part", "note": "own devices only (emoji + recovery key)" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" } ] } ] }, { "title": "Voice & Video", "rows": [ { "feature": "Voice & video calls", "cells": [ { "mark": "yes", "note": "rooms & DMs, group calls,
screenshare via Element Call" }, { "mark": "yes", "note": "1:1 + group via embedded Element Call" }, { "mark": "yes", "note": "1:1 & group via embedded Element Call" }, { "mark": "part", "note": "experimental setting, DMs only (legacy 1:1 WebRTC)" }, { "mark": "yes", "note": "1:1 WebRTC; voice channels via MatrixRTC + LiveKit; E2EE experimental" }, { "mark": "yes" }, { "mark": "part", "note": "1:1 only, legacy VoIP; Linux builds only" } ] }, { "feature": "Screenshare", "cells": [ { "mark": "yes", "note": "via Element Call; fullscreen button,
independent audio mute" }, { "mark": "yes", "note": "via Element Call embed" }, { "mark": "no", "note": "can view others' screenshares, cannot start one" }, { "mark": "part", "note": "experimental 1:1 calls, mobile & web only" }, { "mark": "yes", "note": "desktop, Android & browser; 1:1 and voice channels" }, { "mark": "yes" }, { "mark": "yes", "note": "Linux builds only (1:1 calls; XDG portal)" } ] }, { "feature": "Noise suppressionfilter background noise from mic", "cells": [ { "mark": "yes", "note": "3 tiers: off / browser-native /
on-device ML (RNNoise, Speex,
DTLN, DeepFilterNet 3),
works on self-hosted SFU" }, { "mark": "part", "note": "browser-native
via Element Call" }, { "mark": "part", "note": "browser-native" }, { "mark": "part", "note": "WebRTC-native" }, { "mark": "part", "note": "browser-native (WebRTC)" }, { "mark": "part", "note": "browser-native (WebRTC noiseSuppression toggle)" }, { "mark": "no" } ] }, { "feature": "Push-to-Talkhold key to transmit", "cells": [ { "mark": "yes", "note": "configurable hold key,
PTT badge in call bar;
M = push-to-deafen;
system-wide on Windows desktop" }, { "mark": "part", "note": "hold Space while muted (Element Call built-in); no configurable key" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "part", "note": "hold Space while muted in Element Call; no configurable key" }, { "mark": "no" } ] }, { "feature": "AFK auto-mutesilence mic after idle timeout", "cells": [ { "mark": "yes", "note": "1–30 min timeout,
toast notification" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Voice channel user limitadmin-set max participants", "cells": [ { "mark": "yes", "note": "per-room cap,
server-enforced
for all clients" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Call join/leave soundscue when others come & go", "cells": [ { "mark": "yes", "note": "3 styles,
Web Audio synth" }, { "mark": "yes", "note": "via Element Call (calls up to 8 people)" }, { "mark": "yes", "note": "via Element Call" }, { "mark": "no" }, { "mark": "yes", "note": "voice channels play join/leave cues for other participants" }, { "mark": "yes", "note": "Element Call (calls up to 8 people)" }, { "mark": "no" } ] }, { "feature": "Group calls", "cells": [ { "mark": "yes", "note": "via Element Call embed" }, { "mark": "yes", "note": "via Element Call embed" }, { "mark": "yes", "note": "via embedded Element Call" }, { "mark": "no" }, { "mark": "part", "note": "MatrixRTC voice channels; E2EE experimental (v0.5.0)" }, { "mark": "yes" }, { "mark": "no", "note": "1:1 only; no MatrixRTC/Element Call or Jitsi" } ] }, { "feature": "Incoming call notificationring + Answer/Decline", "cells": [ { "mark": "yes", "note": "DMs & group chats;
ring tone, auto-dismiss" }, { "mark": "yes", "note": "rings for DM calls (Answer/Reject); silent prompt for group calls" }, { "mark": "yes", "note": "native push" }, { "mark": "part", "note": "experimental" }, { "mark": "yes" }, { "mark": "yes", "note": "ringing toast with Accept/Decline (web & desktop)" }, { "mark": "yes", "note": "ringtone (selectable) + Accept/Decline bar" } ] } ] }, { "title": "Core Features", "rows": [ { "feature": "Spaces", "cells": [ { "mark": "yes", "note": "best-in-class sub-space nav" }, { "mark": "yes", "note": "best-in-class sub-space nav" }, { "mark": "yes", "note": "dedicated spaces tab,
full management" }, { "mark": "yes" }, { "mark": "yes", "note": "Discord-like categories" }, { "mark": "yes", "note": "sub-spaces clunky" }, { "mark": "part", "note": "limited" } ] }, { "feature": "Threads", "cells": [ { "mark": "yes", "note": "side panel + Slack-style per-thread notifications" }, { "mark": "part", "note": "basic, no dedicated view" }, { "mark": "part", "note": "Labs flag" }, { "mark": "yes", "note": "thread view since v2.3.0" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes", "note": "since v0.11.0" } ] }, { "feature": "Polls", "cells": [ { "mark": "yes", "note": "create, vote & display;
single or multiple choice" }, { "mark": "no", "note": "not rendered (no m.poll support)" }, { "mark": "yes", "note": "create, vote & end" }, { "mark": "yes", "note": "added v2.3.0" }, { "mark": "yes", "note": "added v0.4.2" }, { "mark": "yes" }, { "mark": "no" } ] }, { "feature": "Voice messagesrecord & play", "cells": [ { "mark": "yes", "note": "record & play, E2EE;
0.75×/1×/1.5×/2× speed" }, { "mark": "part", "note": "playback only" }, { "mark": "yes", "note": "record, play, variable speed,
reply with voice" }, { "mark": "yes", "note": "record & play,
pause support" }, { "mark": "part", "note": "playback confirmed;
recording unclear" }, { "mark": "yes" }, { "mark": "part", "note": "playback only (inline audio player); no recording" } ] }, { "feature": "Pinned messages", "cells": [ { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes", "note": "dedicated pins view" }, { "mark": "yes", "note": "pin/unpin + pinned banner" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" } ] }, { "feature": "Custom emoji & stickers", "cells": [ { "mark": "yes", "note": "best-in-class" }, { "mark": "yes" }, { "mark": "part" }, { "mark": "yes" }, { "mark": "yes", "note": "bulk upload, Signal packs" }, { "mark": "part", "note": "sometimes shows mxc:// URLs" }, { "mark": "yes" } ] }, { "feature": "GIF search / picker", "cells": [ { "mark": "yes", "note": "Giphy, Terminal TDS themed,
click-outside to close" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "privacy proxy,
uploads to homeserver" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Message search (encrypted)", "cells": [ { "mark": "yes", "note": "local cache scan; load-more
buttons extend history per room" }, { "mark": "part", "note": "server search only;
no E2EE support" }, { "mark": "no" }, { "mark": "part", "note": "per-room; downloads & decrypts history client-side" }, { "mark": "yes", "note": "client-side; auto-fetches +
decrypts history during search" }, { "mark": "part", "note": "desktop only, not web" }, { "mark": "part", "note": "local DB scan" } ] }, { "feature": "Widgets", "cells": [ { "mark": "yes", "note": "room widgets; asks before a widget may read or send in the room" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "added v0.5.0 (Widgets API, native runner on Android/Windows)" }, { "mark": "yes" }, { "mark": "part", "note": "listed in room header, open externally" } ] } ] }, { "title": "UX & Extras", "rows": [ { "feature": "Multi-account", "cells": [ { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "account switcher; multi-account push since v2.6.0" }, { "mark": "yes" }, { "mark": "no" }, { "mark": "no", "note": "CLI profiles only" } ] }, { "feature": "Image captions(text + image as one event)", "cells": [ { "mark": "yes", "note": "caption field on
image & video upload" }, { "mark": "part", "note": "shows captions from other clients; cannot send" }, { "mark": "yes", "note": "scrollable captions
on media (v26.04.2)" }, { "mark": "yes" }, { "mark": "no" }, { "mark": "part", "note": "shows captions from other clients; cannot send" }, { "mark": "part" } ] }, { "feature": "Discord-like UI", "cells": [ { "mark": "yes", "note": "best-in-class for web" }, { "mark": "yes" }, { "mark": "no" }, { "mark": "no", "note": "WhatsApp/Telegram style" }, { "mark": "yes", "note": "Discord-like layout" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Shared calendars & albums", "cells": [ { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "unique to Commet" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Night Light / Blue Light Filterwarm overlay, adjustable intensity", "cells": [ { "mark": "yes", "note": "5–80% intensity slider,
Settings → Appearance" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Animated chat backgroundsCSS-only, GPU-accelerated", "cells": [ { "mark": "yes", "note": "5 animated wallpapers (rain,
stars, grid pulse, aurora,
fireflies); pause toggle" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Deleted message visibility(redacted events)", "cells": [ { "mark": "yes", "note": "\"Message deleted\" with reason
if provided" }, { "mark": "part", "note": "hidden by default; shown with \"Show Hidden Events\"" }, { "mark": "yes", "note": "\"Message deleted\"
placeholder shown" }, { "mark": "yes", "note": "shows redaction notice" }, { "mark": "no", "note": "redacted events are hidden from the timeline" }, { "mark": "yes", "note": "\"Message deleted\"
placeholder shown" }, { "mark": "yes", "note": "shows redaction notice" } ] }, { "feature": "Location sharing", "cells": [ { "mark": "part", "note": "map embed view +
static share button" }, { "mark": "part", "note": "shows received locations; cannot send" }, { "mark": "yes", "note": "live & static,
map rendering" }, { "mark": "part", "note": "basic static" }, { "mark": "no" }, { "mark": "yes" }, { "mark": "no" } ] }, { "feature": "Message forwarding", "cells": [ { "mark": "yes", "note": "forward to any room" }, { "mark": "no" }, { "mark": "yes", "note": "Forward action; multi-room on Android" }, { "mark": "yes" }, { "mark": "no" }, { "mark": "yes" }, { "mark": "yes" } ] }, { "feature": "Per-message read receiptswho read each message", "cells": [ { "mark": "yes", "note": "avatar pill below message,
click for list + timestamps" }, { "mark": "yes", "note": "'Read Receipts' in message menu lists readers" }, { "mark": "yes", "note": "avatar thumbnails" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes", "note": "avatar row below message" }, { "mark": "yes" } ] }, { "feature": "Who reactedsee who reacted with each emoji", "cells": [ { "mark": "yes", "note": "hover tooltip with names;
right-click for full avatar modal" }, { "mark": "yes", "note": "hover tooltip + 'View Reactions' viewer" }, { "mark": "yes", "note": "long-press reaction for summary sheet" }, { "mark": "yes", "note": "long-press reaction" }, { "mark": "yes" }, { "mark": "yes", "note": "hover tooltip lists reactors" }, { "mark": "yes" } ] }, { "feature": "Edit history viewersee all prior versions of an edited message", "cells": [ { "mark": "yes", "note": "click \"(edited)\" label → modal
with all versions + timestamps" }, { "mark": "no", "note": "label shown, not clickable" }, { "mark": "no", "note": "shows \"(edited)\" label only" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes" }, { "mark": "no", "note": "only an 'Edited' marker" } ] }, { "feature": "Custom status messageshown below username", "cells": [ { "mark": "yes", "note": "emoji picker, auto-clear timer
(30 min – 7 days), 64-char limit" }, { "mark": "no" }, { "mark": "part", "note": "emoji + text status (needs server support)" }, { "mark": "yes", "note": "Set status; shown under DM header & in profile" }, { "mark": "yes", "note": "shown under name in user panels/profile" }, { "mark": "part", "note": "Labs; needs homeserver support (MSC4429)" }, { "mark": "yes", "note": "shown next to sender name in timeline & in profile" } ] }, { "feature": "Online presence trackingidle/away auto-detection", "cells": [ { "mark": "yes", "note": "online on start, idle after 10 min,
unavailable when tab hidden,
offline on close; hide-status toggle" }, { "mark": "part", "note": "shows others' status; no idle detection" }, { "mark": "part", "note": "reports own presence; doesn't show others'" }, { "mark": "part", "note": "basic online/offline only" }, { "mark": "part", "note": "sets 'unavailable' 15s after the app loses focus; no input-idle timer" }, { "mark": "part", "note": "3-min idle → away; no hide toggle" }, { "mark": "part", "note": "auto: unavailable ~30 s after losing focus" } ] }, { "feature": "Media Gallerybrowse room images/videos/files", "cells": [ { "mark": "yes", "note": "right-side drawer;
Images/Videos/Files tabs" }, { "mark": "no" }, { "mark": "yes", "note": "\"Media and files\" browser in room info" }, { "mark": "yes", "note": "Gallery & Files tabs in chat search" }, { "mark": "no" }, { "mark": "part", "note": "Files panel lists room attachments; no grid gallery" }, { "mark": "no" } ] }, { "feature": "Sidebar room filterfilter by name in real time", "cells": [ { "mark": "yes", "note": "Home & DMs tabs" }, { "mark": "no" }, { "mark": "yes", "note": "room list search + filter chips" }, { "mark": "yes", "note": "search field filters chat list by name + filter chips" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Favorite roomsstarred section in sidebar", "cells": [ { "mark": "yes", "note": "m.favourite tag, syncs
across devices" }, { "mark": "no" }, { "mark": "part", "note": "Favourites filter chip (no separate section)" }, { "mark": "part", "note": "favourite (pin) floats to top; tag filter chips" }, { "mark": "yes", "note": "'Favorites' section (v0.5.0)" }, { "mark": "yes", "note": "favourites section" }, { "mark": "yes", "note": "'Favourites' tag in community sidebar" } ] }, { "feature": "Invite link + QR code", "cells": [ { "mark": "yes", "note": "matrix.to URL + QR code
in invite modal & room settings" }, { "mark": "no" }, { "mark": "part", "note": "share room link; no QR" }, { "mark": "yes", "note": "share invite link + QR codes" }, { "mark": "no" }, { "mark": "yes", "note": "Share room dialog: matrix.to link + QR code" }, { "mark": "no" } ] }, { "feature": "Custom notification soundsper-category sound selector", "cells": [ { "mark": "yes", "note": "per-category sound selector; ▶ preview" }, { "mark": "no" }, { "mark": "part", "note": "iOS: choose alert tone (global)" }, { "mark": "no" }, { "mark": "no" }, { "mark": "part", "note": "per room, not per category" }, { "mark": "no" } ] }, { "feature": "Notification quiet hourssilence notifs in a time window", "cells": [ { "mark": "yes", "note": "silence all notifs in a time window; overnight support" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Room sort ordersort sidebar rooms by activity, name, or unread", "cells": [ { "mark": "yes", "note": "Recent / A→Z / Unread First" }, { "mark": "no" }, { "mark": "part", "note": "sort by activity only" }, { "mark": "part", "note": "activity only (favourites first, low priority last)" }, { "mark": "part", "note": "manual drag-reorder; no sort selector" }, { "mark": "yes", "note": "Activity, A-Z or Unread-first" }, { "mark": "yes", "note": "by importance/unread or alphabetical" } ] }, { "feature": "Push notifications", "cells": [ { "mark": "part", "note": "OS notifications while the app is open; no background push yet" }, { "mark": "part", "note": "only while the tab/app is open; optional email" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes" }, { "mark": "yes", "note": "desktop" }, { "mark": "yes" } ] }, { "feature": "Export room historydownload messages as file", "cells": [ { "mark": "yes", "note": "txt/json/html, date range,
E2EE-aware" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "has export" }, { "mark": "no" } ] }, { "feature": "Message schedulingsend later with datetime picker", "cells": [ { "mark": "yes", "note": "MSC4140, datetime picker,
cancel tray above composer" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Message bookmarks / saved messages", "cells": [ { "mark": "yes", "note": "right-click bookmark,
sidebar panel, syncs across devices" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Collapsible long messagesauto-collapse >20 lines", "cells": [ { "mark": "yes", "note": "\"Read more\" toggle,
threshold configurable" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "collapses >25 lines (configurable), Show more/less" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Inline GIF previewGiphy / Tenor links auto-embed", "cells": [ { "mark": "yes", "note": "via homeserver proxy,
no direct CDN contact" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Presence avatar border ringcolored ring shows online status", "cells": [ { "mark": "yes", "note": "green/yellow/red ring;
timeline, members, mentions" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Room emoji prefix🎮 renders larger in sidebar", "cells": [ { "mark": "yes", "note": "1.15× size; emoji picker
in all name inputs" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "leading emoji becomes the room icon when no avatar" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "Quick emoji reactions on hover1-click react, no menu needed", "cells": [ { "mark": "yes", "note": "3 recent emoji in hover bar;
dismisses emoji picker" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "yes", "note": "hover bar shows up to 4 recent reactions, 1-click" }, { "mark": "no" }, { "mark": "yes", "note": "hover bar shows recent reactions, 1-click" } ] }, { "feature": "In-app notification toastsTDS-styled, when window focused", "cells": [ { "mark": "yes", "note": "slides in bottom-right;
4 s auto-dismiss, click to jump" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] }, { "feature": "On-device message translationread foreign messages in your language", "cells": [ { "mark": "yes", "note": "100% on-device browser AI;
works in E2EE rooms, no cloud;
Chromium desktop & Lotus app" }, { "mark": "no" }, { "mark": "part", "note": "iOS only (Apple Translation)" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" }, { "mark": "no" } ] } ] } ] }