Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

AsamK/signal-cli

Productivity & Utilities

Command-line, JSON-RPC and D-Bus client for registering and messaging on Signal, aimed at servers and automation.

5,039
475
Java
GPL-3.0
11 years old

Overview

signal-cli is an unofficial command-line client for the Signal messenger that can register a number, verify it, link an existing account, send and receive messages, and run as a daemon exposing JSON-RPC and D-Bus interfaces. It is built on a patched libsignal-service-java client library extracted from the Signal-Android source. The documented primary use case is notifying server admins about events, though the client also serves users who want Signal without a smartphone.

Besides one-shot commands, the daemon exposes JSON-RPC with a small Rust example client and a D-Bus interface. The protocol expects incoming messages to be received regularly; the documentation says that keeps encryption efficient and delivers group, expiration-timer and other updates.

Install and first run

You need at least JRE 25 and the bundled native libsignal-client libraries; prebuilt binaries are bundled for x86_64 Linux (with recent enough glibc), Windows and macOS. Download the latest bundled archive (JVM or GraalVM native Linux build), or build it yourself with Gradle. Steps for other architectures are covered in the native-library wiki page. The README offers a system-wide Linux install recipe that resolves the latest release tag and extracts into /opt; run it only if that layout suits your machine.

With the binary on PATH, the minimal flow is:

  1. Link an existing account: signal-cli link, or register a new number: signal-cli -a ACCOUNT register, where ACCOUNT is the international phone number starting with +. Registering unregisters any existing client on that number.
  2. Verify with the code received by SMS or voice: signal-cli -a ACCOUNT verify CODE (add --pin PIN_CODE if the account has a PIN).
  3. Send: signal-cli -a ACCOUNT send -m "This is a message" RECIPIENT. Usernames are prefixed with u:. Message content can also come from stdin with --message-from-stdin.
  4. Receive: signal-cli -a ACCOUNT receive, or run the daemon to keep receiving continuously.

Landline numbers cannot receive SMS; the README describes a voice-call fallback using --voice after an initial SMS attempt fails, and points to a captcha registration page when challenged.

Constraints and caveats

This is an unofficial client; the project says it must be kept up to date because official clients expire after three months and the server may then make incompatible changes, so releases older than three months may work incorrectly. Registration is tied to a phone number able to receive SMS or calls, and registering from signal-cli displaces existing clients on that number. Credentials, including the password and cryptographic keys, are stored under the user's home directory in $XDG_DATA_HOME/signal-cli/data/ (or $HOME/.local/share/signal-cli/data/). The project is licensed GPL-3.0 and bundles code derived from Open Whisper Systems' libsignal-service-java.

HN discussion has raised whether non-official clients are permitted to connect to Signal servers. One commenter characterizes it as a terms-of-use restriction on the network service rather than a license restriction, and notes that signal-cli uses a fork of the Android client library. Treat this as a discussion point to verify against Signal's current terms, not as a statement from the project.

HotRepo's take

On the 2026-11-09 Java daily list, signal-cli recorded a No. 7 best position with 3 stars gained, showing that a longstanding utility still surfaces in the language ranking. The older HN threads (2017 and 2021) focused on the unusual role of a CLI client for a phone-centric messenger, with a 2021 commenter describing five years of use to keep Signal without a smartphone. These records indicate sustained niche interest rather than a recent surge; the single snapshot is not enough to call a trend.

HotRepo's take

language list, not the all-language daily ranking.

Project source and documentation

Written by AI from the project's README, updated . The project's own docs are the source of truth.

Hacker News

Command Line Interface for Signal
▲ 164 · 71 comments · June 29, 2021
Signal-cli: command-line and dbus interface to Signal
▲ 120 · 25 comments · February 11, 2017
Command line interface for Signal messenger
▲ 3 · 0 comments · August 30, 2016