We host a small Matrix-server. The server is for 4 people but barely uses the 2 cores 4GB RAM.
Storage is mostly media, but stayed under 100GB in about 3 years.
We also host a web frontend and use Schildichat as app, but Element X could be better nowadays. Both also have a desktop client.
A big plus are all the bridges.
My girlfriend uses WhatsApp, no problemo, there is a bridge for that. That one club only has a signal group? Use the bridge.
One of us uses Fb-Messenger via a bridge. Telegram also works and there are lots more.
The server is also low maintenance. It’s an ansible playbook, that I irregularly run.
It takes around an hour twice a year due to changes in the playbook.
Also matrix is feature rich beyond your requests. I don’t know much about the others, but matrix had emoji-reactions before WhatsApp and has threads inside of chatrooms and spaces which are collections of chats for common topics.
Also polls, sharing current/live location (not bridged to WA), voice messages and stickers.
But wait!
This keyboard has 45 keys and not 100 like most normal keyboards, so they cut 55%!