🍄XmppClient

It needs a good name. Please suggest one. My contact details are at the bottom of Secluded.Site.

Sorry for the word vomit but it's late and my laptop is almost dead.

I'm tired of people hating on XMPP because they don't like the clients, I'm tired of recommending different clients with different features for every different platform, and I'm tired of only having two platforms with clients that support everything I personally consider essential.

So I'm going to make my own. It'll be a huge undertaking, I'll need a lot of help, and it will be a very long time before it's usable (at least a year or so).

The plan is to use Go for pretty much everything because Google has put a massive amount of effort into making sure Go code runs well on pretty much every major system, from Windows and macOS to Illumos and FreeBSD. I'll use Gio for the GUI and probably Mellium to make implementing XMPP functionality a bit easier. They don't currently support OMEMO or voice/video calls which I consider essential but they are on the roadmap; see their Open collective for some of the stuff they have planned.

Because everything is so cross-platform and because Go apps compile to a single binary, packaging this up for all the different platforms and distributing it through their app stores should be rather simple. I'm vaguely planning to charge a modest price in most app stores but distribute it for free through F-Droid and through the git forge.

Speaking of git forge, I'll likely do everything through SourceHut but mirror the repo to GitHub for visibility and set up a bot that copies GitHub issues to sourcehut tickets. I'll see about accepting PRs through GitHub but will encourage potential contributors to try git send-email.

Back to the app itself. I want solid voice/video calls, potentially group calls but that's a huge maybe, stickers, and a welcome screen that introduces new users to XMPP as a platform. I'll make heavy use of melvo/xmpp-providers for the registration process; users who don't care about the backend stuff will be able to pick providers from Category A just based on the server name. That will be described like email addresses; some people are user@gmail.com while others are user@yahoo.com but they can all talk to each other. If they want to see more of the backend stuff, they'll be able to select a different radio option and see providers from Category B along with provider details like their bus factor, backup policies, storage quota, etc. Providers in Category C will be used for autocomplete when adding a contact, logging in, etc.

The welcome screens will be a very gentle introduction to XMPP and guide the user through how OMEMO works by interacting with a fake account. After they've gone through that, they'll be given the option to enable manual key verification or stick with blind trust. A Skip button will be present throughout the welcome dialogue. The entire dialogue should be no more than 4-6 pages and the user should be able to go through it again later on in case they forget something.

I'm not entirely sure how the stickers should be implemented because there's not an XEP dealing with them yet. Movim seems to have a nicely interoperable implementation so I'll likely have a look at theirs. I also want some kind of sticker management UI similar to Telegram's (we'll talk more about Telegram next). Person A is using my client, Person B is also using my client, and Person C is using a different client. Person A sends a sticker to both Person B and Person C. Person C's client doesn't implement my sticker stuff so they just see it as if it's an uploaded image. Person B is using my client so they have a slightly richer experience. Tapping the sticker opens a little popup menu giving them the option to zoom in or view the whole pack. A sticker pack will likely be a set of images hosted on a webserver somewhere with a JSON file describing the pack. The XML sent to the recipient's client will include a reference to that JSON, allowing their client to pull the images and ask the user whether they should be downloaded. Once downloaded, the user can then send stickers to other users.

I personally believe that Telegram has, hands-down, the best user experience out of any instant messaging platform I have ever touched. I will be heavily modelling my client after Telegram, probably to the point of comparing them side-by-side and trying to correct discrepancies :P

Supporting audio/video calls on every platform will be absolute hell but it will be done!

If you want me to keep you updated, send me a message somewhere (again, contact details are at the bottom of Secluded.Site) and I'll add you to a list of people to ping. Note that it will probably be a long time before I'm ready to start working on it though. Right now, these are all just thoughts swirling around in my head that I needed to write down.


Misc notes