The key to getting a Messaging protocol "right" is to have the simplest possible post of a message to a server, and the simplest possible read of messages from a server down to like 20 lines of code, which Nostr did get right.
Nostr is great because it doesn't tie your user name to some domain name that you don't own (like ActivityPub/Fediverse does). If a domain name is part of a user name, that ultimate gives "control" over your identity to someone else...(unless you're hosting your own domain, of course)
I think XMPP is probably the superior protocol (better than both Fediverse, and Nostr, and I've written implementations in both), for some technical reasons, but as far as I know it takes way more than 20 lines of code to implement a read/write operation, so imo it's too complicated.
Even ActivityPub looks simple at a first pass, but if you try to write your own server (like I did) you realize the protocol is a complete mess and compatibility issues are rampant across different sever implementations as a result.