A highly-integrated bridge between XMPP and Discord, implemented as a component
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PapaTutuWawa 3d3686c301 xmpp: Add a temporary fix for avatar retrieval 4 weeks ago
xmpp_discord_bridge xmpp: Add a temporary fix for avatar retrieval 4 weeks ago
.gitignore misc: Update .gitignore 1 month ago
LICENSE docs: Add readme and License 1 month ago
README.md xmpp: Make URL removal configurable 1 month ago
setup.py xmpp: Migrate from discord.py to nextcord 1 month ago



xmpp-discord-bridge's goal is to be a highly integrated bridge between XMPP and Discord.


  • Uni-directional bridging of Discord reactions to XMPP: Currently without XEP-0424, but with a "compat" mode
  • Bi-directional bridging of media using Webhook embeds and OOB data
  • Uni-directional bridging of Discord presence to XMPP
  • Puppetering support on the side of XMPP
  • Automatic webhook creation
  • Uni-directional sync of the Discord channel's topic
  • XMPP Avatar spoofing on the Discord side
  • Support for proxying media sent via Discord (With this miniproxy)


The bridge can be configured via config.toml at either the current working directory or /etc/xmpp-discord-bridge/config.toml.

jid = "discord.server.example" # JID of the server component
secret = "secret" # Component secret
server = "server.example # Address of the actual XMPP server
port = 5869 # Component port
discord_token "...." # Token of your Discord bot

# If a message is reacted to, send the following to the MUC:
# > [Message content]
# + :someemoji:
reactions_compat = true

# Use the XMPP user's avatar in the webhook. For options, see
# the [avatars] section
relay_xmpp_avatars = false

# When a user is mentioned, also add the display name infront of the message body, e.g.
# SomeUser, PapaTutuWawa: Hello @SomeUser and @PapaTutuWawa
muc_mention_compat = true

# If true, then xmpp-discord-bridge will also make offline Discord users appear in the MUC.
# If they are offline, then they will have a presence of "xa". If false, then offline users
# will leave the MUC.
dont_ignore_offline = true

# If true, when receiving a file to embed in Discord, the bridge will remove the URL from
# the content, leaving only the embed behind. This prevents Discord users who disabled
# link previews from viewing the embed.
remove_url_on_embed = true

# When sending files from Discord to XMPP, proxy the URLS with this template. "<hmac>" and
# and "<url>" will be substituted. Proxy will not be used if not set.
proxy_discord_urls_to = "https://proxy.server.example/proxy/<hmac>/<urls>"

# Secret for the proxy. Only used when the proxy is used.
hmac_secret = "some-secret"

# Path where avatars can be stored
path = "/some/path"

# URL on which the avatars will be available
url = "https://im.server.example/avatars/"

# The ID of the guild
guild = 00000000000

# The ID of the channel to mirror
channel = 000000000

# The MUC to mirror into
muc = "channel@muc.server.example"

In order for the bridge to work, it needs to have an affiliation of owner before joining. The virtual users that follow will be automatically added to the room with an affiliation of member.