Building Decentralized Group Chats Without Servers in Kiyeovo
How should group chats work in decentralized systems?
I recently launched Kiyeovo, a serverless P2P messenger, and faced the hard truth that decentralized group chats require tough tradeoffs. Unlike Signal or Matrix, I rejected central servers and complex MLS protocols. Instead, I designed a system where one creator manages membership and keys rotate with every change, ensuring simple convergence and offline support without a single point of coordination.
The content is encrypted, but the coordination - who's in, what's the latest state, what came first, what you missed - is answered centrally.
- miloignis
Neat, thanks for the writeup!
I think a single creator-admin for small groups is a nice, simple, and practical design point.
I did want to point out that Matrix does do distributed eventually-consistent authorization, which is their key invention IMHO. (Rooms are distributed among the homeservers, none of which are privileged over the others. You could (and their long-term plan from back in the day) was to run a tiny little single-device homeserver on every device to achieve P2P.)
It's tricky, but a very cool algorithm! Several entities (including myself as a hobby project) are working in combining the Matrix eventually-consistent CRDT with MLS for encryption for a no-compromise distributed E2EE system. It's possible, but very hard, as you might imagine.
Edit: Here's one academic paper writing up the abstract algorithm behind Matrix https://dl.acm.org/doi/10.1145/3381991.3395399
- tpah8
One option that you sort-of mentioned but missed: go with the static groups, but don’t let the users feel that.
In other words, show the kick/invite options to users when it does happen, but destroy and create a new group behind the scenes.
- aeturnum
This is a nice little write up and I kinda feel like the author (sensibly) chose centralization just on a smaller scale. I also think that the algorithm is pretty similar to the og textsecure2[1] protocol signal used (and still uses?) in terms of key generation. It's different in that messages are in a distributed hash table instead of sent through a server and also that there's less cross-verification by chat members, but I'm not sure the author would lose any of their goals by using the signal approach (with distributed storage).
- arto
@Realman78 Have you looked into how SimpleX does it?
https://github.com/simplex-chat/simplex-chat/blob/stable/doc...
- sandeepkd
Decentralization is not really a feasible option when you have more than one actors. Either you embed the centralization from beginning with some good and verifiable contracts or a certain majority is going to hijack the platform and act as centralized controllers.