Having to run a command for each "client" is a bit limiting; another approach is the one done by jj (https://23.fi/jj/) which opens a fake filesystem where you can directly read from and write to files. You can have a process tail a room, another one writing notifications to another room, etc... Having filesystems like that also means you can mount them from another machine if that's your desire, or use standard file moving tools.
Thanks, I didn't know about jj and I like that approach too. If jj is inspired by ii, than txmppc is maybe more like sic from design. (But sic is really more minimalistic)
Meant to reply with this here and not on the child comment, but either way here is something truly bad you can start with that may meet some of your needs: https://github.com/gatlin/valet
Yes, I would like too... and I see that OMEMO seems to be the current and best protocol for xmpp. But I found only one library and the implementation in profanity. I'm not a crypto guy and I don't understand it, so if there is a simple way to add it (as optional) compile dependency, I will do. But messing up with crypto doesn't sound like a good way to go.
In mcabber is the option to send commands with a fifo, so it would be possible to send (GPG and OTR) encrypted messages. With profanity, it might be possible by writing a plugin.
I just realized, depending on the project, if both sides use that txmppc, any encryption (age, gpg) would work (not with other xmpp client compatible):
sender: echo "m CRYPT:encrypted_message" | txmppc
receiver: txmppc | while read line; do crypt = "${line#*CRYPT:}"; if [ "$line" != "$crypt" ]; then echo "$crypt" | decrypt; else echo "$line"; fi; done