Signal Conversation Archive Backup
SCAB
Welcome to Signal Conversation Archive Backup (SCAB)!
(alternative title: Conversation Retrieval And Persistence)
Why do we need SCAB? Well, Signal is hostile when it comes to letting users own their private conversations1. Just take a look at the dozen issues complaining about lack of ability to restore conversations. If you want to retain any sort of persistent immutable archive of your messages over time, Signal itself won’t help you and actually tries to stop you from retaining any continuity of communication2.
Signal’s explicit policy towards archiving conversations is “we don’t support it, just delete everything, the past never matters,” which is quite arrogant to say the least.
Signal Conversation Archive Backup to the rescue3! SCAB works around Signal’s poor owners-first, users-not-considered design decision by extracting your Signal database (and attachments) for long term storage of full conversation history.
Usage
To backup your Signal Desktop database, run the following commands to:
- check out SCAB
- install Python requirements
- copy your Signal Desktop database (and attachments) into a new directory so nothing is accessed against your live Signal DB
- generate a single local HTML viewer for all your conversations
git clone https://github.com/mattsta/signal-backup
pip3 install -r requirements.txt
cd signal-backup
rsync -avz "/Users/$(whoami)/Library/Application Support/Signal" Signal-Archive
cd Signal-Archive
python3 ../scab.py
open myConversations.html
Features
SCAB Features:
- Converts Signal Desktop contacts and conversation history into JSON
- Embeds your full Signal history into a Single Page Chat Viewer4 (SPCV)
- SPCV displays full message history
- SPCV displays messages in-order, which is higher quality than Signal App itself since Signal App just appends async messages randomly without sorting by any logical timestamp.
- this appears to be a bug where messages are received in-bulk as push notifications then get logged into the message history on push-arrival, but push notifications have no guaranteed order and Signal App isn’t maintaining an internal sort of new messages based on anything logical like message-sent timestamps.
- SPCV displays messages in-order, which is higher quality than Signal App itself since Signal App just appends async messages randomly without sorting by any logical timestamp.
- SPCV displays attachments in-line for images and videos with associated text captions
- SPCV displays quoted replies with full quote context
- SPCV loads your entire message history in one text area so you can use your browser’s built-in search function to find text across your entire message history
Betterness
Ways SCAB is better than Signal Desktop and Signal App:
- SCAB is much faster than Signal Desktop
- Signal Desktop can take 30+ seconds to even open (“Loading messages. 640 so far…” (continuing to refresh at the unacceptably slow rate of 10 messages per second))
- SCAB can load a 10,000 chat message history in less than 3 seconds.
- SCAB sorts messages by message timestamp order
- Signal App doesn’t maintain a time-sorted message history, so if messages show up out of order due to network delays or APNS coalescing, your Signal App message history is literally useless (enjoy reading 50 Received bubbles followed by 40 Sent bubbles with nothing matched up to any logical conversational sequencing)
- SCAB can be copied to backup storage and saved forever without fear of app updates or device changes destroying your entire message history
- I’ve lost my entire Signal message history more than once due to just rebooting my laptop then Signal Desktop deciding previous chat history is no longer valid and the device must be re-associated, which just deletes months of history all at once without user consent. I fear upgrading my phone ever year because Signal refuses to allow chats to be stored in any backups, but what choice do we have? Users don’t matter anymore, so just use your little closed governance platforms like good software pesants with no representation in the eyes of your overlords.
- SCAB allows full history search
- Signal Desktop and Signal App have no search functionality and they don’t even load your entire message history at once. Want to read messages from 6 months ago? Enjoy reverse scrolling up your history for 10 minutes as the app re-paginates every 15 seconds at the painfully slow rate of 20 previous messages revealed at a time.
Limitations
Current limitations of SCAB:
- Only tested on macOS
- but should work on any platform where Signal Desktop drops its DB and attachment hierarchy
- Only data source is extracting user directory from Signal Desktop
- any messages in Signal App not simultaenously paired to Signal Desktop are not recoverable or archiveable
- No built-in jumping to date ranges
- No avatars or user images shown per message5
- No timestamps displayed
- Signal has many timestamps on every message and we aren’t exposing any of them in the interface:
- Timestamp
- Time sent
- SCAB uses
sent_at
to sort 6 all messages
- SCAB uses
- Time received
- Time decrypted
- Time expired
- Time until expires
- Signal has many timestamps on every message and we aren’t exposing any of them in the interface:
- No read/unread message indicators
- SCAB is an offline non-interactive archive, so get your read indicators elsewhere.
- Group chat display untested
- The group chat display should work, but we aren’t attaching per-message IDs to chat bubbles, so right now there’s no way to see sender IDs on incoming messages, which would be a useful (necessary) feature to have when viewing multi-sender group chats.
- Source of Truth is limited to Signal Desktop
- You must link Signal Desktop to your mobile device(s) so contents get copied to your desktop so you can extract your database and attachments.
- It is currently impossible to extract historical messages from iOS Signal App standalone.
Fun Future Features For Frequent Fans
Future features you could implement:
- Message analysis
- histograms of most popular incoming times for messages per senders
- Allow exporting messages only for certain conversations
- Allow exporting messages only for certain date ranges
- Potentially embed attachments into the SPCV using data URIs (tricky with large videos though)
- Built-in page search
- Built-in jump-to-date
- Better styling across all SPCV elements (or just use a different chat template)
- Show sent timestamp on each message
- Show received timestamp on each message (if diverges from sent by noticeable amount)
- Show avatars on users
- Show users in group chats
- Allow altering in-page sort? (sort by sent vs. sort by received)
Conclusion
for cripes sakes, implement basic features we’ve had in communication platforms created in the 80s by students in their free time without the benefit of $50 million funding.
From their own support page:
An iOS backup does not contain any of your message history. Messages are only stored on your devices. New messages, not conversation history, will be displayed after installing Signal on a new iPhone or reinstalling the app on your iPhone.
Signal explicitly and knowingly disables conversation backup using iOS backup exempt space (see:
NSURLIsExcludedFromBackupKey
) as a way to prevent your conversations and database artifacts leaking from adversarial backups (which Apple has fixed across the past couple iOS releases, so that isn’t a problem anymore), but it also prevents any continuity of conversation history when you replace your iOS device.↩Really, why did I have to waste my time writing this utility? Let’s just use IRC over TLS and be done with it. Apparently the concept of “chat backups” or “ongoing log” is too complicated for people with $50 million in foundation funding from War On Privacy profiteers.↩
SPCV originally from https://bootsnipp.com/snippets/exR5v↩
We could use a different chat template like https://bootsnipp.com/snippets/featured/elegant-bootstrap-4-message-chat-box-template which also has pre-defined sections for more metadata in-line with each message too↩
- ↩