I like XMPP, and I also like #peerToPeer things. So why not both at once?
Yggdrasil gives you a stable IP address, and it turns out that the domain part of an XMPP address can be just a [bracketed] IPv6 address, meaning you can have a stable XMPP address, without buying DNS entries, regardless of whether or how often you change how you're connected to the internet.
As an experiment, I tried setting up #Prosody to run on such an address, on my desktop and on my phone. And it worked!
All I needed to change in the default configuration file was the VirtualHost line and the s2s_secure_auth line (setting it to false, so that they would accept each others' self-signed certificates, which is ok, because yggdrasil takes care of the end-to-end authentication and encryption). I also had to persuade each operating system that its own self-signed certificate was legit, so that #Dino on the same machine would be willing to accept it, to sign me in.
And with that, I could send myself peer-to-peer XMPP messages, and it carried on working seamlessly even when I switched my phone's WiFi off, leaving it to connect via its mobile data connection, which is a #CGNAT IPv4 address.
Having seen #libp2p try and not yet succeed in CGNAT holepunching, I'm really impressed by how easy it was to get yggdrasil to make the CGNAT barrier effectively disappear.