So because I have gone temporarily off my rocker, I'm working on an #xmpp client using #dotnet 10 and WPF, with artalk-xmpp for XMPP, libsignal for #OMEMO, and prism for screen reader output where needed. I'm only an evening into it, and I can already tell that OMEMO is going to be the source of complicated, inexplicable, and unreproducible bug reports for decades to come. It's still not as overcomplicated as #matrix, though.
@plzupgrademe Personally, I'm using Snikket for end to end testing. If the Snikket server doesn't support it, or the Snikket client (just rebranded Monal) can't deal with it, it's not high on my list of priorities. Yes, I know that's a terrible way to implement an open standard. But Snikket is the server I use, and Monal is the client I and everyone I know uses on IOS. So a desktop app needs to work with them to be useful to me. And features they don't support are features I'll never be able to use.
@fastfinge I took a similar approach of validation by interoperability testing. I used conversations/cheogram on android and Gajim on macos/linux for testing.
The XEP specs are also helpful, especially for reference for MAM and Carbons.
XMPP itself I guess is not so complicated, but OMEMO really adds complexity.