Whisperfish
Note: Only beta.12 (and newer) works. Any older version can’t connect to the Signal servers!
Whisperfish is an advanced but unofficial Signal client. Whisperfish should be in a usable state for many users, but is still considered beta quality software ; make sure to always have the latest version! Also, check our Wiki and feel free to contribute to it! Currently, mimimum supported SailfishOS version is 3.4. We intend to keep compatibility with 3.3 for as long as humanly possible. The build for SailfishOS 3.x is located in a separate OpenRepos application.
Do not ever contact the Signal developers about a Whisperfish issue. You will annoy them and make them dislike us. Contact us instead (see below).
Talk about Signal, Whisperfish and Sailfish OS
Why Signal, what’s so interesting about it? Watch me explain what I like and love about Signal, explained in Lausanne, October 2022, FIXME hackerspace.
SailfishOS fan club group on Signal
Known issues
Whisperfish is a project by volunteers. Lots of stuff works, lots of other stuff does not work. If you find something that does not work, file an issue or reply to this thread.
- Previously installed emojis are not shown anymore
- This occurs when updating from beta.9 (or older) to beta.10 (or newer)
- Caused by version bump to Emoji 14
- Fix: Remove the old emojis and re-install the new set(s)
-
Sending the first message to a contact gives a 404 Not Found error:
Workaround:- Use Signal Desktop to send the first message.
- Ask your contact via another way to send you the first message.
-
Creating groups, inviting new members, deleting members (planned for later)
Workaround: use Signal Desktop. - Getting invited to a group. Ask to be added to the group instead.
Workaround: use Signal Desktop. - Many other UI features are just stubs at this point.
- Typing notifications have been temporary removed
- Cover page unread count is not updated
- Registration if registration lock is enabled.
Workaround:- Wait 7 days, or;
- Disable the registration lock on the old device in the Settings menu of the Signal app:
- For Android, this seems to be: Settings → Privacy → Registration lock,
- and for iOS this is seemingly: Account → Signal PIN → Registration lock.
SailfishOS platform version notes and known issues
The intention is to keep as many versions of SailfishOS supported for as long as possible. Some versions show bugs specific to that SailfishOS version. If it is not possible to upgrade to the version mentioned below, you can use the workarounds mentioned here.
Current highest tested SailfishOS version: SailfishOS 4.4
SailfishOS 3.x series
Bugs present in the Sailfish 3.x series
In principle, Whisperfish works on SailfishOS 3.3, except for registration. @direc85 keeps testing Whisperfish on Jolla Phone, which runs SailfishOS 3.4.
- Registration on SailfishOS 3.3. As a workaround, register on another device, and move over your data.
Installation on SailfishOS 3.x
Since the release of SailfishOS 4.3, there has been an ABI-incompatible change between 3.x and 4.x. Whisperfish is now built separately for 3.x and 4.x, and both packages are available on OpenRepos. If Storeman cannot figure out the correct version for your 3.x installation, you can install Whisperfish via the commandline (after adding the repository):
zypper install harbour-whisperfish-0.6.0.beta.10-0.sf3.armv7hl
SailfishOS 4.x series
The Sailfish 4.x series introduced a few issues, and possibly new features; notably.
Contribute: get in touch, report issues and translate!
If the app behaves strangely or slow (I have a strong dislike for slow software) to you, please get in touch on Matrix #whisperfish:rubdos.be or on Libera.Chat #whisperfish, file an issue, or email whisperfish [at] rubdos [dot] be, or post on this forum thread. If it works well already, also let me know! That’s good for morale.
Development and progress
Follow the progress of the rework in the 0.6 milestone on Gitlab. If you are interested in contributing, contact me on Gitlab. If you want to discuss development, join the discussion on Matrix #whisperfish:rubdos.be.
There are nightly builds (in form of RPM) available on Gitlab. Nighlies eat batteries for breakfast, break up with your girlfriend, and use magic to turn phones into bricks. If you want to use them, please come and chat on Matrix or IRC. Whenever there is a version that makes sense, and has a low probability of tearing apart the very fabric of the universe, it’ll be here on Open Repos!
Donations
Thanks for the support, feel free to buy us a coffee! Liberapay allows for donations via PayPal or credit card. While we do appreciate the donations, please do match your donation towards Signal themselves. Also consider donating to Weblate, because they provide their translation hosting service to us and many other SailfishOS applications at no cost!
Licence note
The original Whisperfish 0.5.0, by Andrew, was released under GPLv3+. Since we are using the upstream code of Signal themselves, partly licensed under AGPLv3+, the whole of Whisperfish 0.6.0 falls under AGPLv3+.
Release notes
Whisperfish 0.6.0-beta.16
Fix an issue during registration, and some QoL improvements. If you want to register after a failed attempt, don’t forget to reset your installation
Changes
- Fix an issue during registration, introduced after the refactoring
- Close Whisperfish when updating
- Implement auto-login for password-protected setups
- Cleanup profile view page, allow viewing fingerprint and changing profile
- Allow starting a new conversation from group view
Whisperfish 0.6.0-beta.15
Overhauls the QML binding system. This should fix all UI inconsistencies, except for a few that are now introduced.
131 files changed, 11799 insertions(+), 10174 deletions(-)
- Capture panics to log
- Log Qt errors to Rust
- Allow capturing logs to a file via a configuration option
- Cleaner display of reactions
- Show message action buttons on one row in landscape mode
- Add a placeholder for sticker messages, instead of showing “This message is empty”
- Use upsert clauses thanks to SQLite and Diesel update (slight performance win and code cleanup)
- Remove defunct incognito mode
- Fix displaying version in About menu
- Allow opening direct message from group member list
- Refactor QML session/message singletons (performance win, future proofing, and UI consistency)
- Allow registration with reCAPTCHA and hCAPTCHA
Whisperfish 0.6.0-beta.14
Bugfix release for most of the bugs we introduced in beta.13, and some fixes for changes upstream.
Changes
- Attempt to handle HTTP 428 by responding with a reCAPTCHA challenge
- Handle device mismatches (fixes sending to contacts that change their linking setup)
- Attempt at fixing a crash at startup related to profile uploading
- Fix a crash when opening an empty session
- emoji.js now supports out-of-date emoji packages as fallback
- Fix typing notification display of names in certain conditions
- Marking as read fix for mismatched sessions
- Cleaner formatting for linked device display
Whisperfish 0.6.0-beta.13
Profile fetching and updating, avatar displaying, sender key and unidentified sender support at receiver side, and much more.
Changes
- Disable defunct “send new message” functionality
- Don’t crash when Signal desktop sends a SyncMessage about a story.
- Use move_rows instead of reinserting upon new message reception
- Big refactoring work by Lucien XU
- Send messages via the Websocket instead of the PushService
- Display avatars
- Display Signal profile names, with preference for local contact names in settings
- Implement regular profile updating
- Implement displaying and sending quotes
- Use Emoji font for displaying reactions when configured as such
- Move (signed) prekeys, identities, sessions into database
- Implement sender keys and unidentified sending at the receiver side for much improved privacy
- Many, many, other tiny and big things.
Whisperfish 0.6.0-beta.12
Hotfix release for the new Signal root certificate
Changes
- Update root CA certificate for Signal production server (4096 bits RSA instead of 2048!)
- Multiple fixes for SailfishOS 3.4
- Fix storage migration corner case
- Fix some registration issues
- Fix cover scrolling behaviour
- Big update of libsignal-protocol version
- Misc layout and input field improvements
- Refactored some storage and Sailfish platform code
Whisperfish 0.6.0-beta.11
Mostly bugfixes for bugs that we introduced in beta.10, but also implements Whisperfish as secondary device. This release is basically completely due to direc85 and Gabriel Margiani; thank you both!
Changes
- Add
sailfish-qml
to dependencies for registration to work on new installs (thanks to direc85!) - Fix config.yml migration code (thanks to direc85!)
- Improve handling SMS verification field input (#444 and #443, thanks to direc85!)
- Implement secondary device mode (thanks to Gabriel Margiani and ntninja!)
- Fix background mode (thanks to Gabriel Margiani and direc85!)
- Start a Catalan translation (thanks to Jaume Singlavalls!)
- Play a quiet message when a message arrives when the application is active (thanks to direc85)
- Fix sending to UUID-only contacts (thanks to Gabriel Margiani, fixed in an unrelated MR)
- Keep up with technical debt (several merge requests and pushes)
Whisperfish beta.10
This is a huge release, thanks to the hackathon we did a month ago with @direc85 (see picture at Whisperfish - The unofficial SailfishOS Signal client - #595 by rubdos).
There’s a ton of useful changes for the users, and there’s also a lot of technical debt fixed that will make the next releases even more awesome. Diffstat since beta.9: 127 files changed, 11795 insertions(+), 5464 deletions(-)
(and that’s huge)
Changes
- Update to Emoji 14 (thanks to @direc85)
- Correct attachment showing for out-of-order downloads
- Allow resetting identity key through developer options
- Cover page design showing messages showing typing indicators (in cooperation with direc85)
- Implement typing indicators for groups and direct messages (turn on in settings)
- Implement captcha rendering through external application, and hence fix registration (thanks to @direc85 and Gabriel Margiani)
- Spit share plugin and compile them separately for Sailfish 3 or 4 (thanks to @direc85)
- Fix message queuing and resending
- Migrate session records and identity storage to database
- Update libsignal-client (long overdue, only possible since the session record/identity record storage refactoring, cooperation with Gabriel Féron)
- Redesign registration page to combat phone number entry confusion (thanks to @direc85)
- Work around Signal-Desktop issue with JPEG’s sent as PNG’s (thanks to @direc85)
- Optimize Emoji rendering (thanks to @direc85 and @ichthyosaurus )
- Add RemovableMedia to privileges for sending Pictures from the SD card
- Implement archiving and pinning of sessions (thanks to @direc85)
- Multiple UI fixes (thanks to @direc85)
- Allow sending pictures directly from within Whisperfish (thanks to @direc85)
- Give a warning for old Whisperfish versions (thanks to @direc85)
- Show multiple attachments up to five
Highlights:
- Registration should work again! Thanks @direc85 and Gabriel Margiani !
- Cover page is awesome!
- Typing notifications are cute!
- Display multiple attachments!
- Resending failed messages!
This is quite a milestone. The next big milestone will be porting Rust 1.61 to SailfishOS, because that will allow us to further push the dependencies and implement all the new GroupV2 and sealed sending features more easily.
Whisperfish 0.6-alpha.3
Hello, world!
Today I’m feeling healthy and confident enough to start a thread about Whisperfish, the Signal client originally built by Andrew E. Bruno in 2016 (thank you so much, Andrew). In February 2019, aebruno announced the EOL of his Whisperfish. I have then, four months later, volunteered to take the lead and rewrite the whole thing against libsignal-protocol-c
, the official and upstream ratchet/axolotl/e2ee library.
It’s taken me a long time, and during the time I switched to Rust, which turned out to be a radical choice back then, but has since paid of: Signal themselves started switching the protocol library to Rust, and SailfishOS introduced preliminary Rust support in 3.4. I had to DIY my Rust SDK (and haven’t migrated yet).
What followed was a painful rewrite of many things, but it is now starting to pay off. I’d like to thank Markus Törnqvist and Gabriel Féron for their efforts in respectively the Sailfish part and the back end part. I have (re)written the bulk of the application, including a very experimental (but very much working) async
/await
-enabled Qt interface, which I want to get cleaned up by Whisperfish 1.0.0.
The result of our efforts is, currently, Whisperfish 0.6-alpha.3. While I am confident many more people can use the “new” Whisperfish, be aware that this is an alpha release. This means that things will fail and you might lose data. That being said: I have many reports of people losing data with Whisperfish 0.5, data that is not lost on my rewrite. This is due to the new cryptographic library, and many updated API calls. If you install this software (thanks!) please leave feedback, both positive and negative in this thread.
Implemented features:
- Sending and receiving messages
- Receiving attachments
Notably not implemented:
- Registration
- Sending attachments
- Starting conversations with new people
- Altering groups
The above means, that if you can wait with sending pictures (my priority number one) and if you have a working Whisperfish 0.5 installation, you can probably start using the Whisperfish 0.6-alpha’s. Be prepared to send me feedback, either through the forum, Matrix or IRC (freenode#whisperfish). Bug reports and feature requests are more than welcome on the Gitlab issue tracker
Downloads
Before downloading any of this, please read the above paragraph.
Master branch builds (“nightlies”)
All RPMs are published on the Gitlab package archive.
Version history
Published versions can be found on my OpenRepos account.