-signal-cli is a commandline interface for [libsignal-service-java](https://github.com/WhisperSystems/libsignal-service-java). It supports registering, verifying, sending and receiving messages. To be able to receiving messages signal-cli uses a [patched libsignal-service-java](https://github.com/AsamK/libsignal-service-java), because libsignal-service-java [does not yet support registering for the websocket support](https://github.com/WhisperSystems/libsignal-service-java/pull/5) nor [provisioning as a slave device](https://github.com/WhisperSystems/libsignal-service-java/pull/21). For registering you need a phone number where you can receive SMS or incoming calls.
-It is primarily intended to be used on servers to notify admins of important events. For this use-case, it has a dbus interface, that can be used to send messages from any programming language that has dbus bindings.
-
-## Usage
-
-usage: signal-cli [-h] [-v] [--config CONFIG] [-u USERNAME | --dbus | --dbus-system] {link,addDevice,listDevices,removeDevice,register,verify,send,quitGroup,updateGroup,receive,daemon} ...
-
-* Register a number (with SMS verification)
-
- signal-cli -u USERNAME register
-
-* Register a number (with voice verification)
-
- signal-cli -u USERNAME register -v
-
-* Verify the number using the code received via SMS or voice
-
- signal-cli -u USERNAME verify CODE
-
-* Send a message to one or more recipients
-
- signal-cli -u USERNAME send -m "This is a message" [RECIPIENT [RECIPIENT ...]] [-a [ATTACHMENT [ATTACHMENT ...]]]
-
-* Pipe the message content from another process.
-
- uname -a | signal-cli -u USERNAME send [RECIPIENT [RECIPIENT ...]]
-
-* Receive messages
-
- signal-cli -u USERNAME receive
-
-* Groups
-
- * Create a group
-
- signal-cli -u USERNAME updateGroup -n "Group name" -m [MEMBER [MEMBER ...]]
+signal-cli is a commandline interface
+for [libsignal-service-java](https://github.com/WhisperSystems/libsignal-service-java). It supports registering,
+verifying, sending and receiving messages. To be able to link to an existing Signal-Android/signal-cli instance,
+signal-cli uses a [patched libsignal-service-java](https://github.com/AsamK/libsignal-service-java), because
+libsignal-service-java does not yet
+support [provisioning as a linked device](https://github.com/WhisperSystems/libsignal-service-java/pull/21). 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. For this use-case, it has a dbus
+interface ([man page](https://github.com/AsamK/signal-cli/blob/master/man/signal-cli-dbus.5.adoc)), that can be used to
+send messages from any programming language that has dbus bindings. It also has a JSON-RPC based interface, see
+the [documentation](https://github.com/AsamK/signal-cli/wiki/JSON-RPC-service) for more information.
+
+## Installation
+
+You can [build signal-cli](#building) yourself, or use
+the [provided binary files](https://github.com/AsamK/signal-cli/releases/latest), which should work on Linux, macOS and
+Windows. For Arch Linux there is also a [package in AUR](https://aur.archlinux.org/packages/signal-cli/) and there is
+a [FreeBSD port](https://www.freshports.org/net-im/signal-cli) available as well.
+
+System requirements:
+
+- at least Java Runtime Environment (JRE) 17
+- native library: libsignal-client
+
+ The native libs are bundled for x86_64 Linux (with recent enough glibc, see #643), Windows and MacOS. For other systems/architectures
+ see: [Provide native lib for libsignal](https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal)
+
+### Install system-wide on Linux
+
+See [latest version](https://github.com/AsamK/signal-cli/releases).
+
+```sh
+export VERSION=<latest version, format "x.y.z">
+wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}"-Linux.tar.gz
+sudo tar xf signal-cli-"${VERSION}"-Linux.tar.gz -C /opt
+sudo ln -sf /opt/signal-cli-"${VERSION}"/bin/signal-cli /usr/local/bin/
+```