42wim/matterbridge

bridge between mattermost, IRC, gitter, xmpp, slack, discord, telegram, rocketchat, twitch, ssh-chat, zulip, whatsapp, keybase, matrix, microsoft teams, nextcloud, mumble, vk and more with REST API (mattermost not required!)

12
Hotness score
16
Reliability score
7,530
Stars
over 10 years
Age
0
Published reviews
0
Questions

Scores

Hotness and reliability

The two headline scores, measured daily, with 30, 90, and 180 day views.

Hotness score

Jul 19, 2026

Current12

Previous11

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Hotness formula

40% Hot today + 40% Hot this week + 20% Breakout.

  • 40% Hot today: 25
  • 40% Hot this week: 28
  • 20% Breakout: 26
  • Stars gained: 1d: 3
  • Stars gained: 7d: 10
  • Stars gained: 14d: 13
  • Stars gained: 30d: 27
  • Stars gained: 90d: 75

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Jul 19, 2026

Current16

Previous16

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Reliability formula

30% Continuity + 30% Closure + 20% Shipping + 10% Liveness + 10% Support burden.

  • 30% Continuity: 6
  • 30% Closure: 45
  • 20% Shipping: 0
  • 10% Liveness: 1
  • 10% Support burden: 10

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

Reliability breakdown

What drives the reliability score

Component scores measured daily from GitHub activity (2026-07-17).

Continuity30% of headline6

Activity on 3 of 90 tracked days in the last 90 and 0 of 30 in the last 30.

Closure30% of headline45

Merged 0 of 3 PRs opened and closed 1 of 0 issues opened over the last 90 tracked days — PR flow carries 55% of this component, issue flow 45%.

Shipping20% of headline0

0 releases in the last 180 days, 0 in the last 90 and 0 in the last 30 — a steady cadence scores highest.

Liveness10% of headline1

Last push 585 days ago — freshness decays as pushes age (roughly halves every 83 days without a push).

Support burden10% of headline10

Open-issue load isn't tracked for this repo yet.

Adoption confidence4

Modeled — how confidently teams are adopting this repo. Stargazers

Maintenance quality19

Modeled from PR/issue responsiveness and upkeep signals. Activity pulse

Risk score78

Modeled — lower is better; adoption and continuity risk. Repository

Stays active (30d)0%

Modeled chance the repo stays active over 30 days. Activity pulse

Stays active (90d)12%

Modeled chance the repo stays active over 90 days. Activity pulse

Release rhythm (180d)0

Regularity of releases over the last 180 days. Releases

Maintainer bus risk (90d)89%

Modeled — lower is better; concentration of commits in few maintainers. Contributors graph

Topics

Explore related topics

Jump into the topic listings this repository belongs to.

Measured history

Project metrics

Weekly GitHub totals with 30, 90, and 180 day views.

Weekly star gains

Jul 19, 2026

Current8

Previous2

Weekly star gains

23-26-76
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Cumulative stars

Jul 19, 2026

Current7,527

Previous7,519

Cumulative total

7,5273,7640
Full metrics details

Running total of the GitHub GraphQL stargazer count over time (not weekly deltas), reconstructed from starredAt events and totalCount in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Jul 12, 2026

Current0

Previous0

Weekly total

110
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Jul 12, 2026

Current0

Previous0

Weekly total

110
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

177 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Jul 12, 2026

Current0

Previous0

Weekly total

210
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Jul 12, 2026

Current0

Previous1

Weekly total

110
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

177 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Jul 12, 2026

Current0

Previous0

Weekly total

110
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue

Pull request close ratio (daily)

Jun 9, 2026

Current0.00

Previous0.50

Daily ratio — a gap means nothing was opened that day

How this works: each day's value is pull requests closed that day ÷ pull requests opened that day. Days when nothing was opened render as gaps — never a rolling average or a made-up zero. Values above 1 mean the project closed more pull requests than arrived that day.

0.500.250.00
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

5 observed daily rows. Missing days are not fabricated.

Per-day formula: pull requests closed that day ÷ pull requests opened that day; blank when nothing was opened (a gap, not a zero).

DatePRs openedPRs closedStored score

Project Overview

Matterbridge connects over 20 chat platforms through a single running process. You configure it via a TOML file, start the binary, and messages flow between platforms in real time. Supported networks include Slack, Discord, Telegram, IRC, Mattermost, Matrix, Rocket.Chat, Microsoft Teams, XMPP, Zulip, WhatsApp, Mumble, Twitch, Keybase, VK, Nextcloud Talk, Gitter, and ssh-chat — with a REST API for custom integrations.

The name trips people up. Despite "Matterbridge," you do not need Mattermost at all. The project started as a Mattermost-to-IRC relay and grew from there. Today Mattermost is just one backend among many.

The project ships as a single self-contained Go binary with no runtime dependencies. If your organization runs both a Slack workspace and a Discord server and needs messages to flow between them, Matterbridge is one of the quickest paths to that outcome.

With roughly 7,500 GitHub stars and 6.6% star growth over the last ~6 months as of 2026-06-13, it has a stable user base. Adoption over the last ~6 months is significantly down, which likely reflects a maturing, stable user base rather than project decline — but evaluate whether active new-protocol development aligns with your specific needs before committing.

Key Challenges Addressed

Multi-platform fragmentation. Teams split across Slack, Discord, and IRC have no native way to see each other's messages. Matterbridge acts as a relay daemon — each platform sees its own bridge bot posting messages from the others.

Identity mapping. When a Telegram user writes a message, the Discord side needs a readable attribution. Matterbridge formats this consistently using configurable RemoteNickFormat templates, so you can display something like [Telegram] alice: hello in the bridged channel.

Single-instance management. Running five separate point-to-point bridge bots means five codebases to maintain. Matterbridge consolidates them into one config file and one process, simplifying deployment and monitoring.

No vendor lock-in. Because it sits as a relay layer outside all platforms, migrating your team from Slack to Matrix doesn't require rebuilding your bridge infrastructure — just update the TOML config.

Getting Started

Install with Go 1.21+:

go install github.com/42wim/matterbridge@latest

Or download a prebuilt binary from the releases page.

A minimal two-platform bridge config in matterbridge.toml:

[irc]
[irc.libera]
Server="irc.libera.chat:6667"
Nick="matterbridge"

[discord]
[discord.myserver]
Token="YOUR_DISCORD_BOT_TOKEN"

[[gateway]]
name="bridge1"
enable=true

[[gateway.inout]]
account="irc.libera"
channel="#yourchannel"

[[gateway.inout]]
account="discord.myserver"
channel="general"

Start it:

matterbridge -conf matterbridge.toml

Sharp edges to catch before you go further:

  • Discord bots require Message Content Intent enabled in the Discord Developer Portal. Without it, the bot receives empty message bodies and silently drops all bridged content — enable it under Bot → Privileged Gateway Intents before generating your token.
  • WhatsApp bridging uses the WhatsApp Web multi-device API. WhatsApp's terms of service technically prohibit automated clients; if your session gets flagged, WhatsApp logs it out and the bridge goes silent with nothing in the logs beyond a generic disconnection notice.
  • Matrix bridging requires an existing Matrix homeserver with a pre-registered application service. A bot token alone is not enough — read the Matrix application service documentation before attempting this backend.
  • A duplicate account name or invalid TOML section causes a startup panic with a minimal error message. Validate your config with a TOML linter before running.

Features and Use Cases

Multi-gateway routing. A single config file can run multiple independent gateways. Gateway A bridges Slack ↔ Discord, Gateway B bridges Telegram ↔ IRC, and neither bleeds into the other. This lets different teams use their preferred platforms while still sharing cross-team channels.

Samechannel bridging. The SameChannelGateway shorthand bridges identically named channels across multiple instances of the same platform — useful for connecting two Mattermost instances or multiple IRC networks without writing out every [[gateway.inout]] block.

Media relay. Images, files, and voice messages cross platform boundaries where the API supports it. The bridge uploads the file to the destination platform and posts the URL or attachment inline.

REST API. Matterbridge exposes a simple HTTP REST API at a configurable port. You can POST messages into a gateway from any HTTP client, letting external scripts or CI/CD pipelines inject notifications without needing a native platform bot integration.

Message filtering. Per-gateway IgnoreNicks, IgnoreMessages, and message transformation options let you suppress relay bots, trim noise, or reformat message text before it crosses to the other side.

Ecosystem and Dependencies

Matterbridge imports a platform-specific client library for each supported protocol. Key dependencies include bwmarrin/discordgo for Discord API access, the nlopes/slack client for Slack RTM, and matrix-org/gomatrix for Matrix homeserver communication.

Each platform library tracks its upstream API independently. When Discord or Slack ships a breaking API change, the upstream library needs to update before Matterbridge catches up. In practice this lag has occasionally left users on older Matterbridge versions when a platform updates its bot API — check the Matterbridge release notes when a platform backend starts misbehaving before debugging your own config.

For teams running a Matrix homeserver, Matterbridge's Matrix support integrates with any homeserver that implements the application service spec. For heavier Matrix use cases, the dedicated Matrix bridge ecosystem (see Comparison section) offers deeper feature parity at the cost of narrower platform support.

Architectural Overview

Matterbridge is structured around a central router that passes messages between bridges. Each bridge is a platform-specific implementation of the Bridger interface:

Platform API ↔ Bridge adapter ↔ Router ↔ Bridge adapter ↔ Platform API

The router reads gateway config to determine which accounts route to which channels, then forwards incoming config.Message structs from the source bridge to all configured destination bridges. Each bridge serializes those structs back into platform-native API calls.

Each bridge runs in goroutines — one reading from the remote platform, one writing. The router uses Go channels for dispatch, so a slow or disconnected destination does not block message delivery to healthy ones.

The config model is declarative: gateways define the routing topology, and the bridges handle platform-specific details. Adding a new platform means implementing the Bridger interface — the router stays unchanged. This clean separation is why Matterbridge can support 20+ platforms without the codebase becoming unmanageable.

Pros and Cons

Single binary with no external runtime dependencies — deploys on any Linux, macOS, or Windows host without a container or language runtime.

Supports more protocols than any other general-purpose bridge tool. If you need to connect niche platforms like ssh-chat, Mumble, or VK alongside mainstream ones, Matterbridge is the only option.

Config-driven routing makes topology changes a file edit plus a process restart. No database migrations, no web admin panel required.

The REST API is underutilized but genuinely useful — it lets monitoring systems, bots, and CI pipelines post to chat without platform-specific integrations.

On the downside: there is no persistence layer. If the process crashes, messages sent during downtime are lost with no replay mechanism.

WhatsApp, Keybase, and some other backends rely on unofficial or terms-of-service-gray-area client libraries. These can break without warning when the platform pushes an update, and recovery depends on upstream library maintainers.

All bridged messages post under the bot account. Destination platforms see one account posting everything, which can confuse moderation tools and per-user rate limits on high-traffic channels.

The adoption trend over the last ~6 months is significantly negative. New protocol support and bug fixes continue, but the pace of major feature development has slowed. Budget time for occasional maintenance when platform APIs change.

Comparison and Alternatives

Measured 90-day trends for this project and its alternatives.

GitHub stars

Weekly star gains

110-12
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

Matterbridge

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Weekly total

110
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Matterbridge

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Weekly total

110
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Matterbridge

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

177 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Weekly total

210
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Matterbridge

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Weekly total

110
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Matterbridge

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

177 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Weekly total

110
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Matterbridge

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed pull request ratio

Weekly average

100500
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Matterbridge

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed issues ratio

Weekly average

100500
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Matterbridge

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Releases

Weekly total

110
Full metrics details

GitHub release published_at events bucketed by UTC day; drafts are excluded.

Matterbridge

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue

Hotness score

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

Matterbridge

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

Matterbridge

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

For teams building on Matrix as a backbone, matrix-org/matrix-appservice-irc is the production-hardened IRC bridge maintained by the Matrix core team. It goes deep on Matrix-side features — room state sync, IRC channel membership mirroring — but bridges exactly one protocol pair.

tulir/mautrix-telegram takes the same single-protocol approach for Telegram, with double-puppeting and full message history sync. If your use case is specifically Telegram ↔ Matrix with high fidelity, mautrix-telegram delivers a substantially better user experience than Matterbridge's relay model.

For Discord-to-IRC specifically, reactiflux/discord-irc is the oldest point solution with a proven track record. It handles exactly two protocols and requires Node.js, but if Discord ↔ IRC is your only bridge requirement, it is simpler to configure and debug than Matterbridge.

bitlbee/bitlbee takes a fundamentally different approach: it exposes all IM networks as an IRC server. Your existing IRC client connects to BitlBee and sees Telegram or XMPP contacts as IRC channels. If your team is IRC-native and wants to consume other networks through an IRC interface rather than relay between platforms, BitlBee fits better.

Project Repo Hotness (~6mo) PRs merged (~6mo) Star growth (~6mo)
Matterbridge https://github.com/42wim/matterbridge 3.96 0 459
mautrix-telegram https://github.com/tulir/mautrix-telegram metrics pending 0 metrics pending
matrix-appservice-irc https://github.com/matrix-org/matrix-appservice-irc metrics pending 0 metrics pending
discord-irc https://github.com/reactiflux/discord-irc metrics pending 0 metrics pending
BitlBee https://github.com/bitlbee/bitlbee metrics pending 0 metrics pending

The best overall alternative is tulir/mautrix-telegram. Its double-puppeting support, active maintenance by a core Matrix ecosystem contributor, and full message history sync make it the most mature single-protocol bridge available — and if Telegram is your primary bridging target, it outperforms Matterbridge's relay approach on every user-visible dimension.

Conclusion

If you need to bridge three or more chat platforms without committing to a full Matrix homeserver deployment, Matterbridge is the right tool — deploy the single Go binary, write a TOML config, and messages flow between Slack, Discord, Telegram, IRC, and more in an afternoon. The official documentation and config examples cover every supported platform with working minimal configs.

Do not use Matterbridge's WhatsApp backend in production without reading WhatsApp's Terms of Service first — automated clients can have their sessions silently revoked, leaving the bridge disconnected with no log-level error to alert you. Before backgrounding any Matterbridge instance, run matterbridge -conf matterbridge.toml in an interactive terminal and verify every account handshake logs a successful connection before you hand it off to a process manager.

Join the conversation

Reviews · Questions · Posts

Share what you know about matterbridge — write a review from your real experience, ask an implementation question, or publish a post about how you use it.

Share your experience

Write or update your review

Explain what worked, what broke down, and what another team should know before adopting matterbridge.

Write your review now — it saves locally and publishes automatically after you sign in.

Rating
Positive attributes
Negative attributes

Project Q&A

Questions and answers

Browse implementation threads tied directly to 42wim/matterbridge. Each question links through to the full answer page.

Q&A No threads yet

Be the first to ask how teams run matterbridge in production. Every question you post becomes a durable, searchable answer page other developers can find.

Ask the first question

Related posts

Posts tagged with the same topics

These posts come from the same topic surface as this repo, so readers can move from project evaluation into practical writeups and migration notes without leaving context.

Posts No topic-linked posts yet

Share how your team uses matterbridge — a migration note, an architecture writeup, or a comparison. Your post reaches everyone browsing these same topics.

Write the first post
Get a weekly email with the hottest new projects in the Federation & Bridges and Bridge world.
No Spam. Unsubscribe easily at any time.

Copyright 2018-2026 Awesome Open Source.  All rights reserved.