Matrix Part 2


Now that I’ve had some time to work with Matrix, I’m committed. I’ve managed to bridge it to most of the chat services/networks I use day to day. It feels like a more modern libpurple and the best part is I get messages across each of my clients.

It also makes my old bitlbee setup from years past seem like a terrible idea. Bitlbee has its place but Matrix + + bridges feels like a much more comprehensive and cohesive solution to the problem of consolidating chat networks. Especially from multiple clients with message carbons. In the past I’d try to convert users to XMPP (Jabber) but at this point I feel like Matrix has a much better long term viability than XMPP.

Below is an info dump a bit about the integrations (bridges/puppets) I’m using. I leave these notes here for the curious admin of the future. These are all pretty well documented projects and I have no trouble getting things under way (typos aside). Any useful notes are included below.


Currently I cannot find a good integration for Discord or Tox. I use both very lightly but there doesn’t seem to be a Tox bridge. The Discord options I’ve found are meant for guild admins and not generalized bridges for an individual account.

I would really appreciate a proper Discord puppet. This (link) is the best I’ve found to date but the docs aren’t 100% and given I’ve used other matrix-puppet-bridge implementations (below) it feels like the setup isn’t right. I’d love to see an adaptation that’s more straight forward but for now I wait.



I deployed the official Matrix IRC bridge (here/link) and it’s working great. I’ve got it connected to Freenode and everything seems to be running nicely. The docs are top notch and don’t require any real thought beyond configuration. They even provide great sample configs for different scenarios.

Google Hangouts

I deployed a Matrix Bridge/Puppet for Google hangouts. It’s here (link) and works well. I had no problems getting it working and I’ve been using it quite heavily with direct messages and group chats. It’s not a full implementation of the Hangouts protocol but it’s enough to prevent the need for an official client day to day for me.


I was able to get the Signal Bridge/Puppet working. It’s here (link). It was a little fiddly (see additional notes below) and you can only puppet one Signal account by the looks. The Signal client and implementation are a dirty port that abuses some of the global namespace stuff. It’s not pretty under the hood, however, it works as advertised.

Additional Setup Notes

I had trouble getting it installed 100% per the docs. I made the following changes for setup and haven’t had an issue since.

  1. npm install
  2. rm -rf node_modules/signal-desktop
  3. git clone node_modules/signal-desktop
  4. cd node_modules/signal-desktop
  5. git checkout v0.39.1
  6. git submodule init
  7. git submodule update
  8. npm install
  9. cd ../../
  10. continue w/ docs


Ah, the lovely Telegram. There is a Signal Bridge/Puppet here (link) that does a pretty good job overall. I prefer the puppet approach to bridging and this does what I expected. There are limitations and the docs are good at calling them out. Great for not having to dip into the Telegram client for 99% of what I’m currently doing on the network.


My favorite protocol. There is a great Signal Bridge/Puppet here (link). This was my first major win with bridges and puppeting an account. Very reliable and easy to setup.

SMS (Android Only)

While poking around for other bridges/puppets I discovered a recent project that will puppet an Android phone for SMS. The project is here (link). It’s clearly an early-on project but I’ve had good success with the SMS send/receive functionality thus far. I haven’t run it enough to know how it impacts battery but it’s definitely a neat concept and handy. I can leave my phone away from my desk and still interact with basic SMS from my desktop computer.

I’m not sure if this is something I’ll use long-term but it’s nifty and shiny for now.


There is one Gitter room that I wanted to idle in and ended up using this (link) for the bridging. It’s a many to many bridge which I don’t like much (I prefer puppets) but it does work. I cleared running the bridge against the channel with the channel admin prior to setup. It does what it says on the tin and wasn’t too hard to setup.

If I was using gitter more, I’d probably take a slightly different approach or work on a dedicated puppet. For now I’m leaving this as-is.

matrix  chat  it 

(function(f, a, t, h, o, m){ a[h]=a[h]||function(){ (a[h].q=a[h].q||[]).push(arguments) }; o=f.createElement('script'), m=f.getElementsByTagName('script')[0]; o.async=1; o.src=t;'fathom-script'; m.parentNode.insertBefore(o,m) })(document, window, '//', 'fathom'); fathom('set', 'siteId', 'PUEYX'); fathom('trackPageview');