diff --git a/landing/data/comparison.json b/landing/data/comparison.json index 58e8f54..46367cb 100644 --- a/landing/data/comparison.json +++ b/landing/data/comparison.json @@ -1,5 +1,5 @@ { - "reviewed": "2026-09-23", + "reviewed": "2026-09-26", "clients": [ { "name": "Lotus Chat", @@ -15,11 +15,11 @@ }, { "name": "FluffyChat", - "sub": "All platforms" + "sub": "Android, iOS, Web & Linux" }, { "name": "Commet", - "sub": "Android / Win / macOS / Linux" + "sub": "Android / Win / Linux / Web" }, { "name": "Element", @@ -97,14 +97,15 @@ "note": "Cinny Desktop" }, { - "mark": "no" + "mark": "part", + "note": "iOS build runs on Apple Silicon Macs (no Windows/Linux)" }, { "mark": "yes" }, { "mark": "yes", - "note": "Win, macOS & Linux" + "note": "Windows & Linux (macOS: build from source only)" }, { "mark": "yes" @@ -130,7 +131,8 @@ "mark": "yes" }, { - "mark": "no" + "mark": "yes", + "note": "app.commet.chat (v0.5.0)" }, { "mark": "yes" @@ -187,16 +189,19 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "Linux: click opens chat, Mark-as-read/Mute actions; no inline reply" }, { - "mark": "no" + "mark": "yes", + "note": "Windows & Linux: click-to-open, inline reply, call accept/decline" }, { "mark": "part" }, { - "mark": "no" + "mark": "yes", + "note": "Linux inline reply (D-Bus), macOS quick reply, click-to-open" } ] }, @@ -291,7 +296,8 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "wakelock during (experimental) calls" }, { "mark": "no" @@ -365,12 +371,12 @@ "feature": "Vodozemac encryptionstronger crypto track record", "cells": [ { - "mark": "no", - "note": "js-sdk" + "mark": "yes", + "note": "Rust crypto (matrix-sdk-crypto-wasm) via js-sdk" }, { - "mark": "no", - "note": "js-sdk" + "mark": "yes", + "note": "Rust crypto (matrix-sdk-crypto-wasm) via js-sdk" }, { "mark": "yes", @@ -385,8 +391,8 @@ "note": "dart-sdk" }, { - "mark": "no", - "note": "js-sdk, migrating" + "mark": "yes", + "note": "Rust crypto (matrix-sdk-crypto-wasm)" }, { "mark": "no" @@ -402,7 +408,7 @@ }, { "mark": "part", - "note": "cross-client requests
may show unsupported" + "note": "own devices only (emoji + recovery key)" }, { "mark": "yes" @@ -434,26 +440,27 @@ "note": "rooms & DMs, group calls,
screenshare via Element Call" }, { - "mark": "part", - "note": "Element Call embed;
no ring notification" + "mark": "yes", + "note": "1:1 + group via embedded Element Call" }, { "mark": "yes", - "note": "MatrixRTC" + "note": "1:1 & group via embedded Element Call" }, { "mark": "part", - "note": "experimental, varies
by homeserver" + "note": "experimental setting, DMs only (legacy 1:1 WebRTC)" }, { - "mark": "part", - "note": "1:1 + group,
no E2EE voice rooms" + "mark": "yes", + "note": "1:1 WebRTC; voice channels via MatrixRTC + LiveKit; E2EE experimental" }, { "mark": "yes" }, { - "mark": "yes" + "mark": "part", + "note": "1:1 only, legacy VoIP; Linux builds only" } ] }, @@ -469,20 +476,23 @@ "note": "via Element Call embed" }, { - "mark": "yes" + "mark": "no", + "note": "can view others' screenshares, cannot start one" }, { - "mark": "no" + "mark": "part", + "note": "experimental 1:1 calls, mobile & web only" }, { - "mark": "no" + "mark": "yes", + "note": "desktop, Android & browser; 1:1 and voice channels" }, { "mark": "yes" }, { "mark": "yes", - "note": "XDG portals & native" + "note": "Linux builds only (1:1 calls; XDG portal)" } ] }, @@ -502,14 +512,16 @@ "note": "browser-native" }, { - "mark": "no" - }, - { - "mark": "no" + "mark": "part", + "note": "WebRTC-native" }, { "mark": "part", - "note": "browser-native;
ML only on LiveKit Cloud" + "note": "browser-native (WebRTC)" + }, + { + "mark": "part", + "note": "browser-native (WebRTC noiseSuppression toggle)" }, { "mark": "no" @@ -524,7 +536,8 @@ "note": "configurable hold key,
PTT badge in call bar;
M = push-to-deafen;
system-wide on Windows desktop" }, { - "mark": "no" + "mark": "part", + "note": "hold Space while muted (Element Call built-in); no configurable key" }, { "mark": "no" @@ -536,7 +549,8 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "hold Space while muted in Element Call; no configurable key" }, { "mark": "no" @@ -605,19 +619,23 @@ "note": "3 styles,
Web Audio synth" }, { - "mark": "no" + "mark": "yes", + "note": "via Element Call (calls up to 8 people)" + }, + { + "mark": "yes", + "note": "via Element Call" }, { "mark": "no" }, { - "mark": "no" + "mark": "yes", + "note": "voice channels play join/leave cues for other participants" }, { - "mark": "no" - }, - { - "mark": "no" + "mark": "yes", + "note": "Element Call (calls up to 8 people)" }, { "mark": "no" @@ -637,21 +655,21 @@ }, { "mark": "yes", - "note": "MatrixRTC" + "note": "via embedded Element Call" }, { "mark": "no" }, { "mark": "part", - "note": "no E2EE voice rooms" + "note": "MatrixRTC voice channels; E2EE experimental (v0.5.0)" }, { "mark": "yes" }, { - "mark": "part", - "note": "partial" + "mark": "no", + "note": "1:1 only; no MatrixRTC/Element Call or Jitsi" } ] }, @@ -663,7 +681,8 @@ "note": "DMs & group chats;
ring tone, auto-dismiss" }, { - "mark": "no" + "mark": "yes", + "note": "rings for DM calls (Answer/Reject); silent prompt for group calls" }, { "mark": "yes", @@ -678,11 +697,11 @@ }, { "mark": "yes", - "note": "desktop" + "note": "ringing toast with Accept/Decline (web & desktop)" }, { - "mark": "part", - "note": "partial" + "mark": "yes", + "note": "ringtone (selectable) + Accept/Decline bar" } ] } @@ -739,8 +758,8 @@ "note": "Labs flag" }, { - "mark": "no", - "note": "shows as regular messages" + "mark": "yes", + "note": "thread view since v2.3.0" }, { "mark": "yes" @@ -749,7 +768,8 @@ "mark": "yes" }, { - "mark": "no" + "mark": "yes", + "note": "since v0.11.0" } ] }, @@ -761,8 +781,8 @@ "note": "create, vote & display;
single or multiple choice" }, { - "mark": "part", - "note": "display only" + "mark": "no", + "note": "not rendered (no m.poll support)" }, { "mark": "yes", @@ -811,7 +831,8 @@ "mark": "yes" }, { - "mark": "no" + "mark": "part", + "note": "playback only (inline audio player); no recording" } ] }, @@ -829,8 +850,8 @@ "note": "dedicated pins view" }, { - "mark": "part", - "note": "view only" + "mark": "yes", + "note": "pin/unpin + pinned banner" }, { "mark": "yes" @@ -916,7 +937,7 @@ }, { "mark": "part", - "note": "cache scan only" + "note": "per-room; downloads & decrypts history client-side" }, { "mark": "yes", @@ -936,7 +957,8 @@ "feature": "Widgets", "cells": [ { - "mark": "no" + "mark": "yes", + "note": "room widgets; asks before a widget may read or send in the room" }, { "mark": "no" @@ -948,13 +970,15 @@ "mark": "no" }, { - "mark": "no" + "mark": "yes", + "note": "added v0.5.0 (Widgets API, native runner on Android/Windows)" }, { "mark": "yes" }, { - "mark": "no" + "mark": "part", + "note": "listed in room header, open externally" } ] } @@ -976,8 +1000,8 @@ "mark": "no" }, { - "mark": "part", - "note": "supported but clunky" + "mark": "yes", + "note": "account switcher; multi-account push since v2.6.0" }, { "mark": "yes" @@ -999,21 +1023,22 @@ "note": "caption field on
image & video upload" }, { - "mark": "no" + "mark": "part", + "note": "shows captions from other clients; cannot send" }, { "mark": "yes", "note": "scrollable captions
on media (v26.04.2)" }, { - "mark": "yes", - "note": "unique feature" + "mark": "yes" }, { "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "shows captions from other clients; cannot send" }, { "mark": "part" @@ -1039,7 +1064,7 @@ }, { "mark": "yes", - "note": "most Discord-like overall" + "note": "Discord-like layout" }, { "mark": "no" @@ -1138,8 +1163,8 @@ "note": "\"Message deleted\" with reason
if provided" }, { - "mark": "no", - "note": "redacted messages hidden" + "mark": "part", + "note": "hidden by default; shown with \"Show Hidden Events\"" }, { "mark": "yes", @@ -1150,8 +1175,8 @@ "note": "shows redaction notice" }, { - "mark": "yes", - "note": "shows redaction notice" + "mark": "no", + "note": "redacted events are hidden from the timeline" }, { "mark": "yes", @@ -1171,7 +1196,8 @@ "note": "map embed view +
static share button" }, { - "mark": "no" + "mark": "part", + "note": "shows received locations; cannot send" }, { "mark": "yes", @@ -1203,20 +1229,20 @@ "mark": "no" }, { - "mark": "part", - "note": "via share menu" - }, - { - "mark": "yes" - }, - { - "mark": "part" + "mark": "yes", + "note": "Forward action; multi-room on Android" }, { "mark": "yes" }, { "mark": "no" + }, + { + "mark": "yes" + }, + { + "mark": "yes" } ] }, @@ -1228,7 +1254,8 @@ "note": "avatar pill below message,
click for list + timestamps" }, { - "mark": "no" + "mark": "yes", + "note": "'Read Receipts' in message menu lists readers" }, { "mark": "yes", @@ -1257,21 +1284,23 @@ "note": "hover tooltip with names;
right-click for full avatar modal" }, { - "mark": "no" + "mark": "yes", + "note": "hover tooltip + 'View Reactions' viewer" }, { - "mark": "part", - "note": "tap reaction chip" + "mark": "yes", + "note": "long-press reaction for summary sheet" }, { - "mark": "part" + "mark": "yes", + "note": "long-press reaction" }, { "mark": "yes" }, { "mark": "yes", - "note": "tooltip + click for list" + "note": "hover tooltip lists reactors" }, { "mark": "yes" @@ -1290,7 +1319,8 @@ "note": "label shown, not clickable" }, { - "mark": "yes" + "mark": "no", + "note": "shows \"(edited)\" label only" }, { "mark": "no" @@ -1302,7 +1332,8 @@ "mark": "yes" }, { - "mark": "yes" + "mark": "no", + "note": "only an 'Edited' marker" } ] }, @@ -1317,20 +1348,24 @@ "mark": "no" }, { - "mark": "no" - }, - { - "mark": "no" - }, - { - "mark": "no" + "mark": "part", + "note": "emoji + text status (needs server support)" }, { "mark": "yes", - "note": "via profile settings" + "note": "Set status; shown under DM header & in profile" }, { - "mark": "no" + "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" } ] }, @@ -1343,7 +1378,11 @@ }, { "mark": "part", - "note": "manual AFK only; auto idle
detection PR open, unmerged" + "note": "shows others' status; no idle detection" + }, + { + "mark": "part", + "note": "reports own presence; doesn't show others'" }, { "mark": "part", @@ -1351,19 +1390,15 @@ }, { "mark": "part", - "note": "basic online/offline only" + "note": "sets 'unavailable' 15s after the app loses focus; no input-idle timer" }, { "mark": "part", - "note": "inactivity monitor shipped Oct 2025;
no tab/close detection confirmed" + "note": "3-min idle → away; no hide toggle" }, { "mark": "part", - "note": "3-min idle timer (shipped Nov 2023);
no tab detection, no offline on close,
no user-facing hide toggle" - }, - { - "mark": "part", - "note": "basic online/offline only" + "note": "auto: unavailable ~30 s after losing focus" } ] }, @@ -1378,16 +1413,19 @@ "mark": "no" }, { - "mark": "no" + "mark": "yes", + "note": "\"Media and files\" browser in room info" + }, + { + "mark": "yes", + "note": "Gallery & Files tabs in chat search" }, { "mark": "no" }, { - "mark": "no" - }, - { - "mark": "no" + "mark": "part", + "note": "Files panel lists room attachments; no grid gallery" }, { "mark": "no" @@ -1405,10 +1443,12 @@ "mark": "no" }, { - "mark": "no" + "mark": "yes", + "note": "room list search + filter chips" }, { - "mark": "no" + "mark": "yes", + "note": "search field filters chat list by name + filter chips" }, { "mark": "no" @@ -1432,20 +1472,24 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "Favourites filter chip (no separate section)" }, { - "mark": "no" + "mark": "part", + "note": "favourite (pin) floats to top; tag filter chips" }, { - "mark": "no" + "mark": "yes", + "note": "'Favorites' section (v0.5.0)" }, { "mark": "yes", "note": "favourites section" }, { - "mark": "no" + "mark": "yes", + "note": "'Favourites' tag in community sidebar" } ] }, @@ -1460,16 +1504,19 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "share room link; no QR" + }, + { + "mark": "yes", + "note": "share invite link + QR codes" }, { "mark": "no" }, { - "mark": "no" - }, - { - "mark": "no" + "mark": "yes", + "note": "Share room dialog: matrix.to link + QR code" }, { "mark": "no" @@ -1487,7 +1534,8 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "iOS: choose alert tone (global)" }, { "mark": "no" @@ -1496,7 +1544,8 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "per room, not per category" }, { "mark": "no" @@ -1546,18 +1595,19 @@ }, { "mark": "part", - "note": "alphabetical only" - }, - { - "mark": "yes", - "note": "multiple sort options" + "note": "activity only (favourites first, low priority last)" }, { "mark": "part", - "note": "limited" + "note": "manual drag-reorder; no sort selector" }, { - "mark": "no" + "mark": "yes", + "note": "Activity, A-Z or Unread-first" + }, + { + "mark": "yes", + "note": "by importance/unread or alphabetical" } ] }, @@ -1566,11 +1616,11 @@ "cells": [ { "mark": "part", - "note": "web push only" + "note": "OS notifications while the app is open; no background push yet" }, { "mark": "part", - "note": "web push only" + "note": "only while the tab/app is open; optional email" }, { "mark": "yes" @@ -1638,8 +1688,7 @@ "mark": "no" }, { - "mark": "part", - "note": "partial / labs" + "mark": "no" }, { "mark": "no" @@ -1666,7 +1715,7 @@ "mark": "no" }, { - "mark": "yes" + "mark": "no" }, { "mark": "no" @@ -1687,7 +1736,8 @@ "mark": "no" }, { - "mark": "no" + "mark": "yes", + "note": "collapses >25 lines (configurable), Show more/less" }, { "mark": "no" @@ -1771,7 +1821,8 @@ "mark": "no" }, { - "mark": "no" + "mark": "yes", + "note": "leading emoji becomes the room icon when no avatar" }, { "mark": "no" @@ -1798,14 +1849,15 @@ "mark": "no" }, { - "mark": "part", - "note": "hover bar, no recents" + "mark": "yes", + "note": "hover bar shows up to 4 recent reactions, 1-click" }, { "mark": "no" }, { - "mark": "no" + "mark": "yes", + "note": "hover bar shows recent reactions, 1-click" } ] }, @@ -1847,7 +1899,8 @@ "mark": "no" }, { - "mark": "no" + "mark": "part", + "note": "iOS only (Apple Translation)" }, { "mark": "no" @@ -1866,4 +1919,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/landing/data/features.json b/landing/data/features.json index 5fba8da..08bd904 100644 --- a/landing/data/features.json +++ b/landing/data/features.json @@ -58,7 +58,7 @@ { "title": "Desktop App", "items": [ - "Windows, macOS and Linux (Tauri)", + "Windows and Linux (Tauri): installer, AppImage, .deb and Arch package", "Rich Windows notifications with inline reply; Focus Assist sync", "Taskbar call controls, jump list and upload progress; tray with call status", "Stays awake during calls, reconnects on network changes, updates itself" diff --git a/landing/index.html b/landing/index.html index 90d18bb..15e1d2b 100644 --- a/landing/index.html +++ b/landing/index.html @@ -571,9 +571,11 @@ Lotus Guild Chat Hosted Cinny — homeserver pre-configured, no setup - Desktop & Web + Windows + Linux + Web Lotus Fork - Voice & Video Rooms + Voice, Video & Screenshare Discord-like UI @@ -640,7 +642,7 @@

Desktop App

@@ -697,10 +702,10 @@ iOS Android Rust SDK - Voice, Video & Screenshare + Voice & Video -

Fastest Matrix client — instant load via Sliding Sync. Native MatrixRTC calls (voice-only + video), screenshare, DM voice calls, live location sharing, media captions. Full space create & management. Rust encryption (Vodozemac).

+

Element's next-generation mobile client for iOS and Android, built on the Rust SDK with Simplified Sliding Sync for near-instant startup (the iOS app also runs on Apple Silicon Macs). Voice and video calls, 1:1 and group, via embedded Element Call (MatrixRTC). It can view but not start screenshares. Live location sharing, media captions, polls, pinned messages, a media browser and spaces with create and management, plus custom status on supported homeservers. Threads are in Labs. Rust crypto (Vodozemac).

@@ -708,19 +713,19 @@
iOS Android - Desktop + Linux Web - Dart SDK - Calls Experimental + Dart SDK + Voice & Video (Experimental)
-

Simple, beginner-friendly, fully cross-platform. Dart SDK with Vodozemac encryption. Unique: supports image captions (text + image as one event). Voice/video calls are experimental — reliability varies by homeserver and platform.

+

Simple, beginner-friendly Matrix client with a WhatsApp/Telegram-style design, available on Android, iOS, web and Linux desktop. Built on the Dart SDK with Vodozemac encryption. Supports threads, polls, image captions, custom sticker packs, voice messages and spaces. 1:1 voice and video calls exist but remain experimental: they are off by default, DM-only, legacy WebRTC, and there are no group calls.

-

Discord-like — Android, Windows, macOS & Linux

+

Discord-like — Android, Windows, Linux & Web

@@ -728,13 +733,13 @@
Android Windows - macOS Linux - Beta - Voice & Video + Web + Dart SDK + Voice, Video & Screenshare
-

Most Discord-like client overall. Multi-account support, built-in GIF search (privacy proxy — uploads to homeserver), shared calendars & photo albums, polls, screenshare on browsers & Android. Available on Android, Windows, macOS, Linux, and Web. Active development — iOS planned.

+

Discord-style client built with Flutter. Multi-account support with all accounts signed in at once, built-in GIF search (Tenor through a privacy proxy, uploaded to your homeserver), shared calendar and photo-album rooms, polls, threads and widgets (new in v0.5.0). 1:1 calls use WebRTC and voice channels use MatrixRTC/LiveKit, with screenshare on desktop, Android and web. Encrypted group calls are experimental. Available for Windows, Linux, Android and on the web at app.commet.chat. Actively developed; macOS and iOS are planned.

@@ -753,7 +758,7 @@ Voice, Video & Screenshare -

Most feature-complete Matrix client — every spec feature including polls, widgets, threads, screenshare. Heavier on resources. Encrypted message search on desktop only (not web).

+

Element's reference web and desktop client (Electron), with the broadest feature set here: threads, polls, widgets, location sharing, chat export and a room list with sections, filters and sorting. Voice/video calls with screenshare use embedded Element Call when the homeserver provides it, with legacy 1:1 and Jitsi fallbacks. Heavier on resources. Encrypted message search on desktop only (not web).

@@ -762,10 +767,11 @@ Windows macOS Linux - Voice & Video + Qt/C++ + Voice, Video & Screenshare (1:1, Linux)
-

Native C++/Qt client — lightest desktop option, no Electron. Deep KDE/Plasma integration. No threads, no mobile or web. Best for Linux power users who want minimal resource usage.

+

Native Qt/C++ desktop client with no Electron and a low resource footprint. It has threads, local encrypted search, custom emoji and sticker packs, and a D-Bus API for Linux integrations. 1:1 voice and video calls with screenshare use legacy WebRTC and are only in Linux builds; there are no group calls. No mobile or web version. Development has slowed: the last release was v0.12.1 in August 2025. A good fit for Linux users who want a lightweight native client.

@@ -779,7 +785,7 @@

Client Feature Comparison

-Client comparison last reviewed +Client comparison last reviewed

← swipe to compare →

@@ -791,8 +797,8 @@ Client comparison last reviewed Lotus Chatchat.lotusguild.org
Our Cinny fork
Cinnycinny.in
Official
Element XiOS & Android - FluffyChatAll platforms - CommetAndroid / Win / macOS / Linux + FluffyChatAndroid, iOS, Web & Linux + CommetAndroid / Win / Linux / Web ElementWeb & Desktop NhekoDesktop only @@ -823,9 +829,9 @@ Client comparison last reviewed Desktop app ✓ ✓Cinny Desktop - ✗ + ~iOS build runs on Apple Silicon Macs (no Windows/Linux) ✓ - ✓Win, macOS & Linux + ✓Windows & Linux (macOS: build from source only) ✓ ✓ @@ -835,7 +841,7 @@ Client comparison last reviewed ✓ ✗ ✓ - ✗ + ✓app.commet.chat (v0.5.0) ✓ ✗ @@ -855,10 +861,10 @@ Client comparison last reviewed ✓ ✗ ✗ - ✗ - ✗ + ~Linux: click opens chat, Mark-as-read/Mute actions; no inline reply + ✓Windows & Linux: click-to-open, inline reply, call accept/decline ~ - ✗ + ✓Linux inline reply (D-Bus), macOS quick reply, click-to-open Windows Jump List (recent rooms) @@ -895,7 +901,7 @@ Client comparison last reviewed ✓ ✗ ✗ - ✗ + ~wakelock during (experimental) calls ✗ ~ ✗ @@ -923,18 +929,18 @@ Client comparison last reviewed Vodozemac encryptionstronger crypto track record - ✗js-sdk - ✗js-sdk + ✓Rust crypto (matrix-sdk-crypto-wasm) via js-sdk + ✓Rust crypto (matrix-sdk-crypto-wasm) via js-sdk ✓Rust SDK ✓dart-sdk ✓dart-sdk - ✗js-sdk, migrating + ✓Rust crypto (matrix-sdk-crypto-wasm) ✗ Device verification ✓SAS emoji, cross-client requests show inline card - ~cross-client requests
may show unsupported
+ ~own devices only (emoji + recovery key) ✓ ✓ ✓ @@ -945,41 +951,41 @@ Client comparison last reviewed Voice & video calls ✓rooms & DMs, group calls,
screenshare via Element Call
- ~Element Call embed;
no ring notification
- ✓MatrixRTC - ~experimental, varies
by homeserver
- ~1:1 + group,
no E2EE voice rooms
- ✓ + ✓1:1 + group via embedded Element Call + ✓1:1 & group via embedded Element Call + ~experimental setting, DMs only (legacy 1:1 WebRTC) + ✓1:1 WebRTC; voice channels via MatrixRTC + LiveKit; E2EE experimental ✓ + ~1:1 only, legacy VoIP; Linux builds only Screenshare ✓via Element Call; fullscreen button,
independent audio mute
✓via Element Call embed + ✗can view others' screenshares, cannot start one + ~experimental 1:1 calls, mobile & web only + ✓desktop, Android & browser; 1:1 and voice channels ✓ - ✗ - ✗ - ✓ - ✓XDG portals & native + ✓Linux builds only (1:1 calls; XDG portal) Noise suppressionfilter background noise from mic ✓3 tiers: off / browser-native /
on-device ML (RNNoise, Speex,
DTLN, DeepFilterNet 3),
works on self-hosted SFU
~browser-native
via Element Call
~browser-native - ✗ - ✗ - ~browser-native;
ML only on LiveKit Cloud
+ ~WebRTC-native + ~browser-native (WebRTC) + ~browser-native (WebRTC noiseSuppression toggle) ✗ Push-to-Talkhold key to transmit ✓configurable hold key,
PTT badge in call bar;
M = push-to-deafen;
system-wide on Windows desktop
+ ~hold Space while muted (Element Call built-in); no configurable key ✗ ✗ ✗ - ✗ - ✗ + ~hold Space while muted in Element Call; no configurable key ✗ @@ -1005,32 +1011,32 @@ Client comparison last reviewed Call join/leave soundscue when others come & go ✓3 styles,
Web Audio synth
+ ✓via Element Call (calls up to 8 people) + ✓via Element Call ✗ - ✗ - ✗ - ✗ - ✗ + ✓voice channels play join/leave cues for other participants + ✓Element Call (calls up to 8 people) ✗ Group calls ✓via Element Call embed ✓via Element Call embed - ✓MatrixRTC + ✓via embedded Element Call ✗ - ~no E2EE voice rooms + ~MatrixRTC voice channels; E2EE experimental (v0.5.0) ✓ - ~partial + ✗1:1 only; no MatrixRTC/Element Call or Jitsi Incoming call notificationring + Answer/Decline ✓DMs & group chats;
ring tone, auto-dismiss
- ✗ + ✓rings for DM calls (Answer/Reject); silent prompt for group calls ✓native push ~experimental ✓ - ✓desktop - ~partial + ✓ringing toast with Accept/Decline (web & desktop) + ✓ringtone (selectable) + Accept/Decline bar Core Features @@ -1048,15 +1054,15 @@ Client comparison last reviewed ✓side panel + Slack-style per-thread notifications ~basic, no dedicated view ~Labs flag - ✗shows as regular messages + ✓thread view since v2.3.0 ✓ ✓ - ✗ + ✓since v0.11.0 Polls ✓create, vote & display;
single or multiple choice
- ~display only + ✗not rendered (no m.poll support) ✓create, vote & end ✓added v2.3.0 ✓added v0.4.2 @@ -1071,14 +1077,14 @@ Client comparison last reviewed ✓record & play,
pause support
~playback confirmed;
recording unclear
✓ - ✗ + ~playback only (inline audio player); no recording Pinned messages ✓ ✓ ✓dedicated pins view - ~view only + ✓pin/unpin + pinned banner ✓ ✓ ✓ @@ -1108,20 +1114,20 @@ Client comparison last reviewed ✓local cache scan; load-more
buttons extend history per room
~server search only;
no E2EE support
✗ - ~cache scan only + ~per-room; downloads & decrypts history client-side ✓client-side; auto-fetches +
decrypts history during search
~desktop only, not web ~local DB scan Widgets - ✗ - ✗ + ✓room widgets; asks before a widget may read or send in the room ✗ ✗ ✗ + ✓added v0.5.0 (Widgets API, native runner on Android/Windows) ✓ - ✗ + ~listed in room header, open externally UX & Extras @@ -1129,7 +1135,7 @@ Client comparison last reviewed ✗ ✗ ✗ - ~supported but clunky + ✓account switcher; multi-account push since v2.6.0 ✓ ✗ ✗CLI profiles only @@ -1137,11 +1143,11 @@ Client comparison last reviewed Image captions(text + image as one event) ✓caption field on
image & video upload
- ✗ + ~shows captions from other clients; cannot send ✓scrollable captions
on media (v26.04.2)
- ✓unique feature - ✗ + ✓ ✗ + ~shows captions from other clients; cannot send ~ @@ -1150,7 +1156,7 @@ Client comparison last reviewed ✓ ✗ ✗WhatsApp/Telegram style - ✓most Discord-like overall + ✓Discord-like layout ✗ ✗ @@ -1187,17 +1193,17 @@ Client comparison last reviewed Deleted message visibility(redacted events) ✓"Message deleted" with reason
if provided
- ✗redacted messages hidden + ~hidden by default; shown with "Show Hidden Events" ✓"Message deleted"
placeholder shown
✓shows redaction notice - ✓shows redaction notice + ✗redacted events are hidden from the timeline ✓"Message deleted"
placeholder shown
✓shows redaction notice Location sharing ~map embed view +
static share button
- ✗ + ~shows received locations; cannot send ✓live & static,
map rendering
~basic static ✗ @@ -1208,16 +1214,16 @@ Client comparison last reviewed Message forwarding ✓forward to any room ✗ - ~via share menu - ✓ - ~ + ✓Forward action; multi-room on Android ✓ ✗ + ✓ + ✓ Per-message read receiptswho read each message ✓avatar pill below message,
click for list + timestamps
- ✗ + ✓'Read Receipts' in message menu lists readers ✓avatar thumbnails ✓ ✓ @@ -1227,59 +1233,59 @@ Client comparison last reviewed Who reactedsee who reacted with each emoji ✓hover tooltip with names;
right-click for full avatar modal
- ✗ - ~tap reaction chip - ~ + ✓hover tooltip + 'View Reactions' viewer + ✓long-press reaction for summary sheet + ✓long-press reaction ✓ - ✓tooltip + click for list + ✓hover tooltip lists reactors ✓ Edit history viewersee all prior versions of an edited message ✓click "(edited)" label → modal
with all versions + timestamps
✗label shown, not clickable - ✓ + ✗shows "(edited)" label only ✗ ✗ ✓ - ✓ + ✗only an 'Edited' marker Custom status messageshown below username ✓emoji picker, auto-clear timer
(30 min – 7 days), 64-char limit
✗ - ✗ - ✗ - ✗ - ✓via profile settings - ✗ + ~emoji + text status (needs server support) + ✓Set status; shown under DM header & in profile + ✓shown under name in user panels/profile + ~Labs; needs homeserver support (MSC4429) + ✓shown next to sender name in timeline & in profile Online presence trackingidle/away auto-detection ✓online on start, idle after 10 min,
unavailable when tab hidden,
offline on close; hide-status toggle
- ~manual AFK only; auto idle
detection PR open, unmerged
- ~basic online/offline only - ~basic online/offline only - ~inactivity monitor shipped Oct 2025;
no tab/close detection confirmed
- ~3-min idle timer (shipped Nov 2023);
no tab detection, no offline on close,
no user-facing hide toggle
+ ~shows others' status; no idle detection + ~reports own presence; doesn't show others' ~basic online/offline only + ~sets 'unavailable' 15s after the app loses focus; no input-idle timer + ~3-min idle → away; no hide toggle + ~auto: unavailable ~30 s after losing focus Media Gallerybrowse room images/videos/files ✓right-side drawer;
Images/Videos/Files tabs
✗ + ✓"Media and files" browser in room info + ✓Gallery & Files tabs in chat search ✗ - ✗ - ✗ - ✗ + ~Files panel lists room attachments; no grid gallery ✗ Sidebar room filterfilter by name in real time ✓Home & DMs tabs ✗ - ✗ - ✗ + ✓room list search + filter chips + ✓search field filters chat list by name + filter chips ✗ ✗ ✗ @@ -1288,30 +1294,30 @@ Client comparison last reviewed Favorite roomsstarred section in sidebar ✓m.favourite tag, syncs
across devices
✗ - ✗ - ✗ - ✗ + ~Favourites filter chip (no separate section) + ~favourite (pin) floats to top; tag filter chips + ✓'Favorites' section (v0.5.0) ✓favourites section - ✗ + ✓'Favourites' tag in community sidebar Invite link + QR code ✓matrix.to URL + QR code
in invite modal & room settings
✗ + ~share room link; no QR + ✓share invite link + QR codes ✗ - ✗ - ✗ - ✗ + ✓Share room dialog: matrix.to link + QR code ✗ Custom notification soundsper-category sound selector ✓per-category sound selector; ▶ preview ✗ + ~iOS: choose alert tone (global) ✗ ✗ - ✗ - ✗ + ~per room, not per category ✗ @@ -1329,15 +1335,15 @@ Client comparison last reviewed ✓Recent / A→Z / Unread First ✗ ~sort by activity only - ~alphabetical only - ✓multiple sort options - ~limited - ✗ + ~activity only (favourites first, low priority last) + ~manual drag-reorder; no sort selector + ✓Activity, A-Z or Unread-first + ✓by importance/unread or alphabetical Push notifications - ~web push only - ~web push only + ~OS notifications while the app is open; no background push yet + ~only while the tab/app is open; optional email ✓ ✓ ✓ @@ -1361,7 +1367,7 @@ Client comparison last reviewed ✗ ✗ ✗ - ~partial / labs + ✗ ✗ @@ -1371,7 +1377,7 @@ Client comparison last reviewed ✗ ✗ ✗ - ✓ + ✗ ✗ @@ -1379,7 +1385,7 @@ Client comparison last reviewed ✓"Read more" toggle,
threshold configurable
✗ ✗ - ✗ + ✓collapses >25 lines (configurable), Show more/less ✗ ✗ ✗ @@ -1410,7 +1416,7 @@ Client comparison last reviewed ✗ ✗ ✗ - ✗ + ✓leading emoji becomes the room icon when no avatar ✗ ✗ @@ -1420,9 +1426,9 @@ Client comparison last reviewed ✗ ✗ ✗ - ~hover bar, no recents - ✗ + ✓hover bar shows up to 4 recent reactions, 1-click ✗ + ✓hover bar shows recent reactions, 1-click In-app notification toastsTDS-styled, when window focused @@ -1438,7 +1444,7 @@ Client comparison last reviewed On-device message translationread foreign messages in your language ✓100% on-device browser AI;
works in E2EE rooms, no cloud;
Chromium desktop & Lotus app
✗ - ✗ + ~iOS only (Apple Translation) ✗ ✗ ✗