Files
matrix/landing/data/comparison.json
T
Lotus CIandClaude Opus 5.5 1dccca914c
Lint / Shell (shellcheck) (push) Successful in 21s
Lint / JS (eslint) (push) Successful in 11s
Lint / No secrets in webhook configs (push) Successful in 9s
Lint / Landing page is rendered (matrix (push) Successful in 6s
Lint / Python (ruff) (push) Successful in 7s
Lint / Python deps (pip-audit) (push) Successful in 47s
Lint / Secret scan (gitleaks) (push) Successful in 7s
landing: re-verify every client claim (reviewed 2026-09-26)
Each client's card and all 64 table cells were checked against its latest
release (source at the release tag, changelogs, official docs):
Cinny v4.12.7, Element Web v1.12.29, Element X 26.09.2, FluffyChat
v2.9.5, Commet v0.5.0, Nheko v0.12.1. ~95 cells corrected, notes
tightened, chips made consistent (platforms / SDK / one calling chip).

Notable:
- Cinny: calls, voice rooms and screenshare via Element Call are stable
  (card gained the calling chip); ring, who-reacted, read receipts: yes;
  polls: no.
- Element X: cannot START a screenshare (mobile web views have no
  getDisplayMedia) — chip is now "Voice & Video".
- FluffyChat: threads, pinning, media gallery, custom status, QR invites:
  yes; calls still experimental (DM-only, legacy 1:1).
- Commet: web app + Windows/Linux, no macOS; screenshare, widgets
  (v0.5.0), favourites: yes; "Beta" chip dropped (not self-described).
- Nheko: calls are 1:1 only and only in Linux builds; threads: yes; no
  release since Aug 2025.
- Element: no bookmarks or scheduling; custom status is Labs; QR invites
  and sort order: yes.
- Lotus Chat: Vodozemac yes (Rust crypto), widgets yes, push = only while
  open (no background push yet); desktop app is Windows + Linux (the
  feature list said macOS).
- Vodozemac is yes for every js-sdk client now (Rust crypto).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
2026-09-26 16:53:07 -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–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 sub-space nav"
},
{
"mark": "yes",
"note": "best-in-class sub-space nav"
},
{
"mark": "yes",
"note": "dedicated spaces tab,<br>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 &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–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 – 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-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>1-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, 1-click"
},
{
"mark": "no"
},
{
"mark": "yes",
"note": "hover bar shows recent reactions, 1-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"
}
]
}
]
}
]
}