Skip to content

Software list

exquo edited this page Jan 6, 2022 · 8 revisions

Software list

A list of third-party libraries and clients for the Signal messenger.

See the diagram for how the software components connect with each other.

Libraries

Software used by other software.

Official

Library Notes Used by

libsignal-protocol-c
libsignal-protocol-java
libsignal-protocol-javascript

Signal protocol libraries

libsignal-service-java

Signal service library

[Signal-Android]

libsignal-client

"Platform-agnostic APIs useful for Signal client apps"
"Use outside of Signal is unsupported."

[Signal-Android]
[Singal-iOS]
[Signal-Desktop]

Unofficial

Library Notes Used by

libsignal-service-java (fork)

"This fork allows using the Signal servers without GCM and provides provisioning, i.e. linking devices, and some bugfixes."

[signal-cli]
[signald]

signal-cli

"signal-cli provides a commandline and dbus interface for signalapp/libsignal-service-java"
Uses libsignal-service-java (fork).

List on project’s wiki.
Some others: python-api, rest-api.

signald

"signald is a daemon that facilitates communication over Signal"
Uses libsignal-service-java (fork). Initially was forked from [signal-cli].
Uses unix sockets to communicate with the daemon, rather than dbus like [signal-cli].
Author’s post about starting the project.

List in project’s readme.
Includes: python and go binding, and a CLI.

golang-textsecure

"TextSecure library and command line test client for Go"
A rewrite of signal protocol and service libraries in Go.

[axolotl]

libsignal-protocol-rs
libsignal-service-rs
presage

"A high-level library to write a client for the Signal Messenger written in Rust."
See Notes on the unofficial rust libraries.

[whisperfish]
[gurk]
[signal-rs]

libsignal-service-dotnet

"An unofficial .NET Standard library for communicating via Signal."

[Signal-Windows]

axc

"Client lib for libsignal-protocol-c. Implements the necessary interfaces using gcrypt and SQLite."

Others

Projects that are no longer maintained or are of more specialized use. (click to show)
Library Notes

libsignal-node

"Signal protocol implementation for Node.js based on libsignal-protocol-javascript."

libsignal-service-javascript

"A javascript library for basic interaction with the Signal messaging service, adapted from [Signal-Desktop]."

libsignal-protocol-javascript (fork)

"This repository is forked from WhisperSystem’s own libsignal-protocol-javascript by @liliakai, modified to support node and the browser." "THIS MODULE IS DEPRICATED"

signal4j

"A facade to make using the libsignal-service easy"

janimo/textsecure

"TextSecure library and command line test client for Go"
Used as a basis for / continued in: [golang-textsecure].

Dedicated clients

End-user messenger interfaces.

Official

Client Notes Uses

Signal-Android

The official android client.

libsignal-service-java
libsignal-client

Signal-iOS

The official iOS client.

libsignal-client

Signal-Desktop

"Signal Desktop is an Electron application that links with Signal on Android or iOS."
See Notes on Signal-Desktop.

libsignal-client

Unofficial

Client Notes Uses

axolotl

"Axolotl is a complete cross-platform Signal client, compatible with the Ubuntu Phone and more."
"It is built upon the go textsecure package and a Vue frontend that runs in an electron/qml WebEngineView container."

[golang-textsecure]

whisperfish

"Signal client for Sailfish OS"
Features list.

[rust-libs]

Signal-Windows

"Unofficial Signal client for the Universal Windows Platform"

libsignal-service-dotnet

signal-rs

"A Rust-based signal app with a QML/Kirigami frontend"

presage

Unmaintained (click to show)

Pyre-Qt

"Pyre-Qt is a desktop GUI for signald, an unofficial Signal daemon."

[signald]

janimo/textsecure-qml

"TextSecure client for the Ubuntu Phone"
Continued in [axolotl].

[janimo-textsecure]

TUI / terminal clients

Client Notes Uses

scli

"scli is a simple terminal user interface for Signal. It uses [signal-cli] and urwid."

[signal-cli]

siggo

"A terminal gui for signal-cli, written in Go."

[signal-cli]

gurk

"Signal Messenger client for terminal"

presage

Unmaintained (click to show)

signal-curses

"Curses-backed terminal interface for Signal using signal-cli and npyscreen."

[signal-cli]

Bridges

Multi-protocol interfaces (aka "gateways") that can be used in many clients / front-ends / chat programs.

Bridge Notes Uses

mautrix-signal

"A Matrix-Signal puppeting bridge"
Features & roadmap

[signald]

matrix-signal-non-puppeting-bridge

"A matrix-signal bridge that doesn’t require your own a matrix Homeserver"

[signald]

Older projects (click to show)
Bridge Notes Uses

libpurple-signald

"A libpurple/Pidgin plugin for signald (signal, formerly textsecure)."

[signald]

purple-signal

"A libpurple/Pidgin plugin for signal (formerly textsecure). Using modified parts of [signal-cli]"

[signal-cli]

Bridge Notes Uses

slidge

"Pythonic XMPP gateways"

[signald]

spectrum2_signald

"An XMPP/signal gateway."
"WARNING: I have stopped working on this project and instead concentrated my efforts on [slidge]"

[signald]

Protocol only

The signal protocol is implemented in the official XMPP extension (OMEMO). It does not talk to the signal network.

IRC

Through BitlBee

BitlBee gateway allows to connect any pidgin / libpurple plugin to IRC. Bridging with signal is possible through [libpurple-signald]. One blog post with an example of such usage.

See also

SMS

Bridge Notes Uses

SMSGateway

"Forwards messages via SMS from and to instant messengers (Telegram, Signal,..) "

[signal-cli]

Plugins

Plugins for specific chat programs.

Plugin Notes Uses

signal-weechat

Signal plugin for WeeChat.

[signald]

Other software

Protocol only

Software that makes use of the signal protocol, but does not use signal network.

XMPP extension for axolotl protocol (OMEMO)

Official specs for 'communication between servers and "external" components over the Jabber network'

Matrix’s Olm/Megolm

"An implementation of the Double Ratchet cryptographic ratchet in C++"

Silence

"A fork of Signal with only SMS/MMS encryption."

MaladaN

"An end to end encrypted Messenger that uses the signal protocol over the I2P network"

Bots

Numerous. Some listed in

Notes

Notes on the official libraries

"Protocol" libraries implement only the signal protocol, including the double-ratchet encryption algorithm. They are more low-level than the "service" libraries, which have additional functionality to communicate with the signal servers.
See also: official documentation for the description of the protocol.

The official libraries are currently being consolidated in libsignal-client (see libsignal-client#152 and libsignal-client#392).

A discussion of the new libraries architecture with a comment from the main developer:

".. we went with a three-layer system for libsignal-client, where the “top” layer is the Java, Swift, and TypeScript interfaces; the “bottom” layer is the Rust implementation; and the “middle” layer defines “bridge” functions in Rust that can be called from the top layer."
https://community.signalusers.org/t/libsignal-client/28889/6

Notes on the unofficial rust libraries

Signal [libsignal-client] obsoleted our own libsignal-protocol-rs effort. We are working on getting rid of libsignal-protocol-rs and putting that library as “archived” soon.
https://community.signalusers.org/t/lets-join-forces-deduplicating-ios-android-node-code-into-libsignal-client/31667

"libsignal-protocol-rs was finished a few weeks before Signal launched their signal-client replacement."
https://github.com/Michael-F-Bryan/libsignal-service-rs/issues/72#issuecomment-817810483

Notes on Signal-Desktop

Official builds provided for: Windows, Mac and debian-based Linux (x64 processor).

"To use the Signal desktop app, Signal must first be installed on your phone."

Signal-Destkop ports

There are unofficial ports of Signal-Desktop to other platforms and packaging methods, that do not modify the original source code: