Whisperfish - The unofficial SailfishOS Signal client

Yes, that was actually the case (some Android-App filled my storage with a lot of files called ._backup-something.tmp all of them 5GB :roll_eyes: ).

Yes, I would really like to do that :upside_down_face:

1 Like

Tips on diagnosing “Failed to setup Signal client” error are appreciated.

There is lots of available storage on the device. Jolla C2 Sailfish OS 5.0.0.77.

I uninstalled Whisperfish

Ran

rm -rf ~/.local/share/harbour-whisperfish ~/.config/harbour-whisperfish ~/.local/share/be.rubdos/harbour-whisperfish ~/.config/be.rubdos/harbour-whisperfish

Reinstalled whisperfish via Storeman

Then try to register

Output from

harbour-whisperfish --verbose >wlog.txt 2>&1

below:

e[2m2026-04-03T14:35:36.529360Ze[0m e[34mDEBUGe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m Using Wayland-EGL
library “libutils.so” not found
library “libdmabufheap.so” not found
library “libbase.so” not found
library “libz.so” not found
library “libcutils.so” not found
library “android.hardware.graphics.mapper@4.0.so” not found
library “libgralloctypes.so” not found
library “libhidlbase.so” not found
library “libhardware.so” not found
library “libc++.so” not found
e[2m2026-04-03T14:35:36.627787Ze[0m e[32m INFOe[0m e[2mwhisperfish::guie[0me[2m:e[0m QmlApp::application loaded - version v0.6.0-beta.39
e[2m2026-04-03T14:35:36.628350Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m src/sailfishapp.rs:211:int __cpp_closure_14317703314545309294_impl(QmlApplicationHolder* const&)(): Failed to load translator for (“en-GB”) Searched “/usr/share/harbour-whisperfish/translations” for “harbour-whisperfish”
e[2m2026-04-03T14:35:37.104797Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m “Failed to attach key memory region for qtcontacts-sqlite-np: QSharedMemory::attach (shmget): doesn’t exist”
e[2m2026-04-03T14:35:37.104957Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m “Failed to open contacts transient store”
e[2m2026-04-03T14:35:37.105262Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m “Unable to open synchronous engine database connection”
e[2m2026-04-03T14:35:37.105482Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m QSqlQuery::prepare: database not open
e[2m2026-04-03T14:35:37.105585Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m “Failed to prepare distinct display label group selection query: \n SELECT DISTINCT DisplayLabelGroup FROM DisplayLabels ORDER BY DisplayLabelGroupSortOrder ASC”
e[2m2026-04-03T14:35:37.127893Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m qml/harbour-whisperfish-main.qml:443:5: QML Connections: Cannot assign to non-existent property “onRingingChanged”
e[2m2026-04-03T14:35:37.232674Ze[0m e[32m INFOe[0m e[1mrune[0me[2m:e[0m e[2mwhisperfish::worker::setupe[0me[2m:e[0m identity_key found, assuming registered
e[2m2026-04-03T14:35:37.232815Ze[0m e[32m INFOe[0m e[1mrune[0me[2m:e[0m e[2mwhisperfish::config::settingse[0me[2m:e[0m Setting default settings.
e[2m2026-04-03T14:35:37.235872Ze[0m e[31mERRORe[0m e[1mrune[0me[2m:e[0m e[2mwhisperfish::worker::setupe[0me[2m:e[0m ACI UUID not set after registration or opening storage!
e[2m2026-04-03T14:35:37.236282Ze[0m e[34mDEBUGe[0m e[1mrune[0me[2m:e[0m e[2mwhisperfish::qtloge[0me[2m:e[0m qml/harbour-whisperfish-main.qml:431:expression for onClientFailed(): [FATAL] client failed
e[2m2026-04-03T14:35:37.293891Ze[0m e[34mDEBUGe[0m e[1mrune[0me[2m:e[0m e[2mwhisperfish::qtloge[0me[2m:e[0m qml/pages/FatalErrorPage.qml:25:onCompleted(): [FATAL] error occurred: Failed to setup Signal client
e[2m2026-04-03T14:35:37.297689Ze[0m e[34mDEBUGe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m Starting favorites query at 233 ms
e[2m2026-04-03T14:35:37.300439Ze[0m e[33m WARNe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m qml/harbour-whisperfish-main.qml:41: ReferenceError: PeopleModel is not defined
library “libion.so” not found
e[2m2026-04-03T14:35:37.503889Ze[0m e[34mDEBUGe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m Favorites queried in 439 ms
e[2m2026-04-03T14:35:37.593475Ze[0m e[34mDEBUGe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m Starting metadata query at 529 ms
e[2m2026-04-03T14:35:37.602686Ze[0m e[34mDEBUGe[0m e[2mwhisperfish::qtloge[0me[2m:e[0m All queried in 538 ms

Thanks.

Can’t really help as you seem to have followed instructions from here: Frequently Asked Questions · Wiki · Whisperfish / Whisperfish - Signal on Sailfish OS · GitLab ? Maybe try reboot after running the command before reinstalling?

(This is the output from after registration, ideally you’d supply logs during registration.)

But: secondary device registration/linking is current broken. Matti and I plan to work on some more things over the weekend, and we’ll get back with a new version beginning next week. Meanwhile, the latest main branch version should work and is safe to install.

7 Likes

Just a quick side note for anyone experiencing issues recently:

A couple days ago, Signal started silently unregistering acounts that did not yet use SPQR. In my case, my primary device is signal-cli, and Whisperfish (as well as an official Signal client on a Linux desktop) connected as linked devices. Since my version of signal-cli was older than 4 weeks, apparently my account got unregistered as well (can only verify after I’m back with my main device after the holiday, so all messages in the meantime will be lost).

While this is not at all an issue with Whisperfish, it seems I will have to re-link my device soon, too. So, looking forward to a new release, and thanks for your work and patience :+1: it’s really a shame to see how Signal developers treat unofficial clients.

Maybe they were rushing this change in response to the security research, but it’s great to see the acknowledgement at least from the researchers here!

1 Like

Heh interesting, I’d have expected signal-cli to fix those issues before us. We had that in in 7d95d4aa / beta.39. Thanks for sharing!

2 Likes

I have mixed feelings about that statement. It would be really neat if Signal published some list of breaking changes for the server/API, but meanwhile they already went from “being hostile” (in times of Moxie, mostly) to “ignoring”, to "being mostly friendly" but maybe not proactive.

4 Likes

And posted April 1st… not a joke?

1 Like

Haha sadly not a joke :slight_smile:

2 Likes

Happy Easter to those whom celebrate! I found some source code in a chocolate egg, and thought I’d dump it here. (That’s a joke)

:hatching_chick: Whisperfish 0.6.0-beta.40 :rabbit_face:

There’s plenty of changes in this version! The biggest changes are improvements all around messages handling logic and profile fetching “engine” which should result in a lot more fluent operation not slowing down the startup anymore if you have a large number of recipients. This should make maintainability easier in the future as well. There are the typical library updates to keep up with upstream, both for gaining new features and simply providing a functional application.

37 files changed, 2152 insertions(+), 1327 deletions(-)

  • Feature: Improved, incremental profile fetch logic
  • Feature: Refactored and cleaned up incoming message handling
  • Feature: Handle message receipts separately, more efficiently
  • Feature: Separately handle sticker and contact info messages
  • Feature: Improved and more complete sync message handling
  • Feature: Initial (partial) implementation of contact blocking sync
  • Crash: Support unconventional mentions in messages
  • Bug: Fix showing linked devices list (again)
  • Bug: Fix linking and registering Whisperfish
  • Bug: Handle throttling when receiving profiles
  • Bug: Allow empty string when determining recipient name colour
  • Bug: Try harder to avoid duplicate recipient name colours
  • Bug: Fix some cases of missed message expiration timestamp changes
  • Docs: Make main readme more user-friendly, relocate developer content
  • Internals: Advertise more up-to-date features to Signal servers
  • Internals: Better handle decryption errors, corner cases etc.
  • Internals: Update libsignal-service and libsignal, with refactoring as needed
  • Internals: Tweak log message levels, don’t log quite as much
  • CI: Add Harbour specific builds (not yet Harbour compliant though)
37 Likes

Incredible!
Quite a lot of code found from an easter egg :smiley:

4 Likes

Super. Thank you. Runs wonderfully.

2 Likes

Is there a fixed timeout for attachement download retry? I used up my mobile data so loading images fails at 89% or so

It should practically immediately offer you the opportunity to retry after a download failure. Or am I interpreting your message wrongly?

There was another report of some attachment download timeouting as well a while back.

Short answer; yes. We could set it longer (not good) or see if supporting and continuing partial downloads (better) is possible.

1 Like

The percentage is still increasing when it ‘fails’ so I think best would be to restart the timeout timer whenever some data is received (if possible)

That mostly sounds like the attachment downloading state machine needs some rework (on top of continued downloading)

EDIT: I don’t see any timeout code on the Rust side. There’s a Timeout error that is handled, but never constructed; stale code from before a refactor. Moreover, that timeout is at connection-time, not during the download.