A few months ago I decided to give Signal a try as I loved the idea of end-to-end encrypted communication where servers are not able to see my messages. There were parts I really liked about Signal. The UI is quite simple and the app seems to be lightweight (especially in contrast to Facebook Messenger). I used it a lot and most of the time it worked quite well. Unfortunately, recently I felt that the sum of minor inconveniences and bugs is too much for me and decided to migrate to another messenger. This post is a summary of what those inconveniences were.

I used Signal mostly to communicate with my wife. We both used Signal Private Messenger Android application on our phones and when using laptops we switched to Signal Desktop. We used it to send text and multimedia messages over the Internet, we didn’t use it to make calls and didn’t let it handle our SMS.

Searching through messages

Let’s say I sent a link and want to find it later in the conversation. Unfortunately, the only way to do it in Signal is to scroll through the conversation and manually spot the message. It feels strange being able to see the whole content but not having a search button anywhere in the user interface. For me, it is an essential feature of a modern instant messenger.

This issue has been raised multiple times in issue trackers of Signal Android and Signal Desktop. There’s also a thread about it on the unofficial community forum. I inferred from it that the main obstacles to implementing search are that the required Android API level has to be raised (which would break support for older Android versions) and that it is difficult to implement a search through the encrypted message database.

I appreciate that those are valid points and difficult engineering challenges, but as some people raising github issues noticed, searching is possible in Facebook Messenger, WhatsApp and Telegram. All of those messengers are also supporting end-to-end encryption and WhatsApp is even using Signal Protocol to do it.

Message integrity

When I send a message and I see an icon indicating it was successfully sent I want to be sure that my contact is able to see it in exactly the same form.

I once copy-pasted a part of a long article to my contact in the Signal Desktop app and I was surprised when I later saw on my Android device that the message was cut and the ending was not displayed. The message was displayed fine in my contact’s Signal Desktop window, but it was also cut short in the mobile app.

Android application didn’t indicate in any way that the message was not fully displayed. From various github issues I inferred that the message is being cut after 2000 characters because some devices crashed when displaying too long messages. There is a constant in the code that says how many characters can be displayed

 private static final int MAX_DISPLAY_LENGTH = 2000;

I changed it to a bigger number, recompiled the application and deployed to my mobile, but that of course only helped when I was the receiver of large messages, not when I was the sender. I raised a small pull request that added a warning for Android users that the message is too long to be displayed but got no response from the maintainers. Two months ago Signal Desktop added code to display a warning: “Android clients will only receive the first 2000 characters of this message”. I think it is a decent workaround, but I dislike the fact that there isn’t a common maximum message length on all supported platforms.

Synchronization

It often was the case that after a few hours of using Signal on my phone I opened a webapp and it had to synchronize my conversations. Sometimes it was the other way round and my phone had to download conversations I had on the desktop.

In both cases, the synchronization was really slow. Messages were appearing one by one. Each photo had to be fully downloaded before messages after it were downloaded. It took time and sometimes I just wanted to quickly send a message, without waiting for synchronization to finish. Unfortunately, if I did it, synchronization then kept going on, adding new messages at the bottom and suddenly my message was lost somewhere above them.

signal-ordering

I expected messages to always be ordered by time, but in this case it didn’t work. I created a Signal Desktop issue but got no response.

Desktop

I write much faster using a keyboard than touchscreen so desktop version was a must for every messenger I was to try.

Unfortunately, Signal Desktop is not a webpage, but an application based on Chrome Apps that are soon to be deprecated, so it requires Google Chrome to be installed. It looks like it’s going to be rewritten in Electron in the future.

The desktop version is missing some features present in mobile clients, the most important one seems to be contact management. It’s not possible to add or remove contacts in the Desktop client. Even synchronizing contacts from mobile doesn’t always work and there are multiple issues on github about it. Official Signal FAQ describes reinstalling Signal Chrome App under the “How do I update contacts on Signal Desktop?” question as one of the ways to synchronize contacts.

It looks like having end-to-end encryption, a web/desktop version and seamless synchronization is either very difficult or not a priority, as other messengers also seem to have some limitations in this area. WhatsApp, for example, has a nice webapp version but it requires your mobile phone to be connected all the time. Telegram and Facebook Messanger don’t support secret chats / secret conversations in webapps at all.

It’s open source!

Yes, it is and it’s great. I can actually see the source code of the application and even compile it myself to be sure. Although I don’t have skills to check if the cryptography is implemented well and has no loopholes, I can hope that there are people that actually did it.

Theoretically, I can also contribute to Signal and try to change things that I don’t like. There’s even a program called BitHub that sends a decent amount of bitcoins (using Coinbase) to authors of accepted pull requests. Unfortunately, it’s quite difficult to get them reviewed by project maintainers and there are many pull requests that have been hanging without any comment for a long time. There’s even a thread about it on the unofficial community forum where you can find out that there’s moxie0 is currently the only developer working on Signal Android and he doesn’t have much time to review and merge pull requests. The CONTRIBUTING.md file says that “Big changes are less likely to be merged.” and moxies0’s post in the forum thread says “That’s not to say that the more complicated ones will never get merged, but it will take much longer”. That’s why in practice it may be quite difficult to make changes in Signal.

Summary

I think that Signal is a good choice for people that prioritize privacy. I admire the fact that the Open Whisper Systems managed to create a free, open application that generally works well on three different software platforms and values security. However, I decided to be pragmatic in this matter and choose more convenient messengers for everyday use, even if they are a bit less-private and not open-source.