Matrix for Instant Messaging
The Matrix protocol is full of concepts sometimes hard to grasp. In this post I’m going to try to cover how it’s used in the context of messaging, how close to e-mail it can feel, and how decentralisation is achieved in the open safely. For the sake of simplicity and ease of understanding I might lie to you sometimes: this post is aimed at non-experts. Instant messaging Matrix is a protocol to describe interactions between several entities.

(Post found on a Mastodon toot)

I’ve been running a small Synapse instance (for me and one other person) for about 4 years now. I initially set it up just to play with Matrix, but it’s become the main way the two of us communicate via our phones.

I was amazed at how simple it was to setup and how stable it’s been! The only times it has gone down (only two or three times if I remember) was when Postgres updated, so I had to manually migrate the database. I’m running it all with docker now so I don’t anticipate any more of those issues. I do only have two users on it so I don’t have to worry about tuning like a larger instance, but I’ve still been impressed!

Nice! I’ve been only running an instance for about a year now on a Linode instance. I did set it up to be federated since I use it for various Matrix channels I am interested in. Also some IRC channels thanks to the bridging functionality on Freenode (and now of course). I’d say there was a bit of a learning curve, but it’s been rock solid.

Fairly recently, I got my family on Matrix as well. They’ve been trying to get me on Whatsapp for a while but that does not exactly excite me. I don’t have smartphones running Android or iOS anyway. I did manage to set up a Whatsapp bridge and an Android VM with a throwaway VOIP number. However, that lasted about a week until I was banned by Facebook. Great! I used that to convince my family to just install Element on their phone and connect to my server.

That’s been working really well ever since! They can send pictures, videos and chat messages really easily now.

Fantastic! It’s great to hear you were able to get your family using it too. Did they have any challenges getting set up or was it pretty smooth?

I’m also curious about your experience federating. What sort of load is that placing on your server?

For family, the only issue was confusion in Element for the Sign In vs Sign Up button. I had given them credentials myself to make it easier, but one of them tried using “Sign Up” with those credentials, which of course led to “username is taken” so they signed up with a different username.

I had started 1-on-1 conversations with all of the other family members, but since this one created a new account, they started a group conversation with me. So, they are listed under group conversations for me now, but meh, that works too.

I have a 1 GB node on Linode which is just a bit too little it seems, especially when joining the larger rooms on federated servers. However, I managed to make synapse work with systemd so now it just autorestarts if it ever crashes. I don’t even notice anything anymore. Getting synapse to play nice with SELinux and systemd was by far the biggest challenge, but that’s unrelated to federating.

Currently synapse is idling at 20% mem usage and barely any CPU usage.

Another non-federation-related issue is that I also had a minor issue where Nginx limited uploads to 10 MB which is a bit harsh for uploading videos. Took me a bit to figure that one out, but in the end it was just adding one line to /etc/nginx/conf.d/matrix.conf in the server sections, i.e.:

client_max_body_size 250M;

Setting up the rest was pretty straightforward. I even got a TURN server running as well even though I don’t really use the video calling part yet.

Nice! Good to hear it’s working well!

2 urte

deleted by creator
52 urte

What hardware do you run it on? And you federate with other, larger instances like I wanna host myself, but I have no clue what to expect 😆

I have a small droplet on Digital Ocean that acts as a reverse proxy to another larger machine. I’m using Wireguard between the two machines to create an encrypted channel and so I don’t have to mess with the network firewall. It also gives me a separate network interface that I can control with a firewall on the machine itself.

The host was an i3-4160 with 8GB of ram running Arch. It was hosting Synapse, among other things. I’ve recently upgraded to an i5-11400, but the i3 was working perfectly for Synapse.

I tried federating it a couple years ago, but I stopped since I wasn’t sure at the time if I wanted to keep that particular domain. And since I was only using it for the two of us, I didn’t bother setting up federation again. I imagine that it would put a larger load on the system depending on what rooms you join.

I’m not familiar with Ansible, so I didn’t go with their recommendation to use that. Instead, I used the docker-compose.yml from their repository and modified it for my needs:

Give it a shot though! Some people have said they’ve had trouble setting it up, but it’s been flawless for me.

2 urte

deleted by creator

Create a post

All about open source! Feel free to ask questions, and share news, and interesting stuff!

Useful Links


  • Posts must be relevant to the open source ideology
  • No NSFW content
  • No hate speech, bigotry, etc

Related Communities

Community icon from, but we are not affiliated with them.

  • 0 users online
  • 21 users / day
  • 301 users / week
  • 346 users / month
  • 478 users / 6 months
  • 18 subscribers
  • 1.69K Posts
  • Modlog