Your rating: None Average: 5 (16 votes)

Contrac is a beta-quality Corona-Warn-App compatible exposure notification app. It uses the Google/Apple Exposure Notification protocol and Germany's Corona-Warn-App backend servers.

The app supports sending/receiving exposure notification Bluetooth beacons, downloading and checking diagnosis keys from the servers and uploading positive test results using a TeleTAN.

The implementation is fully separate from the official implementations, so I can't offer any guarantee that it will necessarily work as expected. If you enter a TeleTAN it'll be officially registered (assuming the code works) so please only use it with real test results.

The app doesn't support the automatic download of test results using a QR code and it also requires nudging daily to download the diagnosis keys from the server. Both of these are being worked on.

The earlier alpha version of the app (thanks everyone for testing it) ran against a test instance of the official cwa test server. However, in practice the test server works slightly differently to the real thing. Therefore I'm afraid I can't offer any guarantee that the app will work as expected; please bear this in mind. It's also likely to affect your phone's battery life.

You use it at your own risk I'm afraid.

Having said that, if you discover it's not working as expected, or even if it is working as expected, please let me know or file a bug report.

Because the app requires Bluetooth 4.1 or later, it's unfortunately not compatible with Jolla 1 or Jolla C devices. I've also had reports it has problems on the Xperia X, but it should work on the later X devices.

Installing the app will install a background service that will continue to scan/broadcast even if you close the app. The service is stopped and uninstalled when you remove the app.

The source is available on github. PRs are welcome!

The 0.7.10-1 version of the app in the repo is built to be compatible with Sailfish OS 4.5.

Application versions: 
File harbour-contrac-0.0.1-1.armv7hl.rpm229.23 KB30/07/2020 - 22:54
File harbour-contrac-0.1.1-1.armv7hl.rpm236.98 KB09/08/2020 - 14:54
File harbour-contrac-0.2.1-1.armv7hl.rpm242.29 KB22/08/2020 - 16:52
File harbour-contrac-0.3.1-1.armv7hl.rpm244.41 KB24/08/2020 - 16:06
File harbour-contrac-0.4.1-1.armv7hl.rpm251.26 KB01/09/2020 - 18:49
File harbour-contrac-0.5.1-1.armv7hl.rpm274.71 KB07/09/2020 - 00:11
File harbour-contrac-0.6.1-1.armv7hl.rpm607.78 KB14/09/2020 - 23:10
File harbour-contrac-0.6.2-1.armv7hl.rpm607.89 KB16/09/2020 - 23:27
File harbour-contrac-0.7.1-1.armv7hl.rpm615.53 KB04/10/2020 - 18:54
File harbour-contrac-0.7.2-1.armv7hl.rpm622.56 KB05/10/2020 - 00:54
File harbour-contrac-0.7.3-1.armv7hl.rpm622.98 KB08/10/2020 - 20:30
File harbour-contrac-0.7.4-1.armv7hl.rpm622.87 KB08/10/2020 - 23:28
File harbour-contrac-0.7.4-2.armv7hl.rpm624.79 KB14/10/2020 - 00:08
File harbour-contrac-0.7.5-1.armv7hl.rpm619.87 KB02/01/2021 - 01:58
File harbour-contrac-0.7.6-1.armv7hl.rpm616.87 KB31/01/2021 - 18:45
File harbour-contrac-0.7.7-1.armv7hl.rpm619.45 KB17/02/2021 - 00:49
File harbour-contrac-0.7.10-1.armv7hl.rpm665.6 KB02/02/2023 - 22:56
File harbour-contrac-0.7.10-1.aarch64.rpm689.7 KB02/02/2023 - 22:56
File harbour-contrac-0.7.10-1.i486.rpm727.26 KB02/02/2023 - 22:56

* Thu Feb 2 2023 David Llewellyn-Jones <> 0.7.10-1
- Change quazip-devel naming for Sailfish OS 4.5 target.
- Add make as a build requirement.

* Sat May 14 2022 Oskar Roesler <> 0.7.9-1
- Require Qt Linguist pkg for tranlations. (#115) This package is preinstalled on the SDK, but not on OBS.
- Add chum information to rpm spec file

* Mon May 09 2022 Oskar Roesler <> 0.7.8-2
- Add LICENSE as stated in

* Sat May 07 2022 Oskar Roesler <> 0.7.8-1
- Remove the YAML spectacle file #96
- Set OpenSSL 1.1.1 as the default build option #97
- Add notifications for important events #98
- Scan the QR-code containing the GUID. #105
- F performance improvements #107
- Code refactoring DayStorage::findDtkMatches #108
- Build against #109
- Disable sailjail sandboxing #110

* Sun Feb 14 2021 David Llewellyn-Jones <> 0.7.7-1
- Store settings periodically to avoid data loss on unclean exit
- Code formatting tidied up with clang-format
- Improve start up failure handling
- Fix erroneous desktop-file-uninstall from uninstall process
- Tidy up build configuration
- Support automatic daily download of diagnosis keys
- Added Oskar Roesler (bionade24) as a contributor

* Sun Feb 16 2021 David Llewellyn-Jones <> 0.7.7-1
- Store settings periodically to avoid data loss on unclean exit
- Code formatting tidied up with clang-format
- Improve start up failure handling
- Fix erroneous desktop-file-uninstall from uninstall process
- Tidy up build configuration
- Support automatic daily download of diagnosis keys
- Added Oskar Roesler (bionade24) as a contributor

* Sun Jan 31 2021 David Llewellyn-Jones <> 0.7.6-1
- Download daily, rather than hourly, diagnosis key archives.
- Allow selection of key region for downloads (DE or EUR).
- Improve download progress precision.

* Fri Jan 1 2021 David Llewellyn-Jones <> 0.7.5-1
- Move risk calculation to a separate thread.
- Fix calculation to improve accuracy.
- Decouple calculation update from user interface app.
- Note the calculation now takes considerably longer.

* Thu Oct 8 2020 David Llewellyn-Jones <> 0.7.4-1
- Fix BLE state machine to allow graceful restart when filtering isn't supported.

* Thu Oct 8 2020 David Llewellyn-Jones <> 0.7.3-1
- Fix BLE state machine to allow graceful shutdown when filtering isn't supported.

* Sun Oct 4 2020 David Llewellyn-Jones <> 0.7.2-1
- Attempt to download data only from last 14 days (to avoid an error from day 15).

* Sun Oct 4 2020 David Llewellyn-Jones <> 0.7.1-1
- Updates the Chinese translations, thanks to dashinfantry.
- Updates the German translations, thanks to spodermenpls.
- Switches to using the official Corona-Warn-App servers.
- Uses the server REST API rather than the S3 protocol for diagnosis key downloads.
- Allows network errors to be cleared by clicking on the label.
- Adds an info banner to the main app, warning that functionality isn't guaranteed.
- Old diagnosis key downloads are cleaned up if they're over 15 days old.
- Calculates the need for fresh downloads at startup based on cached folders.
- Performs the Corona-Warn-App specific "combined risk score" calculation.
- Uses the low/high risk threshold configuration downloaded from the server.

* Wed Sep 16 2020 David Llewellyn-Jones <> 0.6.2-1
- Updates the Chinese translations.
- Fixes a timing bug so that an update can now be performed every day.

* Mon Sep 14 2020 David Llewellyn-Jones <> 0.6.1-1
- Adds new Chinese translations.
- Adds an improved cover page with status and actions.
- Improves the About page, which now includes contributors.
- Adds support for configuring the device attenuation values.
- The risk configuration is downloaded from the Corona Warn App servers.

* Sun Sep 6 2020 David Llewellyn-Jones <> 0.5.1-1
- Diagnosis key files are now tested directly after download.
- The risk status is shown in the UI, along with other useful info.

* Tue Sep 1 2020 David Llewellyn-Jones <> 0.4.1-1
- Adds encrypted beacon metadata send/receive.
- Refines the data aggregation algorithm to give improved results.
- Adds unit tests for metadata, metadata validity and data aggregation.
- Improves the beacon matching unit tests.

* Mon Aug 24 2020 David Llewellyn-Jones <> 0.3.1-1
- Adds persistent state to contracd.
- Send/received counts are now persistent.
- The enabled state of scanning/advertising is now persistent.
- The SIGINT signal is now handled by contracd.
- Diagnosis keys are now available for upload without needing to enable scan/receive.

* Sat Aug 22 2020 David Llewellyn-Jones <> 0.2.1-1
- Adds TeleTAN submission by the user.
- Adds separate pages to show upload and download progress.
- Improves error reporting for uploads and downloads.
- Streamlines the main page to remove progress indicators and add a status line.

* Sun Aug 9 2020 David Llewellyn-Jones <> 0.1.1-1
- Supports diagnosis key downloads from the test server.
- Supports diagnosis key upload to the test server.
- Adds a setting page for configurating the sever to use.

* Tue Jul 7 2020 David Llewellyn-Jones <> 0.0.1-1
- Initial alpha release.
- Supports beacon scan and send.


unmaintained's picture
[D] Download::startDateDownload:280 - Starting date download: QDate("2020-09-19")
[D] ServerAccess::performOp:175 - Request to:  ""
[D] ServerAccess::performOp:190 - GET request
[D] ServerListResult::onFinished:200 - ServerListResult::onFinished
[D] ServerListResult::onFinished:213 - Error:  QNetworkReply::NetworkError(ContentNotFoundError)
[D] ServerListResult::onFinished:219 - JSON error:  "illegal value"
[D] Download::startDateDownload(const QDate&)::<lambda:305 - Network error while downloading keys:  QNetworkReply::NetworkError(ContentNotFoundError)
[D] Download::setStatusError:382 - Setting error:  1


flypig's picture

Thanks for the log, that highlights the problem perfectly. I'll push out a fix, but in the meantime you can fix it temporarily with this (followed by restarting the app):

mkdir -p ~/.local/share/harbour-contrac/harbour-contrac/download/2020-09-19

unmaintained's picture

I can confirm, creating the directory did the trick.

Download worked perfectly and now the main window is displaying: Active.

flypig's picture

That's great, and thank you for confirming. I've uploaded a new version which will hopefully fix it in the app now too.

tmojo's picture

Same for me, creating this directory and restarting the app successfully downloads the keys. Thanks

unmaintained's picture

Thank you, I've installed 0.7.2 now.
Unfortunately the app does not let me download again so I guess we will have to wait for tomorrow to check if the issue is now gone.

flypig's picture

Thanks for checking and for all your trouble; Deleting the settings file (~/.config/harbour-contrac/harbour-contrac.conf) and download folders (~/.local/share/harbour-contrac/) will give you a clean slate, but there's no rush. Please do let me know if you experience the issue again though.

unmaintained's picture

It downloaded a binary file of some sort so download seems to be working.

flypig's picture

Okay, thanks, let me look into it (it's working okay for me, but I'm using the 3.4.0 version, so that may be the reason; I'll need to check).

unmaintained's picture

I'm on SFOS

tmojo's picture

Since upgrade to SFOS 3.4 Contrac fails to install due to missing

flypig's picture

Thanks again for highlighting this. There's now a version that works on 3.4.0 available here. It has to be installed manually I'm afraid. Once 3.4.0 is out of Early Access I'll switch OpenRepos to use this version as well.

flypig's picture

Thanks for flagging this up; it's useful to know. I have an updated version which I've been testing on the early access release and which I'll roll out very soon (i.e. the plan is before the end of the weekend). I'll message you again here when it's up and would be grateful if you could try it.

pvcn's picture

Download latest keys doesn't work for me, always shows "Network Error" Both with WLan an Mobile Data (Device: Sony Xperia X Compact)

flypig's picture

Could you please let me know what the servers are set to on the Settings page please?

pvcn's picture

Download Server Upload: Verification:

flypig's picture

Thanks, that's useful. Could you please update them to the following and try again? The values you have were carried over from an earlier install, but they've changed since (I should have fixed this in the code, but it didn't occur to me):

  1. Download server:
  2. Upload server:
  3. Verification server:
pvcn's picture

Thank you very much, it works!

Firefox84's picture

How is it possible that the app is still active if Bluetooth is deactivated? This shouldn't be no? If there is no Bluetooth no contacts can be scanned. Great Work Flypig! Keep on! :)

flypig's picture

You're right, it's not possible. This is just bad error reporting: the scanning/sending process fails, but this doesn't get fed back properly to the UI. There's an issue about it on github here, so eventually I'll get to fixing it. Thanks for the motivating words :)

miqu's picture

Finnish government open sourced the apps for Android and Iphone and their server. They use the google-apple APIs and I suppose the server addresses could be asked from them for Finnish users. So if that option to change server address does come we could use it.

flypig's picture

Yes, it's worth trying. As I mentioned in reply to @Juanro49, the option to change servers is on the Settings page, but I've not had a chance to test against the Finnish servers either. There's also some discussion about this on FSO that would be worth following:

Juanro49's picture

It's possible to add option to change server? (for example spanish servers of radar covid) Thanks!!

flypig's picture

You can configure the servers from the Settings page (from the pulley menu), but the bigger question is whether the Spanish servers are compatible with the German servers. I'm afraid I've not had time to check (but if you have the opportunity and could post your results here or to github, this would be great to know).

rigo's picture

Do you have contact to the development team of the covid app?

flypig's picture

I've been speaking with @werkwolf since he's involved with the CWA development and who has been very helpful, but if you have suggestions I'm always open to ideas.

woidboy's picture

Are the preset servers still test servers? If yes, what are the IP addresses of the official servers? BTW, great app!

flypig's picture

Thanks for the encouragement! It's still the test servers I'm afraid. As soon as I know the official servers to use, I'll update the app to use them (I don't have the addresses myself I'm afraid).

mak_rev's picture

I have installed it on my Xx. It seems to work fine. 

Thank you for making it possible! 

flypig's picture

Thanks for letting me know. That's interesting as the Bluetooth part isn't working for everyone on the Xperia X (see the discussion here ), so there must be differences between devices. I'm glad it's working for you.