Its best to use a protocol that doesn’t allow unencrypted messages
This is an implementation thing and not a protocol thing. What protocol doesn’t allow unencrypted messages? I am sure signal’s protocol would still allow it, it’s just that the implementation doesn’t.
And same for XMPP. Just go with the implementation that doesn’t.
Contribute code on github!