User Tools

Matrix Signal Bridge

Signal is a chat service that boost secure communications, strong encryption and privacy-first approach. If that will hold the test of time, only time will tell.

You will still need to install Signal app, at least to register the bridge. After that, you should be able to uninstall it, YMMV.

Signal can be easily and fully bridged with Matrix using the Mautrix-Signal bridge here.

Installation

I asusme you are installing the bridge directly together with the Matrix server, as user conduwuit.

Create a subfolder to install the bridge:

su - conduwuit
mkdir mautrix-signal
cd mautrix-signal
wget -O mautrix-signal.zip 'https://mau.dev/mautrix/signal/-/jobs/artifacts/main/download?job=build%20amd64' 
unzip mautrix-signal.zip
chmod +x mautrix-signal

Bridge setup

Let the bridge generate the basic configuration file, and move it to the /data/conduwuit folder:

./mautrix-signal -e
mv config.yaml /data/conduwuit/mautrix-signal-config.yaml

Now edit it. You should take a good look at it, the following are only hints and pointers to what you aboslutely need to change:

database:
    type: sqlite3-fk-wal
    uri: file:/data/conduwuit/mautrix-signal.db?_txlock=immediate
 
homeserver:
    address: https://chat.mydomain.com
    domain: chat.mydomain.com
    
permissions: # this is probably not needed, but anyway...
  "*": "relaybot"                      # non-local users can only see messages
  "chat.mydomain.com": "full"          # full access to all local users
  "@myself:chat.mydomain.com": "admin" # who can admin the bot

    encryption:
    # Whether to enable encryption at all. If false, the bridge will not function in encrypted rooms.
    allow: true

double_puppet:
    # Servers to always allow double puppeting from.
    # This is only for other servers and should NOT contain the server the bridge is on.
    servers:
        anotherserver.example.org: https://matrix.anotherserver.example.org
    # Whether to allow client API URL discovery for other servers. When using this option,
    # users on other servers can use double puppeting even if their server URLs aren't
    # explicitly added to the servers map above.
    allow_discovery: false
    # Shared secrets for automatic double puppeting.
    # See https://docs.mau.fi/bridges/general/double-puppeting.html for instructions.
    secrets:
        chat.mydomain.com: as_token:<< here the double-puppet token >>

Note that backfill is disabled by default because Signal does not support it. There is no way, not even on the official client, to get your back history populated.

Since my server will have just a few users, i decided to use an SQLite database.

Bridge Registration

At this point you need to register the bridge with the Matrix server.

First of all, generate the registration.yaml file:

./mautrix-Signal -c  /data/conduwuit/mautrix-signal-config.yaml -g

Then perform the actual appservice registration, see here.

Usage

The signalbot user should have been created automatically.

Good! Now you can run the bridge:

/data/daemon/mautrix-signal/mautrix-signal -c /data/conduwuit/mautrix-signal-config.yaml

If all is well, your bridge should be up and running now.

Login

To login into signal you need to:

  • Start a chat with signalbot:chat.mydomain.com
  • type “login”
  • Scan the QR code with your signal on your phone.

Autostart

Since i use OpenRC, simply drop the following script to /etc/init.d:

/etc/init.d/conduwuit-signal
#!/sbin/openrc-run
# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="conduwuit signal bridge"
description="Conduwuit signal Matrix Bridge"
pidfile="/run/conduwuit-signal.pid"
command_background=true
command="/data/daemons/conduwuit/mautrix-signal/mautrix-signal"
command_args="/data/conduwuit/mautrix-signal-config.yaml"
command_user="conduwuit:conduwuit"
output_log="/var/log/conduwuit/conduwuit-signal.log"
output_err="/var/log/conduwuit/conduwuit-signal.log"

start_pre() {
        cd /data/daemons/conduwuit/mautrix-signal
}

depend() {
        need net
}

Make it executable and add to the proper runlevel:

chmod +x /etc/init.d/conduwuit-signal
rc-update add conduwuit-signal default

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information