- Fixed syncing server-side storage after Signal login.
- Added support for new SSRE2 method of receiving the server-side storage key.
- Updated libsignal to v0.64.1.
- Updated Docker image to Alpine 3.21.
- Updated libsignal to v0.62.0.
- Note for bridges running in systemd: the new version of libsignal may be
incompatible with the
MemoryDenyWriteExecute=true
option (see #750).
- Note for bridges running in systemd: the new version of libsignal may be
incompatible with the
- Added basic support for Signal's new file upload protocol.
- Updated to libsignal v0.58.3.
- Fixed spurious decryption error notices for Signal messages when the websocket reconnects and receives old already-bridged messages.
- Fixed signalmeow not respecting account settings for choosing sender certificate.
- Fixed bugs in storage service decryption, which could cause issues with missing contact names among other things.
- Fixed call start notices only working once per direct chat.
- Updated to libsignal v0.57.1.
- Dropped support for unauthenticated media on Matrix.
- Added support for Matrix->Signal power level bridging (thanks to @maltee1 in #531).
- Changed voice message conversion to convert to aac instead of m4a, because Signal iOS doesn't appear to like ffmpeg's m4a files.
- Fixed outgoing sync messages not including disappearing start timestamp, which would cause native clients to disappear messages at the wrong time.
- Re-added notices about decryption errors.
- Bumped minimum Go version to 1.22.
- Updated to libsignal v0.55.0.
- Rewrote bridge using bridgev2 architecture.
- It is recommended to check the config file after upgrading. If you have prevented the bridge from writing to the config, you should update it manually.
- Thanks to @maltee1 for reimplementing Matrix -> Signal membership handling in the rewrite.
- If you are still somehow using a pre-v0.5.0 versions, upgrading to v0.6.3 is required before upgrading to v0.7.0 or higher.
- Updated to libsignal v0.52.0.
- Fixed bridge losing track of user phone numbers in some cases.
- Fixed edge cases in handling new outgoing DMs started from other devices.
- Added
sync groups
command (thanks to @maltee1 in #490). - Fixed typo in location bridging example config (thanks to @AndrewFerr in #516).
- Updated to libsignal v0.51.0.
- Fixed voice messages not being rendered correctly in Element X.
- Fixed contact avatars not being bridged correctly even when enabled in the bridge config.
- Implemented connector for the upcoming bridgev2 architecture.
- Added support for bridging location messages from Matrix to Signal
(thanks to @maltee1 in #504).
- Note that Signal doesn't support real location messages, so they're just bridged as links. The link template is configurable.
- Fixed bridging long text messages from Signal (thanks to @maltee1 in #506).
- Improved handling of ping timeouts in Signal websocket.
- Updated to libsignal v0.44.0.
- Refactored bridge to support Signal's new phone number identifier (PNI)
system in order to fix starting new chats and receiving messages from new
users.
- When starting a chat with a user you haven't talked to before, the portal room will not have a ghost user for the recipient until they accept the message request.
- Added support for syncing existing groups on login instead of having to wait for new messages.
- Added notices if decrypting incoming message from Signal fails.
- Added bridging of group metadata from Matrix to Signal (thanks to @maltee1 in #461).
- Added command to create new Signal group for Matrix room (thanks to @maltee1 in #461 and #491).
- Added commands for inviting users to Signal groups by phone number (thanks to @maltee1 in #495).
- Improved handling of missed Signal group metadata changes (thanks to @maltee1 in #488).
- Updated to libsignal v0.41.0.
- Fixed sending messages to groups.
- Fixed some cases of ghost user info changing repeatedly on multi-user instances.
- Fixed migrating SQLite databases from Python version.
- Rewrote bridge in Go.
- To migrate the bridge, simply upgrade in-place. The database and config will be migrated automatically, although some parts of the config aren't migrated (e.g. log config). If you prevented the bridge from writing to the config file, you'll have to temporarily allow it or update it yourself.
- The bridge doesn't use signald anymore, all users will have to re-link the bridge. signald can be deleted after upgrading.
- Primary device mode is no longer supported, signal-cli is recommended if you don't want to use the official Signal mobile apps.
- Some old features are not yet supported (e.g. group management features).
- Renamed main branch from
master
tomain
. - Added support for edits and message formatting.
Target signald version: v0.23.2
- Added option to not set name/avatar for DM rooms even if the room is encrypted.
- Added options to automatically ratchet/delete megolm sessions to minimize access to old messages.
- Added command to request group/contact sync from primary device.
- Added error notices if incoming attachments are dropped.
- Fixed bugs with creating groups.
- Fixed handling changes to disappearing message timer in groups.
Changes by @maltee1
- Added bridging of group join requests on Signal to knocks on Matrix (#275).
- Added bridging of banned users from Signal to Matrix (#275).
- Added admin command to force logout other Matrix users from the bridge (#359).
- Added
submit-challenge
command to submit captcha codes when encountering ratelimits on sending messages (#320). - Added invite command for inviting Signal users to a group by phone number (#285).
- Added support for bridging Matrix invites to Signal via relay user (#285).
- Added automatic group creation when inviting multiple Signal ghosts to a non-DM room (#294).
- Fixed ghost user getting kicked from Matrix room when trying to invite a user who's already in the group on Signal (#345).
- Fixed bridging power levels from Signal for users who are logged into the bridge, but don't have double puppeting enabled (#333).
Target signald version: v0.23.0
- Fixed database schema upgrade for users who used SQLite before it was stabilized in v0.4.1.
- Fixed error in commands that use phone numbers (like
!signal pm
). - Fixed updating private chat portal metadata when Signal user info changes.
- Updated Docker image to Alpine 3.17.
Target signald version: v0.23.0
- Dropped support for phone numbers as Signal user identifiers.
- Dropped support for v1 groups.
- Promoted SQLite support to non-experimental level.
- Fixed call notices not having a plaintext
body
field. - "Implicit" messages from Signal (things like read receipts) that fail to decrypt will no longer send a notice to the Matrix room.
- The docker image now has an option to bypass the startup script by setting
the
MAUTRIX_DIRECT_STARTUP
environment variable. Additionally, it will refuse to run as a non-root user if that variable is not set (and print an error message suggesting to either set the variable or use a custom command).
Target signald version: v0.21.1
N.B. This release requires a homeserver with Matrix v1.1 support, which bumps up the minimum homeserver versions to Synapse 1.54 and Dendrite 0.8.7. Minimum Conduit version remains at 0.4.0.
- Added provisioning API for checking if a phone number is registered on Signal
- Added admin command for linking to an existing account in signald.
- Added Matrix -> Signal bridging for invites, kicks, bans and unbans (thanks to @maltee1 in #246 and #257).
- Added command to create Signal group for existing Matrix room (thanks to @maltee1 in #250).
- Added Matrix -> Signal power level change bridging (thanks to @maltee1 in #260 and #263).
- Added join rule bridging in both directions (thanks to @maltee1 in #268).
- Added Matrix -> Signal bridging of location messages
(thanks to @maltee1 in #287).
- Since Signal doesn't have actual location messages, they're just bridged as map links. The link template is configurable.
- Added command to link devices when the bridge is the primary device (thanks to @Craeckie in #221).
- Added command to bridge existing Matrix rooms to existing Signal groups (thanks to @MaximilianGaedig in #288).
- Added config option to auto-enable relay mode when a specific user is invited (thanks to @maltee1 in #293).
- Added options to make encryption more secure.
- The
encryption
->verification_levels
config options can be used to make the bridge require encrypted messages to come from cross-signed devices, with trust-on-first-use validation of the cross-signing master key. - The
encryption
->require
option can be used to make the bridge ignore any unencrypted messages. - Key rotation settings can be configured with the
encryption
->rotation
config.
- The
- Improved/fixed handling of disappearing message timer changes.
- Improved handling profile/contact names and prevented them from being downgraded (switching from profile name to contact name or phone number).
- Updated contact list provisioning API to not block if signald needs to update profiles.
- Trying to start a direct chat with a non-existent phone number will now reply with a proper error message instead of throwing an exception (thanks to @maltee1 in #265).
- Syncing chat members will no longer be interrupted if one of the member profiles is unavailable (thanks to @maltee1 in #270).
- Group metadata changes are now bridged based on the event itself rather than resyncing the whole group, which means changes will use the correct ghost user instead of always using the bridge bot (thanks to @maltee1 in #283).
- Added proper captcha error handling when registering (thanks to @maltee1 in #280).
- Added user's phone number as topic in private chat portals (thanks to @maltee1 in #282).
- Call start notices work again
Target signald version: v0.18.0
- Both the signald and mautrix-signal docker images have been changed to run as
UID 1337 by default. The migration should work automatically as long as you
update both containers at the same time.
- Also note that the
finn/signald
image is deprecated, you should usesignald/signald
. https://signald.org/articles/install/docker/
- Also note that the
- Old homeservers which don't support the new
/v3
API endpoints are no longer supported. Synapse 1.48+, Dendrite 0.6.5+ and Conduit 0.4.0+ are supported. Legacyr0
API support can be temporarily re-enabled withpip install mautrix==0.16.0
. However, this option will not be available in future releases.
- Support for creating DM portals by inviting user (i.e. just making a DM the normal Matrix way).
- Leaving groups is now bridged to Signal (thanks to @maltee1 in #245).
- Signal group descriptions are now bridged into Matrix room topics.
- Signal announcement group status is now bridged into power levels on Matrix (the group will be read-only for everyone except admins).
- Added optional parameter to
mark-trusted
command to set trust level (instead of always usingTRUSTED_VERIFIED
). - Added option to use MSC2246 async media uploads.
- Added provisioning API for listing contacts and starting private chats.
- Dropped Python 3.7 support.
- Files bridged to Matrix now include the
size
field in the fileinfo
. - Removed redundant
msgtype
field in sticker events sent to Matrix. - Users who have left the group on Signal will now be removed from Matrix too.
- Logging into the bridge with double puppeting no longer removes your Signal user's Matrix ghost from DM portals with other bridge users.
- Fixed identity failure error message always saying "while sending message to None" instead of specifying the problematic phone number.
- Fixed
channel
->id
field inm.bridge
events.
Target signald version: v0.17.0
N.B. This will be the last release to support Python 3.7. Future versions will require Python 3.8 or higher. In general, the mautrix bridges will only support the lowest Python version in the latest Debian or Ubuntu LTS.
- New v2 link API to provide immediate feedback after the QR code is scanned.
- Added automatic retrying for failed Matrix->Signal reactions.
- Commands using phone numbers will now try to resolve the UUID first
(especially useful for
pm
so the portal is created with the correct ghost immediately) - Improved signald socket handling to catch weird errors and reconnect.
- Fixed catching errors when connecting to Signal (e.g. if the account was deleted from signald's database, but not the bridge's).
- Fixed handling message deletions from Signal.
- Fixed race condition in incoming message deduplication.
Target signald version: v0.16.1
- Support for disappearing messages.
- Disabled by default in group chats, as there's no way to delete messages
from the view of a single Matrix user. For single-user bridges, it's safe
to enable the
enable_disappearing_messages_in_groups
config option.
- Disabled by default in group chats, as there's no way to delete messages
from the view of a single Matrix user. For single-user bridges, it's safe
to enable the
- Notifications about incoming calls.
- Support for voice messages with MSC3245.
- Support for incoming contact share messages.
- Support for long text messages from Signal.
- Formatted all code using black and isort.
- Moved most relay mode code to mautrix-python to be shared with other bridges.
- The bridge will now queue messages temporarily if signald is down while sending.
- Removed legacy community-related features.
- Updated remaining things to use signald's v1 API.
- Fixed empty DM rooms being unnecessarily created when receiving non-bridgeable events (e.g. profile key updates).
- Fixed duplicate rooms being created in certain cases due to the room mapping cache not working.
- Fixed replies to attachments not rendering on Signal iOS properly.
Target signald version: v0.15.0
- Support for Matrix->Signal redactions.
- Error messages to Matrix when sending to Signal fails.
- Custom flag to invite events that will be auto-accepted with double puppeting.
- Command to get group invite link.
- Support for custom bridge bot welcome messages (thanks to @justinbot in #146).
- Option to disable federation in portal rooms.
- Option to prevent users from registering the bridge as their primary device (thanks to @tadzik in #153).
- Extremely experimental support for SQLite. It's probably broken in some cases, so don't use it.
- Increased line length limit for signald socket (was causing the connection to fail when there was too much data going through).
- Improved Signal disconnection detection (mostly affects prometheus metrics).
- Updated provisioning API
/link/wait
endpoint to return HTTP 400 if signald loses connection to Signal.
- Fixed bugs with automatic migration of Matrix ghosts from phone number to UUID format.
- Fixed handling empty Signal avatar files.
Target signald version: v0.14.1
N.B. Docker images have moved from dock.mau.dev/tulir/mautrix-signal
to
dock.mau.dev/mautrix/signal
. New versions are only available at the new path.
- Relay mode (see docs).
- Added captcha parameter to help text of register command.
- Option to delete unknown accounts from signald when starting the bridge.
- Contact info is now synced when other devices send contact list updates.
- Contact avatars will now be used if profile avatar isn't available and contact names are allowed.
- Linking a new device or registering now uses the
overwrite
param in signald, which means it will force-login even if there is an existing signald session with the same phone number. - Updated Docker image to Alpine 3.14.
- Fixed Signal delivery receipts being handled as read receipts.
- Fixed logging out causing signald to get into a bad state.
- Fixed handling conflicting puppet rows when finding UUID.
Target signald version: v0.13.1
- Support for group v2 avatars.
- Syncing of group permissions from Signal.
- Support for accepting Signal group invites.
- Support for Matrix->Signal group name and avatar changes.
- Support for real-time group info updates from Signal.
- Hidden captcha support in register command.
- Command to mark safety numbers as trusted.
- Workaround for Element iOS image rendering bug (thanks to @celogeek in #57).
- Commands that take phone numbers now tolerate unnecessary characters a bit better.
- Updated to signald v1 protocol for most requests.
- Failure to bridge attachments if the
outgoing_attachment_dir
didn't exist. - Errors with no messages from signald not being parsed properly.
Initial release.