Say My Name: Heisenbridge, IRC and Breaking Free from Discord
October 14, 2025 · 6 min read · Nick Schmidt (oneguynick)
Table of contents
- Why I left Discord
- A quick tour of Heisenbridge
- The commands I ran
- Startup and maintenance
- Final thoughts
I love tools. I also hate lock-in. When I am debugging a project and discover the community talks behind the walls of a closed source app, I want to scream. Discord is convenient, sure, but it is not where open source projects should live. It fragments conversation and hands control to a single vendor.
I have been moving my comms to Matrix for a while, and one of the last pieces I wanted to stitch into the new setup was IRC. IRC is where a lot of communities still live. It is simple, battle tested, and honest. Heisenbridge is a tiny Python bridge that makes Matrix sit at the IRC table without pretending to be something it is not.
Below is how I set it up on OpenBSD. This is what I actually ran on my machine. It is not a fancy installer script, it is a recipe. If you want to follow along, make a cup of tea and let us proceed.
Why I left Discord
- Proprietary client, proprietary ecosystem, and the community behind it is fenced off.
- It forces newcomers into a specific UI and tracking model.
- When things go wrong you cannot inspect the plumbing, because the plumbing is hidden.
- Federation and open protocols give you freedom - losing that feels like trading flexibility for laziness.
A quick tour of Heisenbridge
Heisenbridge gives Matrix a way to connect to IRC networks like LiberaChat. It creates a Matrix application service user and acts like an IRC client for those channels. Your Matrix rooms end up bridged to IRC channels, and you keep your client, your logs and your sanity.
The heisenbridge project is here: https://github.com/hifi/heisenbridge
The commands I ran - exact and unglossed
- Create a dedicated system user for the bridge
| |
- Install the virtualenv helper
| |
- Become the heisenbridge user and create a Python virtualenv
| |
- Generate the registration file for Synapse
| |
Add the file path to app_service_config_files in your Synapse config then restart Synapse to load it.
- Start heisenbridge manually to sanity check it
| |
Open a chat to the bot account that was created. It will look like:
| |
- In the Matrix chat, create a network and server for LiberaChat
| |
You should get feedback from LiberaChat. Then run
| |
If you see the welcome message you are in business. Your Matrix client is now part of the IRC channel. Keep calm and answer questions about OpenBSD.
Make it persistent - OpenBSD style
I made a simple rc.d script at /etc/rc.d/matrix_heisenbridge so the bridge starts on boot. The file looks like this:
| |
Make it executable and test it
| |
If rcctl shows errors check the log at /var/log/matrix-heisenbridge and the usual syslog files. In my run I had a small permission issue on the registration file. Fix that with chmod or chown as appropriate.
Maintenance - updates that do not suck
I keep heisenbridge in a virtualenv so updating is trivial. I use a tiny update script in the heisenbridge home directory.
Create ~/update as the heisenbridge user with these contents
| |
Make it executable
| |
I add the update call to /etc/weekly.local so it runs when I do system maintenance
| |
Tune the cadence to your patching policy. Monthly is fine if you prefer fewer updates.
Caveats and troubleshooting notes
- Make sure Synapse has the registration file path and that the YAML is valid.
- If you run into strange permission errors, check the user that the bridge runs under and the registration file ownership.
- TLS to IRC is flaky on occasion. If you cannot connect try an alternate server or double check your firewall.
- Heisenbridge logs to stdout by default. Redirect or wrap it if you want to keep clean logs.
Final thoughts
I like having a stack I control. I like waking up and knowing my chat rooms are not locked behind a corporate UI. Heisenbridge is small, sensible and gets the job done. You keep Matrix as the place you live and IRC as the place you visit.
From field to cloud, own your comms and keep them open.