selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
mollysocket logo

Self-host mollysocket

1.7.1

Signal notification relay via UnifiedPush

ReleaseOpen SourceAGPL-3.0
Updated7 months ago
LanguageRust
Setup difficultyModerate
Stars
409
Port
8020 (Web server for QR code and UnifiedPush registration)
Docker
ghcr.io/mollyim/mollysocket
Install with Docker Compose

What is mollysocket?

MollySocket is a self-hosted notification relay that connects to Signal servers as a linked device and forwards incoming notifications to Android devices via UnifiedPush. It does not hold any encryption keys, so it cannot read message contents. Users run MollySocket on their own server (via Docker, binary, or systemd), configure a UnifiedPush distributor app like ntfy on their phone, and scan a QR code from the MollySocket web interface to link their Signal account. The server exposes a web interface on port 8020 (default) that must be placed behind a TLS-terminating reverse proxy. Configuration is done via TOML file or environment variables, controlling allowed UnifiedPush endpoints, permitted Signal account UUIDs, database path, and VAPID keys for push authorization. An air-gapped mode allows operation without a public web interface. The project is licensed under AGPL-3.0 and written in Rust.

Should you self-host mollysocket?

mollysocket scores 50/100 on selfhost.directory (how scoring works) and ranks #10 of 14 in Messaging. It has 409 GitHub stars.

It shipped 2 stable releases in the past year. The latest, 1.7.1, came out on 25 March 2026. New versions land roughly every 6 weeks.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in Rust.

Its closest alternative on selfhost.directory is EMQX (78/100, 16 867 stars). It scores higher overall, so compare the two before you pick. See mollysocket vs EMQX side by side.

Features

  • Air-Gapped Mode
  • Allowed endpoints filtering
  • Allowed UUIDs filtering
  • No encryption keys stored
  • Signal notification relay
  • UnifiedPush support
  • VAPID key authentication
  • Web interface for QR code pairingRequires TLS-terminating reverse proxy

mollysocket README

How to install mollysocket

Install mollysocket with Docker Compose

Environment variables
MOLLY_DB, MOLLY_ALLOWED_ENDPOINTS, MOLLY_ALLOWED_UUIDS, MOLLY_VAPID_PRIVKEY, MOLLY_HOST, MOLLY_PORT, RUST_LOG

services: mollysocket: image: ghcr.io/mollyim/mollysocket:1 container_name: mollysocket restart: always volumes: - ./data:/data working_dir: /data command: server environment: - MOLLY_DB="/data/mollysocket.db" - MOLLY_ALLOWED_ENDPOINTS=[""] - MOLLY_ALLOWED_UUIDS=[""] - MOLLY_HOST=0.0.0.0 - MOLLY_PORT=8020 - RUST_LOG=info ports: - "8020:8020"

Example configuration from docker-compose.yml; VAPID key must be added

How to configure mollysocket

  • dbdb.sqlitePath to the SQLite database file

    Path to the SQLite database file

    values: Any valid file path

  • host127.0.0.1Listening address of the web server

    Listening address of the web server

    values: 0.0.0.0, 127.0.0.1, etc.

  • MOLLY_CONFPath to the configuration file

    Path to the configuration file

  • port8020Listening port of the web server

    Listening port of the web server

    values: Any valid port number

  • RUST_LOGerrorVerbosity level for logging

    Verbosity level for logging

    values: error, info, debug, trace

  • vapid_key_fileFile containing VAPID private key

    File containing VAPID private key

    values: Any valid file path

  • vapid_privkeyVAPID private key for push server authorization

    VAPID private key for push server authorization

    values: Base64-encoded VAPID private key

  • webservertrueWhether to start the web server

    Whether to start the web server

    values: true, false

mollysocket releases & version history

FAQ

Why is the status 'Waiting for confirmation from the MollySocket server' in air-gapped mode?

The MollySocket server hasn't sent a test notification yet. Ensure the server is running and run the connection ping command with your account ID.

Why does the Android app show 'The endpoint is forbidden by the server'?

The UnifiedPush endpoint (push server) is not in the allowed_endpoints list. Add your push server URL to allowed_endpoints.

Why does the Android app show 'The account ID is refused by the server'?

The server's allowed_uuids configuration does not include your Signal account ID. Add your account ID or use wildcard [*] to allow all.

Why does the Android app show 'Invalid response from server'?

The MollySocket server cannot be reached at the configured URL or is not responding correctly. Verify the URL works in a mobile browser.

Why do I see an alert about origin or pathname not being correct?

The reverse proxy must forward the original Host header and X-Original-URL header to MollySocket so it can generate correct URLs.

How to backup VAPID key?

Generate the key and pipe to a temporary file before encrypting with systemd-creds, or decrypt an existing encrypted credential file using systemd-creds.

Where is the MollySocket QR code?

The QR code appears on the MollySocket web interface when accessed via a reverse proxy with TLS. In air-gapped mode, use SSH port forwarding or disable the webserver to see the QR code in logs.

More in Notifications

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…