diff --git a/guide/matrix-vs-discord.md b/guide/matrix-vs-discord.md index b4bb3310..7da0adc5 100644 --- a/guide/matrix-vs-discord.md +++ b/guide/matrix-vs-discord.md @@ -85,20 +85,20 @@ Matrix has a handful server implementations and about a dozen general purpose cl | Avatar | Static, maximum 8 MB. Cannot be zoomed unless using a bot or manually entering the URL to higher definition images, in which case the returned avatar has a maximum definition of 1024x1024. | **See "Attachments" for limits.** Can be zoomed (at least in Element/SchildiChat), in which case the avatar will be shown in the uploaded definition. Animated avatars are **supported**. | Static, up to ~1 MB. Can be zoomed. | | Profile description and background | **Supported**. | Not supported currently, will be supported using profile rooms. | Same as Discord. | | Ability to read messages while offline | Official web and desktop clients artificially block viewing anything at all when it loses the real-time connection. No such limitation in official mobile clients. | Messages in client cache can be read without restriction. | Currently, the client behaves the same way as Discord's. | -| Profile status | **Supported**. | Effectively not supported[^1]. | Supported. | +| Profile status | **Supported**. | Not supported. | Supported. | | Nicknames[^2] | Supported. Maximum 32 characters. | **Supported** (`/myroomnick`). Up to ~65200 bytes. | Supported, length limit depends on the instance.| | Specific avatars[^2] | Requires Nitro. | [**Supported**](../features/#attachments) (`/myroomavatar`). See "Attachments" for limits. | Free, depends on the server. | | 2FA | Email, WebAuthn or SMS/TOTP. | Not required for login, but required (QR code, emoji verification, or Security Key) for viewing past encrypted messages. | TOTP. | | **Text messages** | Maximum 2000 characters. Supports Markdown (with some modifications). | **Up to ~65200 bytes (up to ~21270 bytes if a formatted message with plain text fallback sent).[^7] [Supports Markdown and HTML.](../features/#text)** | Length limit depending on the instance. Supports Markdown (with some modifications). | -| Attachments | Maximum 50 MB (maximum 500 MB for users with Nitro tier 2, and also for all users in a "server" with boost tier 3). Discord Inc. has implemented hotlinking protection using expiring signatures. | **Maximum 50~100 MB** (for most homeservers; customizable if you run your own homeserver, however, users from the servers with smaller attachment limits will not be able to receive large attachments, as Matrix proxies attachments across federating servers to prevent grabbing the IP addresses of remote users). Attachments sent to end-to-end encrypted rooms are also sent encrypted. Other than that, no hotlinking protection. | Size limit depending on the server. Hotlinking protection depends on the server operator's whim. | +| Attachments | Maximum 50 MB (maximum 500 MB for users with Nitro tier 2, and also for all users in a "server" with boost tier 3). Discord Inc. has implemented hotlinking protection using expiring signatures. | Size limit depending on the server. **Maximum 50~100 MB** (for most homeservers; customizable if you run your own homeserver. However, users from the servers with smaller attachment limits will not be able to receive large attachments, as each homeserver receives a copy of the attachment). Attachments sent to end-to-end encrypted rooms are also sent encrypted (unless forwarded from an unencrypted room, in which case only the identifier will be encrypted). Other than that, no hotlinking protection. | Size limit depending on the server. Hotlinking protection depends on the server operator's whim. | | Custom emotes in messages | Free users can only use static emotes defined within the "server". Using emojis from outside the "server" and using animated emojis are limited to Nitro users only. | It is possible to insert user-defined static emotes in messages, see [here](../features/#attachments). No support for animated emotes. | Static and animated emojis supported. | -| Reactions | Only emotes (Unicode or custom ones). | Unicode emotes and [text](../features/#reactions). | Only emotes (Unicode or custom ones). +| Reactions | Only emotes (Unicode or custom ones). Use of custom emotes subject to the same limit above. | Unicode emotes and [text](../features/#reactions). Support for custom emotes reactions are inconsistent across clients, but this may change in the future. | Only emotes (Unicode or custom ones). | Stickers | Only stickers defined within the "server". | **Unlimited with setup.** See [here](../features/#stickers). | | Public read receipts | Not supported. | **Supported.** | Planned. | | Notifications and notification settings | Mostly sender-controlled except for a small receiver-control of blocking the sender, server-side. | In plaintext events, reciever-controlled, server-side, including pattern matching. In end to end encrypted events, receiver-controlled, client-side in the receiving device. | Sender-controlled by default, additional receiver control planned, server-side. | | **Direct messages** | Not encrypted. | **Encrypted by default**, including VoIP. | Not encrypted. End-to-end encryption support planned. | | Starting a DM | Depending on privacy settings, initiating a DM requires the two users to have established "friendship" or have certain mutual "servers." Users are given the choice to accept, remove, or report a DM (since late 2021). | Initiating a DM solely requires the recipient to accept the request[^3]. Users can leave DMs anytime they wish. | -| **Group chats** | A group chat channel is associated with a "server." You can only join 100 "servers," 200 with Nitro. Additionally, there are group chats not associated with servers, called group DMs, with far more limited features than servers can. | A room is standalone, but can be optionally included and associated with a Space, which is just a room linking to other rooms. You can join **unlimited** amount of rooms. | Same as Discord. | +| **Group chats** | A group chat channel is associated with a "server." You can only join 100 "servers," 200 with Nitro. Additionally, there are group chats not associated with servers, called group DMs, with far more limited features than servers can. | A room is standalone, but can be optionally included and associated with a Space, which is just a room linking to other rooms. You can join **unlimited** amount of rooms (in theory). | Same as Discord. | | VoIP in groups | Supported. End to end encrpted VoIP support planned. | Supported. The room plays the role of signalling, audiovisual data is sadly routed through a separate WebRTC channel. End to end encryption supported. | Supported. End to end encryption planned. | | Organizing chats | "Servers" can be organized into folders, but each "server" can only belong to 1 folder. Channels in a "server" can only be organized by the "server" owner and moderators with "manage channels" permission, in a many to one fashion, and cannot be moved to another "server" once created.| Rooms can be included within an unlimited amount of Spaces. Spaces may also include other Spaces (similar to Discord's channel categories). | Same as Discord. | | Group chat privacy | Denying "View Channel History" permission prevents users from reading messages prior to their most recent login. However the "server" owners cannot enjoy that privacy, as "server" owners cannot deny their own permissions due to how Discord's permission system works. | You may deny new members from reading messages prior to them being invited / joining. You may also allow or deny guest access (such as [Matrix Static](http://view.matrix.org/)) from reading messages. You may also enable encryption[^4]. | Same as Discord. | @@ -106,9 +106,9 @@ Matrix has a handful server implementations and about a dozen general purpose cl | Publicity | Although Discord offers its own "server" discovery feature, the requirements are somewhat arbitrary, so third-party services are often used. Only "server" owners can apply to Discord's own "server" discovery directory. Additionally, there is an experimental feature that allows users to list "server"s in a private directory listing, but this is currently only available to user with certain university e-mail addresses. Third party directory services may differ. | Each homeserver has a room directory which anyone in that homeserver may publish to. | Similar to Discord, except anyone can create a private guild directory. | | Invite | Through generating invite links or using an OAuth-based integration. | Through directly inviting users, or through shareable [addresses](../features/#promotion). | Invite links and registration tokens. | | Permissions in group chats | Single-owner, up to 255 roles. How long did it take for you to learn role hierarchy?[^8] A "server" can only be shut down by its owner, and that affects everyone. Members cannot demote their own permissions. Roles of a member are reset when a member leaves hence do not survive rejoin. | Up to 2^54 power levels (-2^53 to 2^53-1, however I highly doubt you will *ever* reach that limit), with minimal permissions. A user acquires a permission if their power level is equal to or higher than the power level required for the specific permission. Rooms are not owned by any user or server, hence cannot usually forcibly be shut down without coordination. Members can demote their own permissions. Power levels of members survive leave and rejoin. | Similar to Discord, with optional moderation capability of range deletion ("purge"). | -| Pre-moderation capabilities | **Partly mandatory, partly opt-in.** Keyword-based pattern matching, automated community rules enforcement using natural language processing (partially powered by ~~OpenAI~~ AI.com products), spam and scam link matching, user nickname, custom status and biography sanitisation, virus file detection. Called AutoMod in the product. | **No standard method exists. Can only be enforced by the homeserver of the original message.** | Not implemented yet. | +| Pre-moderation capabilities | Partly mandatory, partly opt-in. Keyword-based pattern matching, automated community rules enforcement using natural language processing (partially powered by AI.com products), spam and scam link matching, user nickname, custom status and biography sanitisation, virus file detection. Called AutoMod in the product. | No standard method exists. Can only be enforced by the homeserver of the original message. | Not implemented yet. | | Size limits of group chats | 10 in group DMs, several tiers in "servers" ranging from 125 thousands to 1.5 million, subject to manual transition across those tiers.[^15] | No artificial limits, albeit current implementations do not perform well with rooms having more than a few tens of thousands of members and a few dozens of homeservers. | No artificial limits, albeit the current implementation does not perform well with guilds having more than a few thousands of members. | -| Bans | Bans are only visible to "server" moderators. One can also see their own ban when they attempt to join a "server", but not the ban reason. | Bans are public to all members, along with the reasons. | Same as Discord. | +| Bans | Bans are only visible to "server" moderators. One can also see their own ban when they attempt to join a "server", but not the ban reason. | Bans are public to all members, along with the reasons. Note that if you ban a user from a room (directly, not by using Mjölnir), regardless of whether they have been a member of that room, the user will be notified. | Same as Discord. | | Disabled and deleted account handling | Disabling an account is reversible until 2 years after disabling. Accounts that do not log in for 2 years get automatically deleted every 45 days. Messages sent to a "server" from deleted accounts stay unless explicitly removed by somebody else. User name and user settings from deleted accounts are removed. Deleted users are coalesced to a single ghost user, with the user ID 456226577798135808. "Servers" owned by accounts shut down before November 2022 may stay. "Servers" owned by a manually deleted accounts have always been automatically shut down, so do any "servers" deleted after November 2022. | Disabling an account is usually irreversible. Users can cause their messages to be forgotten while disabling their account: in that case, their messages are not sent to further users and servers. Rooms created by disabled accounts stay. | Disabling an account is reversible. User deletion is irreversible. | | **Running a bot** | Running a bot in more than 100 "servers" requires a proof of identity, similar in manner to one encountered in international borders. Selfbotting is forbidden, but this is inconsistently enforced. | You can run bots on any user accounts[^5] [^6]. Selfbotting is permitted (but be nice). | Self-botting is possible, as is application-based botting. | | **Apps to access platform** | By ToS, you are only allowed to use the official Discord app (including its PTB and Canary variants). This is not enforced consistently: some modifications and some third party clients are generally tolerated, while others may be forbidden. Third party clients that do not touch certain user profile related features tend to be not caught. | Element is the main app, but [**you're welcomed to use whatever you wish**](../#what-app-should-i-use). You can even make an app yourself[^6]! | Spacebar has its own client, but any Discord client is welcome. | @@ -122,32 +122,30 @@ Matrix has a handful server implementations and about a dozen general purpose cl ## Footnotes -[^1]: Element and SchildiChat has status available as a lab feature, but it is only visible to those who you have a DM with. Statuses are not encrypted. +[^1]: For Discord "servers" and for Matrix rooms. -[^2]: For Discord "servers" and for Matrix rooms. +[^2]: Note that Matrix has no concept of "friends" or "contacts" per se, although the DM list can serve the same purpose. However, user-based contact ignoring exists on Matrix, using two different methods. The former method prevents any and all messages from reaching the recipient, and the latter method using policy rooms hides them client-side by interpreting an ignore list. The latter method is currently only available in Element as a labs feature. -[^3]: Note that Matrix has no concept of "friends" or "contacts" per se, although the DM list can serve the same purpose. However, user-based contact ignoring exists on Matrix, using two different methods. The former method prevents any and all messages from reaching the recipient, and the latter method using policy rooms hides them client-side by interpreting an ignore list. The latter method is currently only available in Element as a labs feature. +[^3]: Enabling encryption is irreversible for security reasons. Note that it is pointless to enable encryption in a public room, with one exception: the case you want to have a persistent cryptographic trail of who read the messages. Furthermore, enabling encryption means users will not see messages before their invitation (if applicable) or their entry. -[^4]: Enabling encryption is irreversible for security reasons. Note that it is pointless to enable encryption in a public room, with one exception: the case you want to have a persistent cryptographic trail of who read the messages. Furthermore, enabling encryption means users will not see messages before their invitation (if applicable) or their entry. +[^4]: Matrix has no distinction between user and bot accounts (nor is there any dependency between the two). Unless specifically exempted by the homeserver (not needed in most cases), bots have the same ratelimit as other users. In Element and SchildiChat, the user token of an account is available by accessing "User Settings" then "Help & About." When running an autonomous bot, please be courteous and indicate to others (in username or display name) that the account is a bot. Bots that want to control other user accounts need to create an application service, which needs to be approved by an administrator of the homeserver that the bot is using. -[^5]: Matrix has no distinction between user and bot accounts (nor is there any dependency between the two). Unless specifically exempted by the homeserver (not needed in most cases), bots have the same ratelimit as other users. In Element and SchildiChat, the user token of an account is available by accessing "User Settings" then "Help & About." When running an autonomous bot, please be courteous and indicate to others (in username or display name) that the account is a bot. Bots that want to control other user accounts need to create an application service, which needs to be approved by an administrator of the homeserver that the bot is using. +[^5]: If your app/bot is good, then [matrix.org would love to hear from you (with the potential possibility of featuring you on their blog)!](https://matrix.to/#/#thisweekinmatrix:matrix.org) -[^6]: If your app/bot is good, then [matrix.org would love to hear from you (with the potential possibility of featuring you on their blog)!](https://matrix.to/#/#thisweekinmatrix:matrix.org) +[^6]: Limited by Matrix event size limits. The current event size limit is specified to be 65536 bytes. Formatted message size limit assuming the formatted body takes approximately twice as much as plain text body. -[^7]: Limited by Matrix event size limits. The current event size limit is specified to be 65536 bytes. Formatted message size limit assuming the formatted body takes approximately twice as much as plain text body. +[^7]: May be more accurately described as ban hierarchy, as the order of roles only affect role changes, nick overrides, kicks and bans. Discord's permission system is otherwise "explicit allow wins". -[^8]: May be more accurately described as ban hierarchy, as the order of roles only affect role changes, nick overrides, kicks and bans. Discord's permission system is otherwise "explicit allow wins". +[^8]: Somebody actually tried to report a message after deleting it and they got "no such message in our database" from T&S. Also backed by [Stanislav Vishnevskiy's blog post on infrastructure of Discord](https://blog.discord.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7#.fdhp3rxlo). However, deletions are basically a free-for-all matter: users (including bots) may decide to keep or repost deleted messages, and there is nothing stopping this. -[^9]: Somebody actually tried to report a message after deleting it and they got "no such message in our database" from T&S. Also backed by [Stanislav Vishnevskiy's blog post on infrastructure of Discord](https://blog.discord.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7#.fdhp3rxlo). However, deletions are basically a free-for-all matter: users (including bots) may decide to keep or repost deleted messages, and there is nothing stopping this. +[^9]: Process detection only exists in the desktop client. Somebody reverse engineered this process detection. Unlike Steam's similar process detection, this detection only sends the successfully detected games, not the list of every process running. Can be opted out by disabling the game activity detection. Science endpoint is said to drop the data server-side when the relevant toggles are disabled, however no one has verified if that toggle actually works. Hence assumed as "cannot be opted out". -[^10]: Process detection only exists in the desktop client. Somebody reverse engineered this process detection. Unlike Steam's similar process detection, this detection only sends the successfully detected games, not the list of every process running. Can be opted out by disabling the game activity detection. Science endpoint is said to drop the data server-side when the relevant toggles are disabled, however no one has verified if that toggle actually works. Hence assumed as "cannot be opted out". +[^10]: Paywalling features related to customisation and expressivity is Discord's core business model, stated repeatedly by themselves and also verified by various third party sources. See [here](https://seoaves.com/how-does-discord-make-money-the-discord-business-model/) and [here](https://moneymodels.org/business-models/how-does-discord-make-money/). -[^11]: Paywalling features related to customisation and expressivity is Discord's core business model, stated repeatedly by themselves and also verified by various third party sources. See [here](https://seoaves.com/how-does-discord-make-money-the-discord-business-model/) and [here](https://moneymodels.org/business-models/how-does-discord-make-money/). +[^11]: The exception is messages that @-mention the bot user can still be seen without the message content event. As many bot developers said, this is still a band-aid and not a useful solution. Direct messages are not affected by message content intent. -[^12]: The exception is messages that @-mention the bot user can still be seen without the message content event. As many bot developers said, this is still a band-aid and not a useful solution. Direct messages are not affected by message content intent. +[^12]: Most Matrix servers are known to keep the pre-redaction content of the event for a week, while immediately sending the redaction instruction to their fellow users. Again, redactions are basically a free-for-all matter. -[^13]: Most Matrix servers are known to keep the pre-redaction content of the event for a week, while immediately sending the redaction instruction to their fellow users. Again, redactions are basically a free-for-all matter. +[^13]: More accurately speaking, guilds are mapped to the guild servers in a many-to-one fashion. This can easily be confirmed by "server" outages, which happen when the guild process in the respective server restarts or the guild is being migrated to another server. However, the end users still lack any control on choosing a particular guilds server instance to host a guild. -[^14]: More accurately speaking, guilds are mapped to the guild servers in a many-to-one fashion. This can easily be confirmed by "server" outages, which happen when the guild process in the respective server restarts or the guild is being migrated to another server. However, the end users still lack any control on choosing a particular guilds server instance to host a guild. - -[^15]: Discord "servers" have an initial limit of 125000 members. "Server" owners can request this limit to be increased by filing a support ticket, in which case Discord engineering team looks at the activity of the guild and manually migrates it to a guilds server instance with a larger member limit. Known tiers are: 125k, 250k (beyond this tier, brand verification required), 500k, 1M, 1.5M. +[^14]: Discord "servers" have an initial limit of 125000 members. "Server" owners can request this limit to be increased by filing a support ticket, in which case Discord engineering team looks at the activity of the guild and manually migrates it to a guilds server instance with a larger member limit. Known tiers are: 125k, 250k (beyond this tier, brand verification required), 500k, 1M, 1.5M.