Signal Bridge #

Based on mautrix-signal. Pairs as a Signal linked device — the same way Signal Desktop works — so your Signal identity, groups and contacts flow into Matrix with full Signal-protocol E2EE preserved on the Signal side.

Prerequisites #

  • Meldry plan: Business
  • A Signal account on your phone (required — Signal does not support primary desktop accounts)
  • An active phone + network during the initial pairing

Enable the bridge #

  1. Dashboard → Server → Bridges → Signal → Enable.
  2. Wait ~10 seconds. The bot appears at @signalbot:<your-name>.meldry.com.

Signal's linked-device flow is QR-code-based, same as WhatsApp.

  1. In your Matrix client, DM @signalbot:<your-name>.meldry.com.
  2. Send link.
  3. The bot replies with a QR code.
  4. On your phone: Signal → Settings → Linked devices → Link new device. Scan the QR.
  5. Your phone confirms the new device is added. The bot replies Successfully linked as +14155550001.
  6. Signal backfills your recent 1:1 chats and groups as Matrix rooms within a minute.

What gets bridged #

  • 1:1 chats → Matrix DM rooms with contact avatars puppeted.
  • Groups → Matrix rooms.
  • Disappearing messages — Signal's timer syncs to Matrix retention; Matrix rooms with a retention policy also expire.
  • Reactions → bidirectional.
  • Attachments — images, videos, voice notes, files. Re-encrypted across the bridge.
  • Read receipts and typing indicators → bidirectional (respects your Signal privacy settings).
  • Stories → NOT bridged (Signal Stories use a separate API).
  • Calls → NOT bridged (Signal voice/video is Signal-proprietary).

Signal-protocol caveats #

Signal is ruthlessly E2EE and doesn't give linked devices direct message history. The bridge starts receiving messages from the moment you pair — there's no backfill of older history. Messages sent while your phone was offline will come through once it reconnects.

Commands reference #

CommandWhat it does
linkStart the linked-device QR flow
unlinkUnlink (also removes the device from the phone's linked-devices list)
statusShow link health
list-contactsList Signal contacts
pm <+countrynumber>Start a DM with a Signal number
sync-contactsForce contact re-sync
helpFull command list

Identity verification (safety numbers) #

Signal identifies contacts by safety numbers — a fingerprint you compare in-person to confirm you're talking to the right person. The bridge exposes them:

  • Run safety <matrix-user-id> in the bridge DM to view a contact's safety number.
  • If a safety number changes (your contact reinstalled Signal), the bridge flags it in the room as a system message.

Troubleshooting #

QR code expired — run link again for a fresh one (expires every ~30 seconds).

"Primary device went away" — if your phone is factory-reset or you delete Signal on it, every linked device (including the bridge) is kicked. Set up Signal on the phone again, then re-link.

Messages delivered on phone but not on Matrix — check the bridge DM for a status report. If it shows registration lock, you've added a Signal PIN — re-run link to re-pair.

Group changes not syncing — large group admin events batch; wait 30 seconds and run sync-contacts.

Media fails to decrypt — very rarely, Signal's attachment cipher rotates and old links break. Re-send the image from the original chat.

Privacy considerations #

  • Your phone number is stored in the bridge database.
  • Signal message content is decrypted at the bridge process to be re-encrypted for Matrix. Meldry does not log message bodies.
  • Unlinking removes the bridge's Signal session and closes all puppeted rooms.

What's next #