Attention: Now requires libsignal-client version 0.44.0
- Support for reading contact nickname and notes
- Add
--internal
and--detailed
parameters tolistContacts
command
- Fix issue with sending messages when a new session is created
Attention: Now requires libsignal-client version 0.40.1
- Add
--username
parameter togetUserStatus
command
- Fixed setting and retrieving PIN after server changes
- Add
--reregister
parameter to force registration of an already registered account
- Fixed rare issue with duplicate PNIs during migration
- Show information when requesting voice verification without prior SMS verification
- Username can now be set with an explicit discriminator (e.g. testname.000)
- Improve behavior when PNI prekeys upload fails
- Improve
submitRateLimitChallenge
error message if captcha is rejected by server - Only retry messages after an identity was trusted
- Default number sharing to NOBODY, to match the official apps behavior.
Attention: Now requires Java 21 and libsignal-client version 0.39.2
- Sending to the self number (+XXXX) now behaves the same as the
--note-to-self
parameter. To get the previous behavior with notification, the--notify-self
parameter can be added.
- New
--hidden
parameter forremoveContact
command - New
--notify-self
parameter forsend
command, for sending a non-sync message when self is part of the recipients or groups. - New
--unrestricted-unidentified-sender
,--discoverable-by-number
,--number-sharing
,--username
and--delete-username
parameter forupdateAccount
command - New
--bus-name
parameter fordaemon
command to use another D-Bus bus name - New
getAvatar
andgetSticker
commands to get avatar and sticker images - New
sendMessageRequestResponse
command to accept/delete message requests
- Improve issue with stale prekeys and receiving messages to PNI address
- Better shutdown handling after Ctrl+C and SIGTERM
- Implemented full remote storage sync. Provides better contact and settings sync for linked devices.
listContacts
doesn't list unregistered users anymore
- Update user agent
Attention: Now requires native libsignal-client version 0.36.1
- Fix linking to an existing account
- Fix linking to an existing account
- Fix migration from old account data
- Fix issue with joining groups by group link for new accounts
- Fix receiving address of shared contact
- Fix receiving sync edit messages in groups
- Create safety numbers based on ACI instead of phone number
- Prevent ConcurrentModificationException
- Update captcha help text
- Added
startChangeNumber
andfinishChangeNumber
commands to switch to another phone number - Added
--quote-attachment
parameter tosend
command - Added support for scannable safety numbers based on serviceId
- Added
EditMessageReceived
signal for D-Bus interface - Added new exit code
5
for rate limit failures - Added full CDSI refresh to get current ACI/PNIs for known numbers regularly
- Correctly respond with delivery receipts for edit messages
- JSON-RPC requests are now executed in parallel.
Clients should make sure to use the
id
field to get the correct response for a request.
Attention: Now requires native libsignal-client version 0.32.1
- Added
--receive-mode
parameter forjsonRpc
command - Add
libsignal_client_path
build property to override libsignal-client jar file
jsonRpc
command now supports multi-account mode including registering and linking
- New
addStickerPack
command
- Fixed some issues with upgrading from older accounts
- Reverted receive notification in JSON-RPC to old format, only explicit subscriptions should use the new format
Attention: Now requires native libsignal-client version 0.30.0
- Adapt receive subscription notification in JSON-RPC to have payload in result field
- Before:
{"jsonrpc":"2.0","method":"receive","params":{"envelope":{ ... },"account":"+XXX","subscription":0}}
- After:
{"jsonrpc":"2.0","method":"receive","params":{"subscription":0,"result":{"envelope":{ ... },"account":"+XXX"}}}
- Before:
- Manage identities via DBus (Thanks @bublath)
- Added support for SVR2 PINs
- Fixed finishLink/receive/register/verify commands for JSON-RPC
- Update to the latest libsignal to fix various issues
Attention: Now requires native libsignal-client version 0.25.0
- New
--text-style
and--quote-text-style
flags forsend
command
- Fixed migration of older account files
- Fix deleting old unregistered recipient
Attention: Now requires native libsignal-client version 0.23.1
- Support for receiving and sending edit messages with
--edit-timestamp
- Fix build with Java 20
- Workaround issue with linking to newer app versions
- Added file attachment attributes to JSON output (Thanks @signals-from-outer-space)
- Scrub E164 number from dbus paths
- Fix sending large text messages to multiple recipient
- Fix deleting old group in dbus mode
- Fix issue with unknown identity serviceId
- Relaxed Content-Type check in http daemon mode (Thanks @cedb)
Attention: Now requires native libsignal-client version 0.22.0
- Fix issue with missing pni identity key
- Fix graalvm sqlite issue (Thanks @Marvin A. Ruder)
- Fix issue with forgetting recipient
- Allow JSON-RPC commands without account param if only one account exists
- Allow using data URIs for updateGroup/updateProfile
- New alive check endpoint for http daemon (Thanks @ced-b)
- Registration with voice verification now works if no system locale is set
- Fixed retrieving attachments in JSON RPC mode (Thanks @ced-b)
- Fix updating from older signal-cli version
Attention: Now requires native libsignal-client version 0.21.1
- Add
--http
flag todaemon
command to provide a JSON-RPC http endpoint (/api/v1/rpc
). (Thanks @ced-b) - The
receive
method is now also available in JSON-RPC daemon mode, for polling new messages. - Add
getAttachment
command to get attachment file base64 encoded. (Thanks @ced-b) - Add
--disable-send-log
to disable the message send log. - Add
--story
tosendReaction
command, to react to stories. - Add
--story-timestamp
and--story-author
tosend
command, to reply to stories. - Add
--max-messages
toreceive
command, to only receive a certain number of messages.
- Send long text messages as attachment instead. This matches the behavior of the official clients.
- Store attachments with a file extension, for common file types.
- Approve/Refuse group join requests, using same interface as adding/removing members
- Add --ignore-stories flag to prevent receiving story messages
- Fixed issue with receiving messages that can't be decrypted
- Do not discard incoming group join messages
- Add code to receive new PNI after change number
- Fix sending messages to groups (in non-daemon mode)
- Fix updating from older signal-cli version
- Fix issue with handling decryption error message
- Fix graalvm native build (Thanks @bentolor)
- Update user agent version to work with new Signal-Server check
- Fix sending group messages
- Fix store migration issue on Windows
- Fix building fat jars
Attention: Now requires native libsignal-client version 0.20.0
- Changed meaning of
-v
flag from--version
to--verbose
. So now extended logging can be achieved with-vv
. - Remove deprecated fallback to reading from stdin if no message body is given.
To read a message from stdin, use the
--message-from-stdin
flag.
- Migrate PIN to new KBS enclave when Signal updates it
- Add
--scrub-log
flag to remove possibly sensitive information from the log - Add
sendPaymentNotification
dbus method
- Fix an issue where messages were sent without sender phone number
- Store data except base account data in sqlite database
- Use new CDSI for contact discovery in compat mode
Attention: Now requires native libsignal-client version 0.19.3
- Output content of received story messages
Attention: Now requires native libsignal-client version 0.18.1
- Fix setPin/removePin commands which broke due to server side changes
- Workaround GraalVM 22.2.0 issue with daemon connection
- updateAccount command checks self number and PNI after updating account attributes
- Fixed small issue with syncing contacts from storage
- Fixed issue with opening older account files
- Attachments can now be given as data: URIs with base64 data instead of just file paths (Thanks @KevinRoebert)
version
command can now be used on the commandline, in addition to the--version
flag. In the next version the current short form-v
will change its meaning to--verbose
!
- An account can now be registered on both LIVE and STAGING environment in the same config directory.
- Logging output for registering has been extended.
- Added profile information to
listContacts
command output - Added filter flags for
listContacts
command - New
sendPaymentNotification
command to send payment receipt blobs - New
--given-name
and--family-name
parameters forupdateContact
command - Implement sending link previews with
--preview-url
,--preview-title
parameters for thesend
command - New
--send-read-receipts
parameter forreceive
anddaemon
commands for automatically marking received messages as read
- Issue with endless growing
pre-keys-pni
data directory
Attention: Now requires native libsignal-client version 0.17
- Check if account is used on the environment it was registered (live or staging)
- New command
deleteLocalAccountData
to delete all local data of an unregistered account - New parameter
-g
forlistGroups
command to filter for specific groups
- Fix deleting a recipient which has no uuid
- Show warning when sending a message and no profile name has been set. (A profile name may become mandatory in the future)
- After blocking a contact/group the profile key is now rotated
- Only update profile keys from authoritative group changes
Attention: Now requires native libsignal-client version 0.15
- New
--ban
,--unban
flags forupdateGroup
command to ban users from joining by group link
- Fix plain text output of blocked group ids
- Fix error output in case of rate limiting
- Fix error when creating a group with no members
- Fix adding recent Signal-Desktop versions as linked devices
- Crash in json output when receiving message from untrusted identity
- Fix multi account commands for newly created accounts
- Linking to current apps (which currently don't include a PNI identity yet)
- Show better error message when --target-timestamp is missing for sendReceipt
- Implement support for change number as linked device
- Add
--message-from-stdin
flag for send command. The current behavior of reading from stdin if the-m
flag is not given, will be removed in a future version.
- Align receive timeout behavior for dbus client with cli and JSON-RPC. Timeout is reset by every incoming message
- Renamed
error
field in json receive response toexception
- Prevent a stale jsonrpc connection from interfering with message receiving
- MessageSendLog to cache sent message for 24h. For resending messages in case the recipient fails to decrypt the message.
- New global
--log-file
parameter to write logs to a separate file. (--verbose
can be used to increase the log level)
- Better subscription handling for JSON-RPC
subscribeReceive
command
- Output receipt data for unsealed sender receipts again
- Fix sending message resend requests to devices that happen to have the same deviceId
- Archive old sessions/sender keys when a recipient's identity key has changed
- Fix profile fetch with an invalid LANG variable
- Send group messages with sender keys (more efficient for larger groups)
- New command
listStickerPacks
to display all known sticker packs - New flag
--sticker
forsend
command to send stickers
- Improve exit code for message sending. Exit with 0 status code if the message was sent successfully to at least one recipient, otherwise exit with status code 2 or 4 (for untrusted).
- Download profiles in parallel for improved performance
--verbose
flag can be specified multiple times for additional log output- Enable more security options for systemd service file
- Rename sandbox to staging environment, to match the upstream name.
- The first incoming message after registration can now always be decrypted successfully
- Ignore decryption failures from blocked contacts and don't send a resend request.
Attention: Now requires Java 17 and libsignal-client version 0.11
- The daemon command now provides a JSON-RPC based socket interface (
--socket
and--tcp
) - New daemon command flag
--receive-mode
to configure when messages are received - New daemon command flag
--no-receive-stdout
to prevent outputting messages on stdout - New command
listAccounts
that lists all registered local accounts - New command
removeContact
- Extend
send
command to allow sending mentions (--mention
) and quotes (--quote-timestamp
,--quote-author
,--quote-message
,--quote-mention
) - New dbus methods sendGroupTying, unregister, deleteAccount
- New dbus events MessageReceivedV2, ReceiptReceivedV2, SyncMessageReceivedV2 that provide an extras parameter with additional message info as a key/value map
- New dbus method sendViewedReceipt (Thanks @John Freed)
- New dbus object Configuration to read and update configuration values (Thanks @John Freed)
- Payment info in json receive output (Thanks @technillogue)
-c
alias for--config
(Thanks @technillogue)
- libzkgroup dependency is no longer required
- Renamed
-u
and--username
flags to-a
and--account
to prevent confusion with upcoming Signal usernames. The old flags are also still supported for now. - Respect phone number sharing mode and unlisted state set by primary device
- Adapt register command to reactivate account if possible.
- dbus-java now uses Java 16 native unix sockets, which should provide better cross-platform compatibility
- If sending to a recipient fails (e.g. unregistered) signal-cli now exits with a success exit code and prints additional information about the failure.
- Registering an existing unregistered account now works reliably in daemon mode
- Fixed an issue with loading some old config files without UUID
- More reliable send behavior if some recipients are unregistered
- dbus
listNumbers
method works again
- Improved provisioning error handling if the last steps fail
- Adapt behavior of receive command as dbus client to match normal mode
- Update captcha url for proof required handling
Attention: Now requires native libzkgroup version 0.8
- New command
updateConfiguration
which allows setting configurations for linked devices - Improved dbus daemon for group handling, groups are now exported as separate dbus objects
- Linked devices can be managed via dbus
- New dbus methods sendTyping and sendReadReceipt (Thanks @JtheSaw)
- New dbus methods submitRateLimitChallenge, isRegistered, listDevices, setExpirationTimer, sendContacts, sendSyncRequest, uploadStickerPack, setPin and removePin (Thanks @John Freed)
- New dbus method getSelfNumber
- Do not send message resend request to own device
- Allow message from pending member to accept group invitations
- Fix issue which could cause signal-cli to repeatedly send the same delivery receipts
- Reconnect websocket after connection loss
- Use new provisioning URL
sgnl://linkdevice
instead oftsdevice:/
- The gradle command to build a graalvm native image is now
./gradlew nativeCompile
Attention: Now requires native libsignal-client version 0.9
- Removed deprecated
--json
parameter, use global parameter--output=json
instead - Json output format of
listGroups
command changed: Members are now arrays of{"number":"...","uuid":"..."}
objects instead of arrays of strings. - Removed deprecated fallback data paths, only
$XDG_DATA_HOME/signal-cli
is used now For those still using the old paths ($HOME/.config/signal
,$HOME/.config/textsecure
) you need to move those to the new location.
- New global parameter
--trust-new-identities=always
to allow trusting any new identity key without verification - New parameter
--device-name
forupdateAccount
command to change the device name (also works for the primary device) - New SignalControl DBus interface, to register/verify/link new accounts
- New
jsonRpc
command that provides a JSON-RPC based API on stdout/stdin - Support for announcement groups
- New parameter
--set-permission-send-messages
forupdateGroup
to create an announcement group - New
sendReceipt
command to send read and viewed receipts - Support for receiving sender key messages, mobile apps can now send messages more efficiently with server-side fan-out to groups with signal-cli members.
- Support for reading data from remote Signal storage. Now v2 groups will be shown after linking a new device.
- New
submitRateLimitChallenge
command that can be used to lift some rate-limits by solving a captcha
- Store identity key correctly when sending a message after a recipient has changed keys
- Source name is included in JSON receive output (Thanks @technillogue)
- Allow updateContact command to only set expiration timer without requiring a name parameter
- Incorrect error handling in register command
Attention: Now requires native libsignal-client version 0.8.1
- New parameters for
updateGroup
command for group v2 features:--description
,--remove-member
,--admin
,--remove-admin
,--reset-link
,--link
,--set-permission-add-member
,--set-permission-edit-details
,--expiration
- New
--admin
parameter forquitGroup
to set an admin before leaving the group - New
--delete
parameter forquitGroup
, to delete the local group data - New 'sendTyping' command to send typing indicators
- Fixed issue that prevented registration with invalid locales
- Prevent last admin of a group from leaving the group
- All commands now show a short description with
--help
- Now a hint is shown if messages aren't received regularly
- Group edit conflicts are now resolved automatically
- Upgrading from account files with older profiles
- Building native image with graalvm
- A manual page for the DBus interface (Thanks @bublath, @exquo)
- Remote message delete command (Thanks @adaptivegarage)
- sendSyncRequest command to request complete contact/group list from primary device
- New
--delete-account
argument for unregister (Dangerous) - New
--family-name
argument for updateProfile
- Sending reaction to group (Thanks @adaptivegarage)
- Displaying of address for messages from untrusted identities
- Handling of recipient number or uuid changes (e.g. after account deletions)
- Only respond to sync requests from primary device
- Display of quit group messages
- Unlimited strength crypto is now enabled automatically for JREs that require it (Thanks @i-infra)
- Only one identity key is stored per recipient and updated from profile (to match app behavior)
- updateContact, block and unblock are now disabled for linked devices
- After registering an empty profile is created so new groups can be joined immediately
- If message decryption fails due to a broken session, the session is automatically renewed
- Rework account storage for better reliability
- Improved device linking flow
- Allow relinking existing account
- Encrypt/Decrypt device names
- New dbus commands: updateProfile, listNumbers, getContactNumber, quitGroup, isContactBlocked, isGroupBlocked, isMember, joinGroup (Thanks @bublath)
- Additional output for json format: shared contacts (Thanks @Atomic-Bean)
- Improved plain text output to be more consistent and synced messages are now indented
- Issue with broken sessions with linked devices
- Behavior of
trust
command improved, when trusting a new identity key all other known keys for the same number are removed.
Attention: For all signal protocol functionality an additional native library is now required: libsignal-client. See https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal for more information.
- Experimental support for building a GraalVM native image
- Support for setting profile about text and emoji
- Incorrect error message when removing a non-existent profile avatar
- Notify linked devices after profile has been updated
- After registering a new account, receiving messages didn't work You may have to register and verify again to fix the issue.
- Creating v1 groups works again
getUserStatus
command to check if a user is registered on Signal (Thanks @Atomic-Bean)- Global
--verbose
flag to increase log level - Global
--output=json
flag, currently supported byreceive
,daemon
,getUserStatus
,listGroups
--note-to-self
flag forsend
command to send a note to linked devices- More info for received messages in json output: stickers, viewOnce, typing, remoteDelete
- signal-cli can now be used without the username
-u
flag For daemon command all local users will be exposed as dbus objects. If only one local user exists, all other commands will use that user, otherwise a user has to be specified. - Messages sent to self number will be sent as normal Signal messages again, to
send a sync message, use the new
--note-to-self
flag - Ignore messages with group context sent by non group member
- Profile key is sent along with all direct messages
- In json output unnecessary fields that are null are now omitted
- Disable registration lock before removing the PIN
- Fix PIN hash version to match the official clients. If you had previously set a PIN you need to set it again to be able to unlock the registration lock later.
- Issue with saving account file after linking
- Implement new registration lock PIN with
setPin
andremovePin
(with KBS) - Include quotes, mentions and reactions in json output (Thanks @Atomic-Bean)
- Retrieve avatars for v2 groups
- Download attachment thumbnail for quoted attachments
- Accept group invitation with
updateGroup -g GROUP_ID
- Decline group invitation with
quitGroup -g GROUP_ID
- Join group via invitation link
joinGroup --uri https://signal.group/#...
- Include group ids for v2 groups in json output
Support for groups of new type/v2
- Sending and receiving
- Updating name, avatar and adding members with
updateGroup
- Quit group and decline invitation with
quitGroup
- In the
listGroups
output v2 groups can be recognized by the longer groupId
Attention: For the new group support to work the native libzkgroup library is required. See https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal for more information.
- Rare NullPointerException when receiving messages
- Show additional message content (view once, remote delete, mention, …) for received messages
--captcha
parameter forregister
command, required for some IP ranges
- Profile keys are now stored separately from contact list
- Receipts from normal and unidentified messages now have the same format in json output
- Issue where some messages were sent with an old counter index
- Fix issue with receiving message reactions
- Fix issue when retrieving profiles
- Workaround issue with libzkgroup on platforms other than linux x86_64
- Minor bug fixes and improvements
- dbus functionality now works on FreeBSD
- signal-cli now requires Java 11
Warning: this version only works on Linux x86_64, will be fixed in 0.6.10
- Switch to hypfvieh dbus-java, which doesn't require a native library anymore (drops requirement of libmatthew-unix-java)
- Bugfixes for messages with uuids
- Add
--expiration
parameter toupdateContact
command to set expiration timer
- Send command now returns the timestamp of the sent message
- DBus daemon: Publish received sync message to SyncMessageReceived signal
- Fix issue with resolving e164/uuid addresses for sessions
- Fix pack key length for sticker upload
- Added listContacts command
- Added block/unblock commands to block contacts and groups
- Added uploadStickerPack command to upload sticker packs (see man page for more details)
- Full support for sending and receiving unidentified sender messages
- Support for message reactions with emojis
- Internal: support recipients with uuids
Supports receiving messages sent with unidentified sender
- Fix rounding error for attachment ids in json output
- Add additional info to json output
- Add commands to update profile name and avatar
- Add command to update contact names
Bug fixes and small improvements
- Fixes sending of group messages
- Added getGroupIds dbus command
- Use "NativePRNG" pseudo random number generator, if available
- Switch default data path:
$XDG_DATA_HOME/signal-cli
($HOME/.local/share/signal-cli
) Existing data paths will continue to work (used as fallback)
- Simple json output
- dbus signal for receiving messages
- Registration lock PIN
- Output quoted message
- new listGroups command
- Support for attachments with file names
- Support for complete contacts sync
- Support for contact verification sync
- DBus interface:
- Get/Set group info
- Get/Set contact info
- fix receiving messages on linked devices
- add unregister command
- Fix linking of new devices
- New commandline parameter for receive: --ignore-attachments
- Updated dependencies
- Add support for group info requests
- Improve closing of file streams
- Support new safety numbers (https://whispersystems.org/blog/safety-number-updates/)
- Add a man page
- Support sending disappearing messages, if the recipient has activated it
- Check if a number is registered on Signal, before adding it to a group
- Prevent sending to groups that the user has quit
- Commands to trust new identity keys (see README)
- Messages from untrusted identities are stored on disk and decrypted when the user trusts the identity
- Timestamps shown in ISO 8601 format
- Fix issue with creating groups
- Lock config file to prevent parallel access by multiple instances of signal-cli
- Improve return codes, always return non-zero code, when sending failed
- Linking to Signal-Desktop and Signal-Android is now possible (Provisioning)
- Added a contact store, mainly for syncing contacts with linked devices (editing not yet possible via cli)
- Avatars for groups and contacts are now stored (new folder "avatars" in the config path)
- Fix running with Oracle JRE 8
- Fix registering
- Fix unicode warning when compiling with non utf8 locale
- Renamed textsecure-cli to signal-cli, following the rename of libtextsecure-java to libsignal-service-java
- The experimental dbus interface was also renamed to org.asamk.Signal
- Upload new prekeys to the server, when there are less than 20 left, prekeys are needed to create new sessions
- Improve dbus service
- New command line argument --config to specify config directory
Added an experimental dbus interface, for sending and receiving messages (The interface is unstable and may change with future releases).
This release works with Java 7 and 8.
Add support for creating/updating groups and sending to them
- Add receive timeout commandline parameter
- Show message group info
First release