This came up on the forum and someone raised a good point - would direct connections require the sender and receiver to be online at the same time? I feel like the architecture has to be more clever than just a WebRTC connection between clients.
> would direct connections require the sender and receiver to be online at the same time?
Could always use 'indirect' connections to store-and-forward, and only relying on the central server when absolutely necessary.
You do risk some lost messages when you underestimate failures, but the same thing applies to any central store-and-forward facility.
Early Kazaa depended on some nodes becoming supernodes. Supposedly initial Skype was decentralized like this (particular to get around NATs), until it became exclusively client-server.
The Signal protocol can deal with offline messaging, but it requires a server to do it. That is because of how the forward secrecy works. Presumably the amount of traffic would be fairly negligible for what would just be keying information.