{"id":37113284,"url":"https://github.com/stieneee/mumble-discord-bridge","last_synced_at":"2026-04-05T18:02:14.859Z","repository":{"id":43385436,"uuid":"304219834","full_name":"Stieneee/mumble-discord-bridge","owner":"Stieneee","description":"A simple voice bridge between Mumble and Discord.","archived":false,"fork":false,"pushed_at":"2026-04-04T03:50:05.000Z","size":6095,"stargazers_count":187,"open_issues_count":23,"forks_count":21,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-04T05:28:03.838Z","etag":null,"topics":["audio-streaming","discord","discord-bot","mumble","mumble-server","opus","voice"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Stieneee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-10-15T05:30:31.000Z","updated_at":"2026-04-04T03:41:31.000Z","dependencies_parsed_at":"2026-02-11T07:01:26.550Z","dependency_job_id":null,"html_url":"https://github.com/Stieneee/mumble-discord-bridge","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/Stieneee/mumble-discord-bridge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stieneee%2Fmumble-discord-bridge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stieneee%2Fmumble-discord-bridge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stieneee%2Fmumble-discord-bridge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stieneee%2Fmumble-discord-bridge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Stieneee","download_url":"https://codeload.github.com/Stieneee/mumble-discord-bridge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stieneee%2Fmumble-discord-bridge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31444702,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T15:22:31.103Z","status":"ssl_error","status_checked_at":"2026-04-05T15:22:00.205Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-streaming","discord","discord-bot","mumble","mumble-server","opus","voice"],"created_at":"2026-01-14T13:22:18.132Z","updated_at":"2026-04-05T18:02:14.853Z","avatar_url":"https://github.com/Stieneee.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mumble Discord Bridge\n\nMumble Discord Bridge is an open source Go application to bridge the audio and chat between Mumble and Discord.\n\nIt was built with the idea that people can continue to use the voice application of their choice.\n\n## New BridgeLib Architecture\n\nThe project now includes a modular library (`pkg/bridgelib`) that enables multiple bridge instances to share a single Discord client.\n\nKey features of the new architecture:\n\n- Shared Discord client (bot) for multiple bridge instances\n- Proper message routing between Discord and bridge instances\n- Consistent behavior between single and multi-bridge deployments\n- DAVE E2EE support (Discord Audio \u0026 Video End-to-End Encryption)\n- Used by the patchcord.io multi-bridge service 😄\n\n## PatchCord.io\n\nMumble Discord Bridge can be hosted on any server or computer and ships in a Docker container for convenience.\n\nFor those looking for SaaS solution take a look at [patchcord.io](https://patchcord.io).\npatchcord.io offers a free tier for those who want to try out Mumble Discord Bridge, and paid tiers for those who want to handle larger communities.\n\n## Usage\n\nSeveral configuration variables are required to run the bridge.\nAll variables can be set using command line flags or in the environment.\nThe variable can also be specified in an .env file located in the working directory.\nSee the help documentation for all the options\n\n```bash\n./mumble-discord-bridge --help\n```\n\nThe bridge can be run with the follow modes:\n\n```text\n   auto\n       The bot starts up but does not connect audio channels immediately. It can be either manually linked (see below) or will join the voice channels when there's at least one person on each side.\n       The audio bridge will leave both voice channels once there is no one on either end\n   manual\n       The bot starts up but does not connect immediately. It will join the voice channels when issued the link command via chat and will leave with the unlink command\n   constant (default)\n       The bridge starts up and immediately connects to both Discord and Mumble voice channels. It can not be controlled in this mode and quits when the program is stopped\n```\n\nIn \"auto\" or \"manual\" modes, the bridge can be controlled in Discord with the following commands.\n\n**Important:** Discord commands only work when sent from the configured channel (DISCORD_CID). Commands from other channels are ignored. This ensures proper isolation in multi-bridge deployments.\n\n```text\n!COMMAND link\n (Discord Only) Commands the bridge to join Discord voice and Mumble.\n The user must be in the configured voice channel (DISCORD_CID) for this to work.\n\n!COMMAND unlink\n (Discord Only) Commands the bridge to leave Discord voice and Mumble.\n\n!COMMAND refresh\n (Discord Only) Commands the bridge to unlink, then link again.\n```\n\nThere are additional commands that can be called from either Mumble or Discord.\n\n```text\n!COMMAND help\n Print help text\n\n!COMMAND version\n Print the version\n\n!COMMAND restart\n Restart the bridge\n\n!COMMAND status\n Show bridge status, uptime, and mode\n\n!COMMAND list\n List all connected users in both Mumble and Discord.\n```\n\n## Setup\n\n### Creating a Discord Bot\n\nA Discord Bot is required to authenticate this application with Discord.\nThe guide below provides information on how to create a Discord bot.\n\n[Create a Discord Bot](https://discordpy.readthedocs.io/en/latest/discord.html)\n\nIndividual Discord servers need to invite the bot before it can connect.  \nThe bot requires the following permissions:\n\n#### General Permissions\n- View Channels\n#### Text Permissions\n- Send Messages\n- Read Message History\n#### Voice Permissions\n- Connect\n- Speak\n- Use Voice Activity\n\nPermission integer 36768768.\n\n### Finding Discord CID and GID\n\nDiscord GID is a unique ID linked to one Discord Server, also called Guild. CID is similarly a unique ID for a Discord Channel. To find these you need to set Discord into developer Mode.\n\n[Instructions to enable Discord Developer Mode](https://discordia.me/en/developer-mode)\n\nThen you can get the GID by right-clicking your server and selecting Copy-ID. Similarly the CID can be found right clicking the voice channel and selecting Copy ID.\n\n### Generating Mumble Client (Optional)\n\nOptionally you can specify a client certificate for mumble [Mumble Certificates](https://wiki.mumble.info/wiki/Mumble_Certificates)\nIf you don't have a client certificate, you can generate one with this command:\n\n```bash\nopenssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout cert.pem -out cert.pem -subj \"/CN=mumble-discord-bridge\"\n```\n\n### Binary\n\nPrebuilt binaries are available.\nThe binaries require the opus and libdave runtime libraries to be installed.\n\n```bash\n# Ubuntu — install runtime dependencies\nsudo apt install libopus0\n\n# Install libdave runtime library\n# Option A: use the Makefile target (requires cmake, g++)\nmake install-libdave\n\n# Option B: manually copy libdave.so to /usr/lib\n# See the godave repository for details: https://github.com/disgoorg/godave\n\n# Ensure the linker can find libdave\nexport LD_LIBRARY_PATH=\"$HOME/.local/lib:$LD_LIBRARY_PATH\"\n```\n\n```bash\ncurl -s https://api.github.com/repos/stieneee/mumble-discord-bridge/releases/latest | grep \"mumble-discord-bridge\" | grep \"browser_download_url\" | cut -d '\"' -f 4 | wget -qi -\n```\n\n### Docker\n\nThis project is built and distributed in a docker container.\nA sample docker command can be copied from below.\nThis service command will always attempt to restart the service due to the `--restart=always` flag even when the server is restarted.\nFor testing purposes it may be best to remove the restart flag.\n\nReplace the environment variables with variable for the desired mumble server, discord bot and discord server/channel.\n\n```bash\n# Sample for testing\ndocker docker run -e MUMBLE_ADDRESS=example.com -e MUMBLE_PASSWORD=optional -e DISCORD_TOKEN=TOKEN -e DISCORD_GID=GID -e DISCORD_CID=CID stieneee/mumble-discord-bridge\n\n# Run as a service\ndocker docker run -e MUMBLE_ADDRESS=example.com -e MUMBLE_PASSWORD=optional -e DISCORD_TOKEN=TOKEN -e DISCORD_GID=GID -e DISCORD_CID=CID --restart=always --name=mumble-discord-bridge -d stieneee/mumble-discord-bridge\n\n# Stop the service\ndocker stop mumble-discord-bridge \u0026\u0026 docker rm mumble-discord-bridge\n```\n\n### MDB Bridge Options\n\nThe following options can be set using environment variables or with command line options.\n\nNote boolean values are flags when set via command line, example `-mumble-insecure -mumble-disable-text` not `-mumble-insecure true -mumble-disable-text true`.\n\n| Environment Variable       | CLI                         | Type   | Default          | Description                                                                                                                    |\n| -------------------------- | --------------------------- | ------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| CHAT_BRIDGE                | -chat-bridge                | flag   | false            | enable text chat bridge                                                                                                        |\n| COMMAND                    | -command                    | string | \"mumble-discord\" | command phrase '!mumble-discord help' to control the bridge via text channels                                                  |\n| COMMAND_MODE               | -command-mode               | string | \"both\"           | [both, mumble, discord, none] determine which side of the bridge will respond to commands                                      |\n| DEBUG_LEVEL                | -debug-level                | int    | 1                | discord debug level                                                                                                            |\n| DISCORD_CID                | -discord-cid                | string | \"\"               | discord cid, required                                                                                                          |\n| DISCORD_TEXT_MODE          | -discord-text-mode          | string | \"channel\"        | disable sending direct messages to discord                                                                                     |\n| DISCORD_GID                | -discord-gid                | string | \"\"               | discord gid, required                                                                                                          |\n| DISCORD_TOKEN              | -discord-token              | string | \"\"               | discord bot token, required                                                                                                    |\n| MODE                       | -mode                       | string | \"constant\"       | [constant, manual, auto] determine which mode the bridge starts in                                                             |\n| MUMBLE_ADDRESS             | -mumble-address             | string | \"\"               | mumble server address, example example.com, required                                                                           |\n| MUMBLE_CERTIFICATE         | -mumble-certificate         | string | \"\"               | client certificate to use when connecting to the Mumble server                                                                 |\n| MUMBLE_CHANNEL             | -mumble-channel             | string | \"\"               | mumble channel to start in, using '/' to separate nested channels, optional                                                    |\n| MUMBLE_DISABLE_TEXT        | -mumble-disable-text        | flag   | false            | disable sending text to mumble                                                                                                 |\n| MUMBLE_INSECURE            | -mumble-insecure            | flag   | false            | mumble insecure, ignore ssl certificates issues                                                                                |\n| MUMBLE_PASSWORD            | -mumble-password            | string | \"\"               | mumble password                                                                                                                |\n| MUMBLE_PORT                | -mumble-port                | int    | 64738            | mumble port                                                                                                                    |\n| MUMBLE_USERNAME            | -mumble-username            | string | \"Discord\"        | mumble username                                                                                                                |\n| MUMBLE_BOT                 | -mumble-bot                 | flag   | false            | exclude bot from mumble user count, optional, requires mumble v1.5 or later                                                    |\n| PROMETHEUS_ENABLE          | -prometheus-enable          | flag   | false            | enable prometheus metrics                                                                                                      |\n| PROMETHEUS_PORT            | -prometheus-port            | int    | 9559             | prometheus metrics port                                                                                                        |\n| TO_DISCORD_BUFFER          | -to-discord-buffer          | int    | 50               | jitter buffer from Mumble to Discord to absorb timing issues related to network, OS and hardware quality. (Increments of 10ms) |\n| TO_MUMBLE_BUFFER           | -to-mumble-buffer           | int    | 50               | jitter buffer from Discord to Mumble to absorb timing issues related to network, OS and hardware quality. (Increments of 10ms) |\n\n### Mumbler Server Setting\n\nTo ensure compatibility please edit your murmur configuration and add the following\n\n```bash\nopusthreshold=0\n```\n\nThis ensures all packets are opus encoded and should not cause any compatibility issues if your users are using up to date clients.\n\n### Chat Bridge\n\nThe chat bridge feature will relay chat messages between mumble and discord channels.\nTo enable the feature the MUMBLE_DISABLE_TEXT must be false and DISCORD_TEXT_MODE must be set to \"channel\" (the default state).\nFinally the CHAT_BRIDGE variable must be set to true.\n\n## Building From Source\n\nThis project requires Go and CGO to build from source.\nTwo system libraries are required:\n\n- **libopus** — Opus audio codec\n- **libdave** — Discord Audio \u0026 Video End-to-End Encryption (DAVE) protocol\n\n```bash\n# Ubuntu/Debian\nsudo apt install libopus-dev cmake g++ pkg-config\n\n# Install libdave (downloads prebuilt binary or builds from source)\nmake install-libdave\n\n# Ensure pkg-config can find libdave (add to your shell profile)\nexport PKG_CONFIG_PATH=\"$HOME/.local/lib/pkgconfig:$PKG_CONFIG_PATH\"\nexport LD_LIBRARY_PATH=\"$HOME/.local/lib:$LD_LIBRARY_PATH\"\n\n# Build\nmake\n```\n\n### OpenBSD Users\n\nOpenBSD users should consider compiling a custom kernel to use 1000 ticks for the best possible performance.\nSee [issue 20](https://github.com/Stieneee/mumble-discord-bridge/issues/20) for the latest discussion about this topic.\n\n## Jitter Buffer\n\nThe bridge implements simple jitter buffers that attempt to compensate for network, OS and hardware related jitter.\nThese jitter buffers are configurable in both directions.\nA jitter buffer will slightly the delay the transmission of audio in order to have audio packets buffered for the next time step.\nThe Mumble client itself includes a jitter buffer for similar reasons.\nA default jitter of 50ms should be adequate for most scenarios.\nA warning will be logged if short burst or audio are seen.\nA single warning can be ignored multiple warnings in short time spans would suggest the need for a larger jitter buffer.\n\n## Monitoring the Bridge (Optional)\n\nThe bridge can be started with a Prometheus metrics endpoint enabled.\nThe example folder contains the a docker-compose file that will spawn the bridge, Prometheus and Grafana configured to serve a single a pre-configured dashboard.\n\nThe endpoint exposes /live and /ready for use with Kubernetes.\n\n![Mumble Discord Bridge Grafana Dashboard](example/grafana-dashboard.png \"Grafana Dashboard\")\n\n## Known Issues\n\nDelays in connecting to Mumble (such as from external authentication plugins) may result in extra error messages on initial connection.\n\nThere is an issue seen with Mumble-Server (murmur) 1.3.0 in which the bridge will lose the ability to send messages client after prolonged periods of connectivity.\nThis issue appears to be resolved by murmur 1.3.4.\n\n## Breaking Config Changes\n\n### Version 0.7\n\n**Command Behavior Changes:**\n\n- Discord commands (link, unlink, refresh) now only work when sent from the configured channel (DISCORD_CID). Commands from other text channels are ignored.\n- The `link` command now requires the user to be in the configured voice channel (DISCORD_CID). Previously, the bridge would join whichever voice channel the user was in. This change ensures proper isolation in multi-bridge deployments where multiple bridges may exist in the same guild.\n\n**Removed Features:**\n\n- Bot status updates removed. The bridge no longer updates Discord's \"Listening to...\" status with Mumble user counts. The `DISCORD_DISABLE_BOT_STATUS` / `-discord-disable-bot-status` config option has been removed along with this functionality.\n\n**BridgeLib API Changes (for library users):**\n\n- `DiscordDisableBotStatus` removed from `BridgeConfig` (feature removed)\n- `Logger` interface moved to `pkg/logger` package - use `logger.Logger` instead of `bridgelib.Logger`\n- `JoinVoiceChannel` removed from `DiscordProvider` interface - voice connections are now managed internally by connection managers\n- New `EventDispatcher` system for subscribing to bridge events (connection status, user join/leave, etc.)\n\n### Version 0.6\n\nDISCORD_DISABLE_TEXT has been replaced with DISCORD_TEXT_MODE. As a result the default behavior has been change from direct messages to users \"user\" to \"channel\".\n\nDISCORD_COMMAND has been replace with COMMAND and COMMAND_MODE. The feature now supports both mumble and discord. The default command phrase remains \"!mumble-discord\".\n\n## License\n\nDistributed under the MIT License. See LICENSE for more information.\n\n## Contributing\n\nIssues and PRs are welcome and encouraged.\nPlease consider opening an issue to discuss features and ideas.\n\n## Acknowledgement\n\nThe project would not have been possible without:\n\n- [gumble](https://github.com/layeh/gumble)\n- [disgo](https://github.com/disgoorg/disgo)\n- [godave](https://github.com/disgoorg/godave) — Go bindings for Discord's DAVE E2EE protocol\n- [discordgo](https://github.com/bwmarrin/discordgo) (used in earlier versions)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstieneee%2Fmumble-discord-bridge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstieneee%2Fmumble-discord-bridge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstieneee%2Fmumble-discord-bridge/lists"}