Even being able to have bot custom keyboards/buttons is pretty great
Even being able to have bot custom keyboards/buttons is pretty great
Edit: I found this [1] table that hopefully simplifies things, I'll see if that works out.
[1]: https://spec.matrix.org/v1.8/client-server-api/#mroommember
Python: slixmpp
Go: Mellium or go-xmpp
Rust: xmpp-rs
Java: Smack
Any platforms I missed?
There is also the Snikket SDK in development, which is still in its early stages, and designed for XMPP IM apps specifically (whereas most of the libraries listed above are generic and can be turned to any purpose). The SDK is still lacking a few big things like E2EE, but already has calls and some other stuff.
Edit: I should add that building a good messaging app is a lot of work (ask anyone who has tried it, regardless of protocol). If that's what you're doing, consider contributing to or at least starting with an existing project.
With federated systems, notifications are a big problem on iOS because the apps don't actually get to run in the background in the traditional sense. They can periodically "refresh", or they can be opened by a user, or they can be woken up by a notification. Notifications can only come from Apple, and can only come via Apple from the app's developer.
Even selfhosted Mattermost pushes notifications to users via the Mattermost organization's centralized APNS notification proxy. It's an annoying form of phone-home, and I think it may even leak message content to the publisher (because the notifications can contain message data).
If you self-host an XMPP server, you can't get realtime notifications of messages on iOS unless you have the app actively open and foregrounded so the app itself can maintain a connection to the server. The moment (or, actually, 15-20 seconds later) you lock your device, poof goes the connection.
XMPP is not end to end encrypted, and is a dying (and weird) protocol. If you're going to selfhost anything, Matrix (via dendrite or synapse or whatever the current state of the art is) is probably the correct answer.
You're quite right that a situation such as you describe (requiring the app to be open to receive messages) would be a horrible experience. Support for push notifications was a solved problem years ago.
The server support is irrelevant; this is an iOS/APNS issue.
With telegram my partner doesn't need a license. They already use telegram