signal-cli is a commandline and daemon interface for the Signal messenger that provides unofficial access to Signal's messaging capabilities through multiple protocols.
The tool solves the problem of integrating Signal messaging into server environments and automation workflows. It works by using a patched version of libsignal-service-java extracted from Signal-Android source code, allowing registration with a phone number via SMS or voice verification, and supporting message sending and receiving. The tool operates in multiple modes: as a direct commandline interface, as a JSON-RPC daemon for programmatic access, and as a D-BUS service for system integration. A Rust example client is provided for the JSON-RPC interface.
The tool is primarily intended for server-side notification use cases where administrators need to send alerts via Signal. It supports linking to existing Signal accounts or registering new ones. Developers should be aware that signal-cli requires regular updates to maintain compatibility with Signal servers, as the official Signal clients expire after three months and the server can make incompatible changes after that point. The tool requires Java Runtime Environment 25 or later and the bundled native libsignal-client library. Binary distributions are available for Linux, macOS, and Windows, with community-provided Docker images and Linux packages also available.
Development activity shows consistent maintenance focused on compatibility. The project regularly releases updates to track Signal server changes and maintain client functionality. The maintainer actively addresses compatibility issues and provides documentation through man pages and wiki resources. The tool receives updates driven by the requirement to stay synchronized with Signal protocol changes rather than by feature expansion.