Files
matrix/landing/data/comparison.json
T
Lotus CIandClaude Opus 5.5 d17c40e79f
Lint / Shell (shellcheck) (pull_request) Successful in 13s
Lint / JS (eslint) (pull_request) Successful in 17s
Lint / No secrets in webhook configs (pull_request) Successful in 10s
Lint / Landing page is rendered (matrix (pull_request) Successful in 9s
Lint / Python (ruff) (pull_request) Successful in 11s
Lint / Python deps (pip-audit) (pull_request) Successful in 1m11s
Lint / Secret scan (gitleaks) (pull_request) Successful in 6s
Lint / Shell (shellcheck) (push) Successful in 9s
Lint / JS (eslint) (push) Successful in 7s
Lint / No secrets in webhook configs (push) Successful in 4s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 39s
Lint / Secret scan (gitleaks) (push) Successful in 6s
landing: describe SSO sign-up, drop dashes and hyphens from the page text
The "How to Join" steps still said to register with a token from Jared;
accounts now come from LLDAP and people sign in with Lotus SSO. The steps
now read: ask Jared for a Lotus Guild account, open chat.lotusguild.org and
sign in with Lotus SSO, join the space. The contact line asks "Questions or
need an account?" and the server details say "Invite only".

Visible text no longer uses em dashes, en dashes or hyphens (dashes became
colons, commas, full stops or "to"; compounds became separate words), in
the hand-written parts and in data/features.json / comparison.json, with
index.html regenerated by build.py. Package names (matrix-js-sdk,
matrix-rust-sdk, matrix-dart-sdk, matrix-sdk-crypto-wasm) and D-Bus keep
their hyphens; markup, URLs and <code> are untouched. The reviewed date
displays as "September 26, 2026" (datetime attribute stays ISO).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
2026-10-13 02:36:25 -04:00

1923 lines
46 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"reviewed": "2026-09-26",
"clients": [
{
"name": "Lotus Chat",
"sub": "chat.lotusguild.org<br>Our Cinny fork"
},
{
"name": "Cinny",
"sub": "cinny.in<br>Official"
},
{
"name": "Element X",
"sub": "iOS &amp; Android"
},
{
"name": "FluffyChat",
"sub": "Android, iOS, Web &amp; Linux"
},
{
"name": "Commet",
"sub": "Android / Win / Linux / Web"
},
{
"name": "Element",
"sub": "Web &amp; 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 &amp; 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&rarr;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 &amp; 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 &rarr; 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 &amp; Encryption",
"rows": [
{
"feature": "E2EE",
"cells": [
{
"mark": "yes"
},
{
"mark": "yes"
},
{
"mark": "yes"
},
{
"mark": "yes"
},
{
"mark": "yes"
},
{
"mark": "yes"
},
{
"mark": "yes"
}
]
},
{
"feature": "Vodozemac encryption<small>stronger crypto track record</small>",
"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 &amp; Video",
"rows": [
{
"feature": "Voice &amp; video calls",
"cells": [
{
"mark": "yes",
"note": "rooms &amp; DMs, group calls,<br>screenshare via Element Call"
},
{
"mark": "yes",
"note": "1:1 + group via embedded Element Call"
},
{
"mark": "yes",
"note": "1:1 &amp; 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,<br>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 &amp; web only"
},
{
"mark": "yes",
"note": "desktop, Android &amp; browser; 1:1 and voice channels"
},
{
"mark": "yes"
},
{
"mark": "yes",
"note": "Linux builds only (1:1 calls; XDG portal)"
}
]
},
{
"feature": "Noise suppression<small>filter background noise from mic</small>",
"cells": [
{
"mark": "yes",
"note": "3 tiers: off / browser native /<br>on device ML (RNNoise, Speex,<br>DTLN, DeepFilterNet&nbsp;3),<br>works on self hosted SFU"
},
{
"mark": "part",
"note": "browser native<br>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 Talk<small>hold key to transmit</small>",
"cells": [
{
"mark": "yes",
"note": "configurable hold key,<br>PTT badge in call bar;<br>M = push to deafen;<br>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 mute<small>silence mic after idle timeout</small>",
"cells": [
{
"mark": "yes",
"note": "1 to 30 min timeout,<br>toast notification"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Voice channel user limit<small>admin set max participants</small>",
"cells": [
{
"mark": "yes",
"note": "per room cap,<br>server enforced<br>for all clients"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Call join/leave sounds<small>cue when others come &amp; go</small>",
"cells": [
{
"mark": "yes",
"note": "3 styles,<br>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 notification<small>ring + Answer/Decline</small>",
"cells": [
{
"mark": "yes",
"note": "DMs &amp; group chats;<br>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 &amp; desktop)"
},
{
"mark": "yes",
"note": "ringtone (selectable) + Accept/Decline bar"
}
]
}
]
},
{
"title": "Core Features",
"rows": [
{
"feature": "Spaces",
"cells": [
{
"mark": "yes",
"note": "best in class subspace nav"
},
{
"mark": "yes",
"note": "best in class subspace nav"
},
{
"mark": "yes",
"note": "dedicated spaces tab,<br>full management"
},
{
"mark": "yes"
},
{
"mark": "yes",
"note": "Discord like categories"
},
{
"mark": "yes",
"note": "subspaces 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 &amp; display;<br>single or multiple choice"
},
{
"mark": "no",
"note": "not rendered (no m.poll support)"
},
{
"mark": "yes",
"note": "create, vote &amp; end"
},
{
"mark": "yes",
"note": "added v2.3.0"
},
{
"mark": "yes",
"note": "added v0.4.2"
},
{
"mark": "yes"
},
{
"mark": "no"
}
]
},
{
"feature": "Voice messages<small>record &amp; play</small>",
"cells": [
{
"mark": "yes",
"note": "record &amp; play, E2EE;<br>0.75×/1×/1.5×/2× speed"
},
{
"mark": "part",
"note": "playback only"
},
{
"mark": "yes",
"note": "record, play, variable speed,<br>reply with voice"
},
{
"mark": "yes",
"note": "record &amp; play,<br>pause support"
},
{
"mark": "part",
"note": "playback confirmed;<br>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 &amp; 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,<br>click outside to close"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "yes",
"note": "privacy proxy,<br>uploads to homeserver"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Message search (encrypted)",
"cells": [
{
"mark": "yes",
"note": "local cache scan; load more<br>buttons extend history per room"
},
{
"mark": "part",
"note": "server search only;<br>no E2EE support"
},
{
"mark": "no"
},
{
"mark": "part",
"note": "per room; downloads &amp; decrypts history client side"
},
{
"mark": "yes",
"note": "client side; auto fetches +<br>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 &amp; 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<small>(text + image as one event)</small>",
"cells": [
{
"mark": "yes",
"note": "caption field on<br>image &amp; video upload"
},
{
"mark": "part",
"note": "shows captions from other clients; cannot send"
},
{
"mark": "yes",
"note": "scrollable captions<br>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 &amp; 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 Filter<small>warm overlay, adjustable intensity</small>",
"cells": [
{
"mark": "yes",
"note": "5 to 80% intensity slider,<br>Settings → Appearance"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Animated chat backgrounds<small>CSS only, GPU accelerated</small>",
"cells": [
{
"mark": "yes",
"note": "5 animated wallpapers (rain,<br>stars, grid pulse, aurora,<br>fireflies); pause toggle"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Deleted message visibility<small>(redacted events)</small>",
"cells": [
{
"mark": "yes",
"note": "\"Message deleted\" with reason<br>if provided"
},
{
"mark": "part",
"note": "hidden by default; shown with \"Show Hidden Events\""
},
{
"mark": "yes",
"note": "\"Message deleted\"<br>placeholder shown"
},
{
"mark": "yes",
"note": "shows redaction notice"
},
{
"mark": "no",
"note": "redacted events are hidden from the timeline"
},
{
"mark": "yes",
"note": "\"Message deleted\"<br>placeholder shown"
},
{
"mark": "yes",
"note": "shows redaction notice"
}
]
},
{
"feature": "Location sharing",
"cells": [
{
"mark": "part",
"note": "map embed view +<br>static share button"
},
{
"mark": "part",
"note": "shows received locations; cannot send"
},
{
"mark": "yes",
"note": "live &amp; static,<br>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 receipts<small>who read each message</small>",
"cells": [
{
"mark": "yes",
"note": "avatar pill below message,<br>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 reacted<small>see who reacted with each emoji</small>",
"cells": [
{
"mark": "yes",
"note": "hover tooltip with names;<br>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 viewer<small>see all prior versions of an edited message</small>",
"cells": [
{
"mark": "yes",
"note": "click \"(edited)\" label → modal<br>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 message<small>shown below username</small>",
"cells": [
{
"mark": "yes",
"note": "emoji picker, auto clear timer<br>(30 min to 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 &amp; 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 &amp; in profile"
}
]
},
{
"feature": "Online presence tracking<small>idle/away auto detection</small>",
"cells": [
{
"mark": "yes",
"note": "online on start, idle after 10 min,<br>unavailable when tab hidden,<br>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 Gallery<small>browse room images/videos/files</small>",
"cells": [
{
"mark": "yes",
"note": "right side drawer;<br>Images/Videos/Files tabs"
},
{
"mark": "no"
},
{
"mark": "yes",
"note": "\"Media and files\" browser in room info"
},
{
"mark": "yes",
"note": "Gallery &amp; Files tabs in chat search"
},
{
"mark": "no"
},
{
"mark": "part",
"note": "Files panel lists room attachments; no grid gallery"
},
{
"mark": "no"
}
]
},
{
"feature": "Sidebar room filter<small>filter by name in real time</small>",
"cells": [
{
"mark": "yes",
"note": "Home &amp; 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 rooms<small>starred section in sidebar</small>",
"cells": [
{
"mark": "yes",
"note": "m.favourite tag, syncs<br>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<br>in invite modal &amp; 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 sounds<small>per category sound selector</small>",
"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 hours<small>silence notifs in a time window</small>",
"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 order<small>sort sidebar rooms by activity, name, or unread</small>",
"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 to 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 history<small>download messages as file</small>",
"cells": [
{
"mark": "yes",
"note": "txt/json/html, date range,<br>E2EE aware"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "yes",
"note": "has export"
},
{
"mark": "no"
}
]
},
{
"feature": "Message scheduling<small>send later with datetime picker</small>",
"cells": [
{
"mark": "yes",
"note": "MSC4140, datetime picker,<br>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,<br>sidebar panel, syncs across devices"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Collapsible long messages<small>auto collapse &gt;20 lines</small>",
"cells": [
{
"mark": "yes",
"note": "\"Read more\" toggle,<br>threshold configurable"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "yes",
"note": "collapses &gt;25 lines (configurable), Show more/less"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Inline GIF preview<small>Giphy / Tenor links auto embed</small>",
"cells": [
{
"mark": "yes",
"note": "via homeserver proxy,<br>no direct CDN contact"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Presence avatar border ring<small>colored ring shows online status</small>",
"cells": [
{
"mark": "yes",
"note": "green/yellow/red ring;<br>timeline, members, mentions"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "Room emoji prefix<small>🎮 renders larger in sidebar</small>",
"cells": [
{
"mark": "yes",
"note": "1.15× size; emoji picker<br>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 hover<small>one click react, no menu needed</small>",
"cells": [
{
"mark": "yes",
"note": "3 recent emoji in hover bar;<br>dismisses emoji picker"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "yes",
"note": "hover bar shows up to 4 recent reactions, one click"
},
{
"mark": "no"
},
{
"mark": "yes",
"note": "hover bar shows recent reactions, one click"
}
]
},
{
"feature": "In app notification toasts<small>TDS styled, when window focused</small>",
"cells": [
{
"mark": "yes",
"note": "slides in bottom right;<br>4 s auto dismiss, click to jump"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
},
{
"feature": "On device message translation<small>read foreign messages in your language</small>",
"cells": [
{
"mark": "yes",
"note": "100% on device browser AI;<br>works in E2EE rooms, no cloud;<br>Chromium desktop &amp; Lotus app"
},
{
"mark": "no"
},
{
"mark": "part",
"note": "iOS only (Apple Translation)"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
},
{
"mark": "no"
}
]
}
]
}
]
}