How Prosody developers spent 2020
blog.prosody.im
blog.prosody.im
I think a nice, lean-but-glossy desktop client (we already have Conversations on mobile) would be really good for the platform. It's a lot easier to fight network effects if the end-user-experience is tangibly better (and you can do a LOT better than the current incumbents that are Slack and Discord.)
Compared to this, the Matrix standard(s) have thus far been able to maintain a certain kind of coherence (IMO), allowing for at least a vision of what a complete implementation of a server or client should look like. The standard is versioned so that you can aim for support of a particular version instead of a pick-and-choose subset of functionality. Also, part of the Matrix's coherence story probably lies in the fact that there is an "official" set of clients in the form of the Element clients.
Ultimately, you cannot prevent others from writing incomplete servers or clients. But you can show what the goal looks like and have other implementations approach it asymptotically.
We are reviewing the most important specifications on a yearly base and provide recommendations in the form of Compliance Suites with different profiles like Instant Messaging, Mobile etc.:
Could you explain how you got this particular impression?
I used to run my own XMPP server for years before moving on to Matrix and the reality was that the only good client was Conversations for Android. There wasn't a single one for Linux desktop that felt modern and up to speed with the latest XEPs.
And let's not even mention trying to get multiple clients supporting the same history with encryption enabled, that was super chaotic.
I'm really glad I abandoned my XMPP server in favor of Matrix. Matrix is modern and it just works and setting up a Synpase server is way easier than setting up a Prosody server.
Sorry you feel that way about Prosody. If you have specific feedback we're always looking to improve the setup experience.
Snikket (briefly mentioned in the post) is an attempt to bundle everything you need for a modern communication server into a single package (e.g. automatic certs and stuff that you need for audio /video) out of the box. Maybe it sounds like it would suit you more.
My criticism is about XMPP in general and its ecosystem.
I stopped my XMPP server a few years ago, Dino was still in its infancy. It's good to see that the client is reaching some maturity but then, looking at the supported XEPs I can see that MAM is not supported for group chats:
- https://github.com/dino/dino/wiki/Supported-XEPs
Fortunately Matrix and the respective clients have been evolving quite well, so I don't see the need of going back to XMPP.
And that's without talking about the elephant in the room of iOS. 5 years ago my workplace moved from XMPP to mattermost. There was a list of features desired by people; 7/8 could have been solved by updating ejabberd and telling people to switch clients, but iOS support meant switching away.
The thing with XMPP vs Matrix is weight: and XMPP server is featherweight compared to Matrix due to their different nature, so I honestly believe that XMPP still has a future.
(And maybe one day, Pidgin 3 will see the light[^4])
[^1]: https://conversations.im/
[^2]: https://github.com/petermolnar/awesome-pidgin-plugins
[^3]: https://gist.github.com/petermolnar/10d815eae0b7cbda2b1e5948...
XMPP has evolved a lot over recent years, but many folk still judge it by the state of Pidgin (where development is focusing on their big 3.0 rather than catching up with modern messaging features) or with the features XMPP had in 2006.
I agree that Synapse, the only currently available Matrix server is resource heavy, but I would not extrapolate this to the future of Matrix servers.
There is still quite some optimization possible.
Also Dendrite is Go, not Rust.
Ah, my bad. Thanks.
Having a gigantic group chat with hundreads of people, with encryption, history and media synchronized between everyone without relying on a centralized server is something that XMPP doesn't even try to solve. Matrix does.
Prosody is a great project, I used to run my own Prosody server before moving on to Matrix. But people shouldn't lose perspective of the state of the protocol.
XMPP is okay if you plan to chat with a few people individually that are willing to spend time choising the right client with the right plugins and if you don't care about modern features but anything beyond than that and it becomes a huge headache.
You're right that Matrix focuses on a distributed design where no single server is responsible for a room. XMPP doesn't focus on this (though there are XEPs for it, I don't know of any use of them outside of military deployments).
The "everything everywhere" eventual consistency approach Matrix takes means it is resilient for sure, but it's not always a desirable feature. The IETF recently trialled Matrix and were caught out by this behaviour: https://mailarchive.ietf.org/arch/msg/tools-discuss/bdGVrXm7...
It can raise questions about data ownership and retention.
I am happy both protocols exist, and bridges between them exist. For my use cases I am sticking with XMPP.
- https://mailarchive.ietf.org/arch/msg/tools-discuss/G4-c-2P9...
Great kudos for the authors for writing their software this way; this is analytics done right.
Long before Prometheus was a thing I was working on a project to tunnel metrics in realtime over XMPP. I used it for some personal monitoring but never got around to polishing and publishing it.
These days it totally makes sense to bridge with Prometheus or equivalents.
What is the landscape like now? I want to be convinced to switch, what does prosody do better?
Prosody has a strong community and one of our priorities is keeping stable, lightweight, and easy to extend and experiment with.
We are aware that some useful/popular modules are still in the community repository. We polish and merge new ones with every major release. As detailed in the blog post we are adding a simple way to fetch and install community modules to a Prosody installation.
Contrary to popular belief, XMPP is always evolving and adding new features, so this is our way of ensuring you can always keep up with new stuff even if it's not in a release yet.
We have a chat, feel free to hang out and ask questions: https://prosody.im/discuss
Are all Prosody modules pure-lua, or can/do some have a C/binary component to them? I note that the API documentation describes only lua bits, at least.
If you have questions about how to do something specific we're very approachable and happy to share our knowledge :)