signal-cli is a commandline interface for the [Signal messenger](https://signal.org/).
It supports registering, verifying, sending and receiving messages.
signal-cli uses a [patched libsignal-service-java](https://github.com/Turasa/libsignal-service-java),
-extracted from the [Signal-Android source code](https://github.com/signalapp/Signal-Android/tree/main/libsignal/service).
+extracted from the [Signal-Android source code](https://github.com/signalapp/Signal-Android/tree/main/libsignal-service).
For registering you need a phone number where you can receive SMS or incoming calls.
signal-cli is primarily intended to be used on servers to notify admins of important events.
and D-BUS interface ([man page](https://github.com/AsamK/signal-cli/blob/master/man/signal-cli-dbus.5.adoc)) .
For the JSON-RPC interface there's also a simple [example client](https://github.com/AsamK/signal-cli/tree/master/client), written in Rust.
+signal-cli needs to be kept up-to-date to keep up with Signal-Server changes.
+The official Signal clients expire after three months and then the Signal-Server can make incompatible changes.
+So signal-cli releases older than three months may not work correctly.
+
## Installation
You can [build signal-cli](#building) yourself or use
System requirements:
-- at least Java Runtime Environment (JRE) 17
+- at least Java Runtime Environment (JRE) 21
- native library: libsignal-client
The native libs are bundled for x86_64 Linux (with recent enough glibc), Windows and MacOS. For other
signal-cli -a ACCOUNT register
- You can register Signal using a landline number. In this case you can skip SMS verification process and jump directly
- to the voice call verification by adding the `--voice` switch at the end of above register command.
+ You can register Signal using a landline number. In this case, you need to follow the procedure below:
+ * Attempt a SMS verification process first (`signal-cli -a ACCOUNT register`)
+ * You will get an error `400 (InvalidTransportModeException)`, this is normal
+ * Wait 60 seconds
+ * Attempt a voice call verification by adding the `--voice` switch and wait for the call:
+
+ ```sh
+ signal-cli -a ACCOUNT register --voice
+ ```
Registering may require solving a CAPTCHA
challenge: [Registration with captcha](https://github.com/AsamK/signal-cli/wiki/Registration-with-captcha)
signal-cli -a ACCOUNT send -m "This is a message" RECIPIENT
```
+* Send a message to a username, usernames need to be prefixed with `u:`
+
+ ```sh
+ signal-cli -a ACCOUNT send -m "This is a message" u:USERNAME.000
+ ```
+
* Pipe the message content from another process.
uname -a | signal-cli -a ACCOUNT send --message-from-stdin RECIPIENT
It is possible to build a native binary with [GraalVM](https://www.graalvm.org). This is still experimental and will not
work in all situations.
-1. [Install GraalVM and setup the enviroment](https://www.graalvm.org/docs/getting-started/#install-graalvm)
-2. [Install prerequisites](https://www.graalvm.org/reference-manual/native-image/#prerequisites)
-3. Execute Gradle:
+1. [Install GraalVM and setup the environment](https://www.graalvm.org/docs/getting-started/#install-graalvm)
+2. Execute Gradle:
./gradlew nativeCompile