Your Signal chats in a browser tab. Backchannel runs Signal Desktop on your own server and gives you a fast web page for it, so you can use Signal in Rambox, Ferdium, or any browser, on any computer, without installing Signal there.
Backchannel is not made, endorsed or supported by Signal Messenger. "Signal" is their trademark and is used here only to say what this works with.
It's linked to your phone as one more Signal device, like Signal Desktop. Messages you send reach your other devices, read state syncs both ways, and mute and archive settings come across. The page does what Signal Desktop does:
- Chats: pinned chats, All / 1:1 / Groups tabs, an unread filter, archived chats, message requests, drafts, delivery checkmarks, and search across all your messages.
- Messages: reactions (and who reacted), replies that jump to the original, edit and delete, polls, stickers, link previews, disappearing messages, typing indicators, an unread line where you left off, and each chat's photos, files, audio and links in All media.
- Writing: @mentions, bold, italic, strikethrough, monospace and spoilers, the full emoji picker with skin tones, pasting and dropping images, files, voice notes, and scheduled messages.
- Groups: start chats and groups, add and remove members, admins, the group link, name, photo and permissions. Click someone's photo for their contact card, or reply to them privately with the group message quoted.
- Settings: your profile, notifications, privacy, the blocked list and themes.
The full list, with what's still missing, is PARITY.md.
A running list of things Signal Desktop doesn't do, or limits, that Backchannel does. Each new one is added here when it ships; items newer than the latest release are marked (next release).
- Any browser tab. Signal runs on your server, always online, and you use it from a tab in Rambox, Ferdium or any browser. No Signal Desktop window on your PC.
- Notifications from the tab. While the page is open, notifications come from it, not from a second Signal window.
- Forward to any number of chats. Signal forwards to at most five; Backchannel lists every chat, most recent first, with no limit.
- One poll to many chats. Signal can't forward a poll; Backchannel sends each chat its own copy.
- Reply privately to someone in a group: their message is quoted in your 1:1 chat, and the two are linked both ways on the page. Signal Desktop has no such option.
- Sticker replies. Signal has them built in but switched off; Backchannel sends a sticker as a reply. Recipients see the quote once their Signal app shows sticker replies.
- Bold italic in one step, from the format menu or bar. Signal needs two.
- Scheduled messages. Signal Desktop has none. Backchannel sends them from your server at the time you pick, even with your PC off.
- Edit and tag when forwarding. Signal lets you edit a forward's text; Backchannel also lets you @mention people. Each chat gets a real tag where that person is in the group, and plain "@Name" text elsewhere.
- Markdown shortcuts and SMS-ready copies. Type *bold*, _italic_, _*bold italic*_, ~strikethrough~ or `monospace` and the style applies as you type (Backspace right after undoes it). Copying styled text puts Unicode bold, italic and strikethrough letters on the clipboard, so the styles survive a paste into an SMS or anywhere else, and pasting such text into Backchannel turns it back into Signal's styles.
- Signal keeps every key. The page talks to Signal Desktop through a local API that Signal itself guards: nothing can use it until you allow that app inside Signal, and only for what you allowed.
- Nothing leaves your server except Signal's own traffic. There's no account to sign up for and no third-party service.
- The page is behind a secret address that only you have, and the container only listens on the server's own loopback. You put your own HTTPS reverse proxy in front of it.
- You build it yourself from public source. No prebuilt image is published.
The full security design: external-client threat model.
You need:
- An x86-64 Linux host with Docker and Compose. ARM hosts, such as a Raspberry Pi or an Apple Silicon Mac, are untested.
- Several GB of free disk for the build.
- Your phone with Signal on it.
-
Get the code and make a data folder:
git clone https://github.com/mikesimone/backchannel.git cd backchannel cp .env.example .env sudo mkdir -p /var/lib/backchannel sudo chown 1000:1000 /var/lib/backchannelEdit
.envif your user ID (id -u) isn't 1000 or you want the data somewhere else. The data folder holds your Signal profile and keys, so keep it private and back it up. -
Build and start it:
docker compose up -d --build. The first build compiles Signal Desktop from source and takes a while (about 20 minutes on a small server). -
Link it to your phone:
docker compose exec backchannel screen.sh qrprints the link QR code in your terminal.- In Signal on your phone, go to Settings > Linked devices > Link new device and scan it.
- Signal then asks for a device name. Answer with
docker compose exec backchannel screen.sh type 'My server', then... screen.sh key Return.
-
Approve the page. Signal shows a dialog asking to allow "Backchannel". Run
screen.sh shotto savescreen.pngin the data folder and see where the button is, thenscreen.sh click X Y. For a live view of the screen, see Seeing Signal's screen below. -
Open the page.
docker compose exec backchannel screen.sh urlprints its address, with a secret token in it. Anyone with that address can read and send your messages, so treat it like a password.
Put a reverse proxy with HTTPS in front of port 8083 and set
BACKCHANNEL_ORIGIN in .env to its address. Let the proxy pass large
uploads, or bigger photos fail with HTTP 413. In nginx, add
client_max_body_size 100m; to that server block.
In Rambox or Ferdium: add a custom app or service, paste the address, and turn on notifications. In Rambox, also turn on "Display in tab" for the unread badge.
You only need this for linking and approval. Run
docker compose exec backchannel screen.sh vnc. Then, from your own
machine, run ssh -L 5901:127.0.0.1:5901 yourserver and open a VNC
viewer on localhost:5901.
This is untested so far, but nothing in it is specific to Linux hosts. Docker Desktop runs the same Linux container inside WSL 2.
-
Install Docker Desktop with the WSL 2 backend (its default), and a WSL distribution such as Ubuntu (
wsl --install -d Ubuntuin PowerShell). In Docker Desktop, go to Settings > Resources > WSL integration and turn it on for that distribution. -
Do the quick start inside the WSL shell (
wsl), not in PowerShell. Keep both the clone and the data folder in the WSL file system, for example~/backchanneland~/backchannel-data, and set.envto match:BACKCHANNEL_DATA=/home/you/backchannel-dataBACKCHANNEL_UIDset to the output ofid -u
A folder on
C:(/mnt/c/...) is much slower for the build, and it can't keep the Unix permissions Signal's profile needs. -
Docker Desktop forwards the ports to Windows. On that PC, the address from
screen.sh urlopens as is in any browser or in Rambox.
Give WSL enough memory for the build. If the build gets killed, set
memory=8GB or more in .wslconfig.
It's only online while that PC is awake and Docker Desktop is running. Messages still reach your phone, and the page catches up when the PC comes back, as Signal Desktop does.
git pull
docker compose up -d --buildEach release here pins a tested version of the fork. Your link and approval live in the data folder, so rebuilding keeps them. Update at least every couple of months: Signal Desktop builds stop working about 90 days after they're built.
- On your phone, go to Settings > Linked devices and unlink the device.
- Run
docker compose down. - Delete the data folder. It holds the Signal profile and keys.
- Optionally, run
docker image rm backchannel.
If you set Backchannel up from contrib/backchannel in the Signal-Desktop
fork, you can move without linking again:
- Run
docker compose downthere. - Copy its
.envhere. The older namesSIGNAL_UID,SIGNAL_DATAandRAMBOX_ORIGINmust be renamed to theBACKCHANNEL_ones. - Run
docker compose up -d --buildhere.
Don't run both at once, because they'd share one Signal profile.
This repository is the front door: setup, releases and issues. The code is in the Signal-Desktop fork, because most features change both Signal Desktop's bridge and the page together:
- The bridge is in
ts/externalClient. - The page and helper are in
contrib/backchannel. - The fork merges every Signal Desktop release.
The helper can also run next to Signal Desktop on your own PC, without Docker. See the helper README.
Found a bug or something Signal Desktop does that the page doesn't? Open an issue here.
If Backchannel is useful to you, you can leave a tip at ko-fi.com/gcbapps.
AGPL-3.0, like Signal Desktop. See LICENSE.

