Radar App for Sailfish OS
(Find my Device)
Radar (Find My Device) is a native find-my-device app for Sailfish OS: see your device's last position on a map and control it remotely via MQTT or SMS — fully self-hosted, no Google or cloud account involved.
For the app usage see the User Guide, for technical internals (daemons, logs, MQTT topics, token generation) see the Technical Infos.
- Locate your device on an OpenStreetMap map (optional free Geoapify key needed for a zoomable map)
- Track other Sailfish OS devices on the same map (Radar app installed + same MQTT broker)
- Publish your device's GPS position via MQTT (optional — use your own or a free public broker)
- Remote commands, via MQTT and/or SMS:
- RING / STOP_RING — ring the device for 60 seconds
- LOCK — lock the device into the lock screen
- GPS — report the current position (published via MQTT, or replied by SMS — SMS costs may apply)
- CAMERA — take a photo (front or back camera) and upload it to your WebDAV folder
- DELETE — wipe all user data (
/home/<defaultuser | nemo>) and reboot — NOT a factory reset
- Everything is opt-in: each command, MQTT, SMS and background tracking can be enabled/disabled individually in the settings
- Translations: EN, DE, SV, FR
Since v2.0 the project ships as two RPMs (required for Jolla Store / Harbour compliance):
harbour-find-my-device— the app itself, fully sandboxed (Sailjail). Works standalone: map, device management, foreground position updates while the app is open, TOTP/backup codes.harbour-find-my-device-daemon— the background services (remote commands via MQTT/SMS, background tracking, privileged helper for reboot/SMS). Not sandboxed, therefore not in the Jolla Store. The app RPM bundles it: the Settings page offers a one-tap install through the system installer. On OpenRepos and SailfishOS:Chum it can also be installed as a separate package.
For more screenshots, see docs/images/ in the GitHub repository.
An example client app for home use (Flask + Leaflet map + command buttons) is available under docs/examples/.
This is not a spy app: every remote action — even a failed one — shows a notification on the device. All commands are disabled by default; every single command must be enabled in the settings, a disabled command is never executed.
- MQTT:
- Commands require broker authentication (username/password) plus a one-time HMAC token derived from your PIN. Example:
{"cmd": "RING", "token": "29dd05e89e5ac143"}
- Commands require broker authentication (username/password) plus a one-time HMAC token derived from your PIN. Example:
- SMS:
- Commands are only accepted from whitelisted phone numbers (configured in the settings).
- Each command SMS requires a TOTP code (authenticator app enrolled on a second device) or a one-time backup code, both generated in the settings. Example:
RING 123456
- Qt 5.6.3 (Sailfish OS Silica UI) + Python 3 backend/daemons
- Two-RPM model: sandboxed store app + separate daemon package (see Technical Infos)
- Building, versioning and the CI build order: see Building
- Tested on:
- Fairphone 4 - Sailfish OS 5.0.0.62
- Jolla Phone 2026 - Sailfish OS 5.1.0.xx
- Emulator - Sailfish OS 5.0.0.62, 5.1.0.11
We are happy about any contribution to the project, whether it's bug fixes, new features, translations or documentation.
All language/regional translations are managed here translations/* in the GitHub repository.
If you want to contribute translations, please submit them as pull requests against the translations/harbour-find-my-device-{language-code}.ts files directly.
-
Go to folder translations.
-
If there is a file with your language code, click on it and select the edit icon
-
If not:
- Click on harbour-find-my-device.ts file
- Select copy icon (Copy raw file)
- Go back, click Add file -> Create new file
- Enter harbour-find-my-device-xx.ts replacing xx with your language code as the name. For example, de for german
- Paste the copied file in the new file's contents
-
replace:
<source>Save</source> <translation type="unfinished"></translation>
with the correct translation for your language (remove "type="unfinished" and add the translation in between the tags). For example, for german:
<source>Save</source> <translation>Speichern</translation>
Thanks for your consideration and contribution!
This project is licensed under the Apache License 2.0 - see LICENSE.
The packages additionally contain vendored third-party components under the
BSD-3-Clause license (paho-mqtt, qrcode), which is why the RPMs declare
Apache-2.0 AND BSD-3-Clause. See NOTICE for the attributions.
AI (Claude) was used to:
- Generate comments in the code
- Generate technical documentation
- perform initial POC on Fairphone 4 to find out right d-bus and API calls for this project
- Code review and refactoring
- Debugging and testing support
Sailfish OS and the Sailfish OS logo are trademarks of Jolla Group Ltd.





