Wishlist for XMPP
I've been using XMPP since ~2017, and onboarding people to it for just as long. In spite of the many setbacks facing XMPP - low hype, low funding, and the world's pervasive ignorance and apathy towards free software, privacy, and decentralization 1 You might think it's a problem restricted to the unwashed masses, but no - even the tech community is afflicted. Even the free software community is afflicted, or they wouldn't all be using GitHub, Telegram, Discord, and Signal like lambs to the slaughter. Hence, "pervasive". - the XMPP community continues to improve the clients and the ecosystem in general.
Here are some things I would like to see in the future. Some of them come from user feedback, given by both casual and technical users. Others come from my own experience in using XMPP and onboarding others.
Note that I don't use iOS, so despite the occasional points for iOS, my own experience is mostly limited to Android and desktop Linux.
Points of friction in onboarding
Quicksy for iOS
Monal is working on this. Update: As of 22nd August 2024, an iOS version of Quicksy based on Monal is now available on the App Store! https://fosstodon.org/@Monal/113004853520449161
Quicksy is currently our best bet at onboarding the masses who don't use password managers, are prone to forgetting passwords, and consider adding contacts to be unnecessary labor.
- Actually, we need to be able to create a Quicksy account from any client. Monocles Chat, for example, adds many oft-requested features to Conversations, and would be a good candidate to add Quicksy registration support to.
Decentralized and private contact discovery
…which does not rely on phone numbers.
Quicksy's contact discovery is centralized. Movim's idea of suggesting contacts on the same server is also centralized.
An idea originating in the JoinJabber, Prav, and diasp.in communities is to suggest adding (or automatically add) to your contacts members of private group chats you are in. This can work quite well -
- Most people who onboard others usually invite them to one or more private groups.
- It also takes care of suggesting contacts from the correct "circles".
Some claim that "members of a group chat can already add each other manually", but that's missing the point.
- Not suggesting contacts from private groups affects discoverability - it hides the action away behind additional steps. In my experience, most people don't add mutual contacts in private groups, even when they know them. Most people have never even opened the channel details screen. 2 You have to realize the (low) significance Jabber holds for most people - in most cases, it's "a weird app I have to use because of this weird person who doesn't use WhatsApp." We must accept and adapt to this reality if we are to change it. Relatively dedicated users will find a way to add others, but the majority of people won't.
- Adding mutual contacts from group chats is manual labor which people neither want nor need to perform. I've tried getting people to manually add mutual contacts, and the response is usually, "This app [sic] is too much work."
Software should always aim to reduce labor performed by users.
OMEMO
- OMEMO should be enabled by default. This will decrease the number of the onboarding steps for each contact.
- The first OMEMO message to/from a new contact often can't be decrypted.
Autofill contact list on first install
On a fresh install, all existing or discovered contacts should be added to the chat list. When a new contact is added, the contact should be added to the chat list.
Most people see the empty chat list and don't know how to proceed.
- Conversations and forks have a fairly obvious "start chat" floating action button (FAB), but new users don't seem to notice it.
- The UI should reduce manual work - hitting the FAB creates additional work during the critical onboarding task of starting a chat.
- The current UI (empty and manually-populated chat list) also makes their existing contacts less discoverable, by hiding them in the contacts/new chat screen.
- In a similar vein, Conversations and/or some of its forks open the contacts menu when there are no chats in the chat list. But I think having a populated chat list on fresh installs is still better UX…
More prominent contact requests
Observed in Conversations and forks.
Contacts frequently miss friend requests. Contact requests should be made more prominent, and should perhaps be made notifications.
Power and data savers
- The battery optimization dialogue can be missed, misunderstood, or dismissed too easily. It can be accessed again in "Manage accounts", but that's too well-hidden. 3 Despite using Conversations since 2017, I didn't discover this until this year. 🙂 It should be a persistent notification, as well as a message in the chat list. To ensure that people read it, perhaps there should be a 3 second timer before the dialogue can be dismissed.
- Lock the app to recent apps, in interfaces which support it.
- Exempt clients from OEM-specific power/data savers.
Features hindering use (post-onboarding)
Features affecting everyone
These affect both casual and power users.
Jump to search results
Implemented in Gajim.
Missing in Conversations and forks.
Replies, and better reply UI
Present in Cheogram, Monocles Chat, and Gajim.
Missing in Conversations/Quicksy Android, and Monal/Quicksy iOS.
- Swipe to reply in mobile clients. Implemented in Monocles Chat.
- Make it visually different from quotes (includes showing the OP's name, time, etc). Implemented in Gajim and Monocles Chat.
Click/Tap to jump to replied-to message. Implemented in Gajim and Cheogram.
Update: Monocles Chat has implemented this in v1.7.11.
- Ability to reply to a message without quoting the whole thing.
- Allow the user to trim down the quoted text to only the part that is actually relevant to the reply.
- Clients should not include nested quotes when replying. Otherwise, the quoted text becomes progressively larger, which just adds noise to the chat.
- Clients should avoid notifying users when their name is mentioned in a quote.
Edit your message to change the message you replied to. Useful when you forget to select a message to reply to, or respond to the wrong message.
Update: Monocles Chat has implemented this in v1.7.11.
Reply to files.
Monocles Chat's UI for this is rather basic and messy, as it merely quotes the full download URL, which can be pretty long and not very informative. To figure out what file somebody is talking about, you have to go through the tedious process of copying the download URLs of possible files and checking them against the quoted URL.Update: Monocles Chat has implemented a better interface for this since v1.7.11.
Gajim's UI is better (you can tap to jump to the file, and the reply is just the file name), but does not show the file preview, which might be preferable.
Better call experience
Observed in Conversations and forks -
- Calls can take an age to connect, or repeatedly fail to connect entirely.
- If you are on an XMPP call and receive a PSTN call, the XMPP app immediately stops receiving your audio. You can hear your contact, but they can't hear you - you can't even tell them that you'll call them back later. You just have to hang up, or wait for the PSTN call to end.
- You must connect your Bluetooth headset before you answer a call. Once you answer it, the client does not route audio to the headset, even after the phone has connected to it.
- There's no way to switch from phone to Bluetooth device or vice versa during a call.
Correct any message you sent
Not just the last one, but the last N messages. Even if you sent it from one client, you should be able to correct it in another. Restarting a client shouldn't prevent you from editing your messages, either.
Update: Monocles Chat has implemented this in v1.7.11.
It should be possible to view edit history in edited messages.
History retention and end-to-end encryption
End-to-end encryption should retain full history on new devices.
Ideally this should be compatible with OMEMO, rather than requiring people to use a different encryption protocol. There's discussion about implementing client-to-client MAM to achieve this.
If not, we should move to OpenPGP for XMPP (OX), if the good parts of OMEMO UX can be achieved with it.
Message moderation
Many clients support it…with the notable exception of Conversations and Quicksy.
Message moderation is necessary to provide a safe and friendly environment for new users. Nobody needs to see shock porn spam, and certainly not casual users.
Chat-/read-state synchronization
Implemented in Conversations, Cheogram, and Monocles Chat.
Missing in Gajim.
Message Displayed Synchronization https://xmpp.org/extensions/xep-0490.html
Key-sharing issues in encrypted group chats
Encrypted group chats where members are not mutual contacts are quite fiddly due to frequent key-sharing issues. Members have to keep sending messages to trigger key exchange - sometimes to the group chat, sometimes as DMs to the members, often from different clients, etc.
Room knocking, and public pseudonymous encrypted chats
Room knocking (as seen in Matrix) allows moderators to vet users and allow/deny joining. Moderators may also configure the channel to allow users to could see the room subject and a limited amount of the room's messages, to know what to expect.
This keeps the channel discoverable (unlike private group chats), while also keeping out bots, spam, bridged users, etc.
According to singpolyma (of Cheogram and soprani.ca fame), "we even have the protocol for this, but [no] implementations yet" - https://xmpp.org/extensions/xep-0045.html#regapprove.
Room knocking would also allow for encrypted pseudonymous public channels on XMPP - encrypted channels which are publicly discoverable but do not reveal JIDs to participants. Power users who otherwise prefer XMPP have cited preferring SimpleX for this purpose - but there's no reason XMPP can't cover this base too.
Features for casual users
These are features which privacy-apathetic contacts cite as reasons for using WhatsApp rather than XMPP (even when they have the contact in question in their XMPP roster).
Push Notifications on iOS
Push is either broken on iOS, or is too easy to misconfigure. As a result, many of my Siskin and Monal contacts don't receive messages and calls until they open the app. Which makes people less likely to use XMPP in general.
Group AV calls
Implented in Dino.
Missing in Conversations, Monocles Chat, and Gajim.
Image galleries/grouped file transfer
Like WhatsApp and other messengers.
When you open an image, you should be able to scroll between images in the same chat.
Ideally this should be possible with any image viewer of the user's choice (I'd much prefer to use Fossify Gallery, which has all the features I want and which I've configured to my liking, rather than a built-in image viewer which will probably have fewer features; adding those features will just increase the burden on maintainers) - but from what I've heard, Android restrictions make this impossible.
- It should also be possible to add captions to groups of sent files.
Message reactions
Implemented in Gajim.
Update - now implemented in Conversations/Quicksy and Monocles Chat.
Monocles supports sending reactions, but does not yet have the expected reactions UI to display them.
WhatsApp-style "status"
The groundwork is there with Movim's social media XEP(s) - other clients need to add support.
Direct sharing
Update: As of 3rd January 2025, this is fixed in Cheogram v2.17.2, Conversations v2.17.7, and Monocles Chat 2.0.3
When Android users share something, the system recommends them contacts to share with (in addition to applications). From what I can make out, XMPP clients don't hook into this functionality, which affects discoverability and creates additional work - first to find the entry for the XMPP app, and then to find the contact in the app.
Better file transfer workflow
- (like WhatsApp) If a video is larger than the upload file size limit, offer to split it into two or more files before sending.
- (like Element) Each time you share images or videos, ask the user about whether to resize/compress them, or send them as-is. The last choice should be the default for the next prompt.
Delete own messages
Implemented in Monocles Chat.
Some users literally use WhatsApp as a personal notetaking app because of this functionality 🤔
Polls
Message reactions can work as a stopgap, so this is low on the list.
Features for power users
Threads
Implemented in Cheogram and Monocles Chat Missing in Conversations/Quicksy, and desktop clients.
Some important refinements -
- Let users move their own messages from one thread to another.
- Let owners and moderators move anybody's messages from one thread to another.
- A "forum view" which shows a list of threads instead of messages. You must choose a thread before writing, or create a new one. (like Zulip)
Tagged organization of chats
Gajim has a concept of workspaces. Presumably, this feature exists to allow users to organize chats as they like…but it's hierarchical. Hierarchical organization is too inflexible to really allow expressive modeling of the real world. 4 Also a common criticism of UNIX's hierarchical filesystems. Critically, if my contact is both a programmer and an OSM contributor, Gajim does not allow them to be present in both my "Programming" and "OSM" workspaces.
I can imagine situations where the restrictions of hierarchical organization can be useful, e.g. rigidly-separated "work" and "home" workspaces. But whereas it's possible to emulate rigid hierarchies through tags, it's not possible to emulate tags through hierarchies.
Showing joins, parts, and moderation actions (quiet, ban, kick)
Implemented in Gajim.
This is important for moderators managing large channels, and channel members in general.
Bugs
Schrödinger's Chat
Silent disconnection from channels (a.k.a. Schrödinger's Chat). Server restarts should be invisible to users.
This is probably one of the biggest UX issues in XMPP today.
Gajim requires manual reconnection in some situations. Conversations and its forks still require manual exit/rejoin. Servers also need to be updated with the requisite configuration.
Related - stream management for S2S connections (ejabberd issue).
The MIX and MUC2 proposals aim to fix this isssue.
Can't decrypt messages
Observed in Gajim.
If I keep Gajim offline for even an hour or two (e.g. I suspend my laptop for a few hours of travel), it fails to decrypt messages received in the meantime. Thus, maintaining an unbroken set of logs in Gajim all but requires me to keep it online at all times, which defeats the whole purpose of offline message support.
Some suspect that this is because of hardwired values in the OMEMO library used by Conversations and its forks.
Display names of Quicksy and Prav users
Observed in Gajim.
All clients should show the same names for contacts with phone numbers. (e.g. Quicksy and Prav users) Conversations and its forks show their usernames, but in Gajim I can't seem to search for these users by their usernames.
Edited messages are sometimes displayed as separate messages
Observed in Gajim.
It's pretty confusing and annoying for users - not to mention inconsistent with other clients.
User interface
Mobile clients should be more bottom-bar oriented.
Implemented in Monocles Chat. Missing in Conversations, Quicksy, and Cheogram.
Message formatting toolbar.
Implemented in Monocles Chat, but not visible by default. Missing in Conversations, Quicksy, and Cheogram.
- Mobile client context menus should use icons rather than text (like WhatsApp message long-press menu). Graphics can be recognized much more quickly than text. They're also useful for illiterate/low-literate users.
Other enhancements (not preventing use)
Search keywords
from:<username>
(like Gajim)
Hide message styling syntax
Messages should be displayed without message styling syntax characters. (like Monocles Chat)
- But really, we should replace Message Styling with XHTML-IM. Convert styling into XHTML-IM to satisfy the markup fans, if need be.
More styling elements
e.g. bullet lists, headings, URLs
- URL markup is often cited as a security hazard, because you can hide a harmful link behind innocuous link text. But isn't that easily handled by the appilcation prompting the user when they open the link? e.g. "You're about to visit <full URL>. Proceed?"
Improve display of XMPP channel links
e.g. Monocles Chat replaces channel URIs with the channel title.
A way to quickly switch between two or more chats
I often need a way to quickly switch between two or more chats, both on Android and on the desktop. Clients could support breaking out one or more chats into a new window (especially on Android), or providing a keybinding to switch to the last-seen chat (especially on desktop).
View past versions of corrected and moderated messages
Useful for moderators to evaluate what another moderator redacted.
Per-chat/channel profile pictures
I may want to use an actual photograph of myself for some users, and a different profile picture for other users. Similar to per-channel nicknames, I want to be able to set different profile pictures to suit each channel.
Multiple download resolutions for images and videos
Users with large screens, large storage, and large bandwidth (e.g. PC users) may prefer larger-resolution images and videos, whereas mobile users may prefer the opposite.
For each received media file (and media gallery), recipients should be given the option to download a few different sizes.
For unencrypted chats, the server could perform the compression. In encrypted chats, the client will have to do it.
Link to specific messages
If we can link to a specific message via XMPP URI and web invite link (such that any client could open the link and jump to the message), it would become easier to refer to past XMPP conversations, even outside of XMPP.
Reversible blocking
Blocking messages from users, in such a way that clients still receive and log their messages, but hide them in the user interface. Users should be able to view/hide these messages, both one at a time and en masse.
Dedicated UI for searching and joining IRC channels
(like Element?)
This is low priority, because we should be focusing on modern protocols like XMPP and moving away from primitive protocols like IRC. Still, if XMPP clients provide a good IRC interface, they can be attractive to power users.