Matterbridge setup guide: one binary, sixteen protocols
Updated July 26, 2026
A single Go binary that relays messages between IRC and most other chat platforms, configured with one TOML file. It is the standard way an open source project keeps an IRC channel without losing everyone who only uses Discord.
Get the community fork, not the original
Upstream 42wim/matterbridge has not tagged a release since v1.26.0 in January
2023 and last saw a commit in August 2024. The community fork picked it up,
merged the backlog of unmerged fixes, dropped protocols nobody maintained, and is
still shipping dependency updates this month.
Download: matterbridge-org/matterbridge — build from source with Go 1.26 or later, or use the provided Dockerfiles.
The fork has no tagged binary releases of its own yet, which is its one real rough edge. If you need a prebuilt binary today, distribution packages and the old upstream releases still work for basic IRC-to-Discord relaying; you just miss the fixes.
The config has three kinds of block
Every configuration is the same shape, whatever the platforms:
- An account block per platform —
[irc.libera],[discord.myproject]. The part after the dot is a label you choose. - A gateway block —
[[gateway]]with a name, one per set of channels that should share messages. - Channel blocks inside it —
[[gateway.inout]]for two-way, or[[gateway.in]]/[[gateway.out]]for one-way relaying.
[irc.libera]
Server="irc.libera.chat:6697"
UseTLS=true
Nick="myprojectbridge"
UseSASL=true
NickServNick="myprojectbridge" # with SASL, this is the account name
NickServPassword="…"
RemoteNickFormat="<{NICK}> "
[telegram.mygroup]
Token="…" # from BotFather
[[gateway]]
name="general"
enable=true
[[gateway.inout]]
account="irc.libera"
channel="#myproject"
[[gateway.inout]]
account="telegram.mygroup"
channel="-100123456789"
RemoteNickFormat is worth setting deliberately on the IRC side — it is what
decides whether the channel reads <dave> hello or
[telegram] <dave> hello on every line.
Channel identifiers per platform
The most common cause of a bridge that starts cleanly and relays nothing is a channel named the wrong way:
| Platform | Channel format |
|---|---|
| IRC | #channel, lowercase, keep the # |
| Discord | general — the name without #, or ID:123456789 |
| Matrix | #room:server.org |
| Telegram | the numeric chat ID |
| Slack | #channel |
| Mumble | the numeric channel id from its Edit window |
| XMPP | the room name, with the MUC host set in the account block |
Notable platforms
Discord
Needs a bot token, the Manage Webhooks permission, and two privileged intents switched on or it silently relays nothing. That trap and a complete config are in bridging IRC and Discord.
Slack
Slack shut down its own IRC and XMPP gateways on 15 May 2018, and Matrix retired its hosted Slack bridge in November 2025. Matterbridge with a Slack bot token is what remains, and it works — with the usual one-relay-nick compromise. If you are weighing the platforms rather than joining them, that is IRC vs Slack.
Telegram
Straightforward: a bot token from BotFather and the group's numeric chat ID. The dedicated teleirc exists for Telegram specifically and still gets commits, but has not tagged a release since v2.3.0 in October 2022 — reach for it only if Telegram is the only thing you need.
Pairs by QR code and rides an unofficial client library, which makes it the most fragile connector in the set. Expect to re-pair it.
The rest
Mumble, Zulip, Mastodon, Rocket.Chat, Microsoft Teams, Nextcloud Talk, VK and ssh-chat all work through the same three-block config. Several are marked "no active maintainer" in the fork's own docs — Mattermost, Microsoft Teams, Nextcloud Talk, Rocket.Chat and Slack among them — so treat those as working until proven otherwise rather than actively developed.
Keybase, Gitter and Steam support have been dropped entirely, because the services either died or moved.
Files need a media server
Matterbridge cannot put a file on IRC, because IRC has nowhere to put it.
Configure MediaDownloadPath — a directory your web server serves — together
with MediaServerDownload, the public URL it maps to, and IRC gets a link
instead. Without them, shared files produce
Could not share file (no mediaserver configured) and nothing crosses.
Attachments from platforms that already give a public URL are unaffected.
Where to go next
- The Discord specifics, including the intents trap — bridging IRC and Discord
- Matrix, which has better options than Matterbridge — bridging IRC and Matrix
- Everything else, including what needs no bridge — bridging IRC to other platforms