Voice bridge: Discord ↔︎ Matrix

Nether runs a hosted instance of nether-voicebridge — a bidirectional voice bridge between Matrix/Element Call and Discord voice channels. Talk in the Discord channel and be heard in the Matrix call, and vice versa, with every speaker showing up as their own named participant on the far side. As far as we know it’s the only voice bridge anyone offers.

It’s free, it never records anything (live relay only — see the privacy policy), and you can set up a bridge for your own room yourself, over DM. Here’s how.

We’re in open beta. The bridge works in daily use, but it’s young and under heavy development — expect the occasional rough edge rather than perfection. Everyone using it right now is helping us test it, and we’re genuinely grateful. If something breaks, glitches, or just confuses you, tell us in #nether-voicebridge-help:nether.im — that’s exactly the feedback a beta is for.

What you need

Setting it up

  1. Prepare the Matrix room. It must allow power level 0 for the org.matrix.msc3401.call.member state event — the standard Element Call setup. Easiest way: start an Element Call in the room once (the call button in Element) — that configures it automatically. If the room is invite-only, also invite the bridge bot (@voicebridge_as:nether.im) to it.

    This one setting is the single most common thing that breaks a bridge — even we trip over it. What it looks like when it’s wrong: the bridge links fine and Matrix→Discord works, but nobody from Discord ever appears in your Matrix call. Two traps to know:

    • Element’s Settings → Roles & Permissions → “Join Element calls” dropdown is unreliable here: it shows “Default” both when the room is correctly configured and when it isn’t. Don’t trust it in either direction.
    • To check (or fix) for real: type /devtools in the room → Explore room statem.room.power_levels, and look for "org.matrix.msc3401.call.member": 0 inside "events". If it’s missing, Edit and add it.
  2. DM the bot. Open a direct message with @voicebridge_as:nether.im and send it the message help — it will tell you everything it can do. Everything from here on is just chat messages you send the bot in that DM.

  3. Send the bot a link message describing what to connect:

    link "Game Night" !yourroom:example.org <discord-server-id> <voice-channel-id>

    (Right-click the server and channel in Discord → “Copy Server ID” / “Copy Channel ID”; enable Developer Mode first under User Settings → Advanced. The room ID is under Element → room settings → Advanced.)

    The bot verifies everything — the room’s call permissions, your moderator status — and tells you exactly what to fix if something’s off. When it all passes, it answers with a one-time approval code like NVB-XXXXXX.

  4. Approve it in Discord. Someone with Manage Server in the target server runs /bridge approve code:NVB-XXXXXX (any text channel, within 10 minutes). Done — the bridge starts immediately, and a notice is posted in the voice channel’s text chat so the server knows the channel is bridged.

Join the voice channel or the room’s call and say hi. Manage your bridges any time by messaging the bot in the same DM: send list to see yours, unlink <name> to remove one.

Limits (beta)

The full detail is in the self-serve guide’s Limits section.

For the full walkthrough — including troubleshooting and the usage limits — see the self-serve bridging guide in the project docs.

The bridge is built so nobody gets relayed without agreeing to it:

Prefer to run your own?

The bridge is open source (AGPL), and everything the hosted instance does — including the self-serve DM flow — works on a self-hosted copy pointed at your own homeserver. The project README has the full self-hosting story: quickstart from source, Docker, Debian/Fedora packages, and configuration. Most people are better served by the hosted instance above (Discord voice bridging has sharp edges — DAVE E2EE, pinned dependencies, a pool of bot applications to create), but if that sounds like fun, we’d love to hear how it goes.