Slack Bridge #

Based on mautrix-slack. Supports modern Slack workspaces (both free and paid plans). Channels become Matrix rooms, your full workspace becomes a Matrix space, and DMs / threads / reactions all sync bi-directionally.

Prerequisites #

  • Meldry plan: Pro or Business
  • A Slack account on the workspace you want to bridge
  • Workspace admin consent to install a Slack app — if you're not the admin, the bridge will still work with user-token auth, but some features (channel list sync, DM listing) are restricted

Enable the bridge #

  1. Open Dashboard → Server → Bridges.
  2. Find Slack and click Enable.
  3. Wait ~10 seconds. The bridge bot appears at @slackbot:<your-name>.meldry.com.

There are two ways to authenticate; pick one.

Option A — Token login (easiest, no workspace admin required) #

This uses your personal Slack user token — the same credential the Slack desktop/web app uses.

  1. In Slack (web or desktop), open any workspace you want to bridge.
  2. Open browser DevTools → Application → Local Storage → https://app.slack.com.
  3. Find the entry localConfig_v2. Inside it, locate the token field for your workspace — it starts with xoxc-....
  4. Also find the d cookie in Cookies → https://app.slack.com — starts with xoxd-....
  5. In your Matrix client, DM @slackbot:<your-name>.meldry.com:
    login-token xoxc-... xoxd-...
    
  6. The bot confirms Successfully logged in as @yourname on My Workspace.

Repeat for additional workspaces — each login-token call adds one workspace.

Option B — OAuth (requires workspace admin to install the Meldry Slack app) #

  1. The workspace admin installs the Meldry Slack app from https://<your-name>.meldry.com/slack/install.
  2. Any user in the workspace can then run login in the bridge bot DM — they're redirected to Slack's OAuth consent screen.
  3. After approval, the bot confirms Logged in via OAuth.

OAuth gives cleaner per-user auth and survives Slack password changes; token auth can break when your Slack session expires.

What gets bridged #

  • Public channels — each visible as a Matrix room under the workspace space.
  • Private channels — same, but only to members.
  • DMs and MPDMs (multi-person DMs) — appear as Matrix DM rooms.
  • Threads — Slack threads become Matrix threads, replies sync both ways.
  • Reactions — synced, with emoji translation.
  • Mentions@user on Matrix maps to <@UXXX> on Slack and vice versa.
  • File uploads — images, video, audio, arbitrary files up to Slack's per-workspace limit.
  • Edits and deletes — bidirectional.

What's not bridged #

  • Huddles (voice/video) — not supported.
  • Canvas documents — read-only, rendered as plain text links.
  • Workflows and apps — appear as bot messages; you can't trigger them from Matrix.
  • Slack Connect shared channels — the bridge sees messages, but cross-workspace replies can misattribute.

Bridging a specific channel on demand #

By default, after login, all channels you're a member of get bridged. If you don't want that — say, only bridge one or two rooms — pass --no-auto-join in your login command and then run:

join !matrix-room-id #slack-channel-name

Commands reference #

CommandWhat it does
loginOAuth login flow
login-token xoxc-... xoxd-...Personal-token login
logoutUnlink the current workspace
workspacesList all linked workspaces
join <matrix-room> <slack-channel>Manually bridge a specific channel
syncForce a full resync
helpFull command list

Troubleshooting #

"Invalid tokens" — Your xoxc or xoxd credentials have expired. Log in to Slack in your browser again and copy fresh values.

Missing channels after login — Slack's token-auth only sees channels you're explicitly a member of. Join the channel in Slack first, then run sync.

Emoji not translating — Custom workspace emoji need to be uploaded to Matrix separately. The bridge handles standard emoji automatically.

Slow backfill — Workspaces with thousands of channels take several minutes to import. The sync command is chunked; progress shows in the bridge DM.

"Workspace is paywalled" — Slack free plans limit message history to 90 days. The bridge can only backfill what Slack's API returns.

Limitations #

  • Workspace-side encryption. Slack does not support end-to-end encryption, so messages in bridged rooms decrypt at the Slack side regardless of Matrix room settings.
  • Slack rate limits. Slack throttles the Web API aggressively. Large synchronous operations (joining 100 channels at once) will pause and resume.

Unlinking #

To remove a single workspace: logout in the bridge bot DM will prompt you for which workspace. To remove the bridge entirely and free up a bridge slot, disable it from Dashboard → Server → Bridges.

What's next #