I would love a tiny server I can run on my home server (for my tiny message volume), but Mastodon and Synapse are optimized for large servers.
Hmm, is it really? My server has a SSD so I don't care about writes, I just want it to be low on CPU and memory requirements.
chat for a group of about twenty people runs fine on a VM with 512MB of RAM. After boot about 300MB of the system RAM is occupied by the base minimal debian OS and other daemons (snmpd, etc), leaving plenty for python3.
this same machine also has a minimal nginx setup as the standard reverse proxy configuration for TLS1.2/TLS1.3 in front of the synapse daemon, which isn't set up for any crypto and only listens on localhost.
The reason Synapse has a reputation for being resource hungry is on publicly federated servers: if one of the users starts going and joining a bunch of large busy public rooms from their new server, then those rooms get dutifully replicated onto the server, which inevitably consumes resources.
The more users and the more servers in the room, the more changes of gnarly forks and merge resolution problems, and the more the risk of CPU spikes. We're constantly working on the memory footprint and state resolution algorithm (e.g. https://github.com/matrix-org/synapse/blob/develop/docs/auth... landed a few days ago), so the situation is improving, but this is the root cause.
Then you are essentially self-hosting on your phone/laptop when you run the client.
for example on two of north america's largest DOCSIS3/DOCSIS3.1 based cable modem operators, you can get 200-600 Mbps downstream speeds, but uploads may max out at 16-18 Mbps. Depending on your exact location. This is because of how RF channels are bonded together by the CMTS operator.
lots of other access technologies will face significant challenges and capacity constraints if a sizeable percentage of residential broadband end users start trying to actually use their upstream bandwidth at a greater rate than they do now, when averaged over the traffic for hundreds or thousands of individual end point users.