Signal-FOSS
A fork of Signal for Android with proprietary Google binary blobs removed. Uses OpenStreetMap for maps and a websocket server connection, instead of Google Maps and Firebase Cloud Messaging. Also adds new preferences to keep view-once messages, disable remote deletion, control media deletion, and disable expiring messages.
Download
DISCLAIMER: You might want to consider the officially supported APK download from Signal if you don't mind proprietary dependencies. This is an unofficial client with no guarantees of timely (or any) updates. It's licensed under AGPL3, like Signal, meaning it has no warranty and you use it at your own risk. Signal is a registered trademark of the Signal Foundation in the USA. This connects to Signal's servers, all terms from their Privacy Policy apply.
Binary
F-Droid Repository:
https://fdroid.twinhelix.com/fdroid/repo?fingerprint=7B03B0232209B21B10A30A63897D3C6BCA4F58FE29BC3477E8E3D8CF8E304028Click or copy/paste the above link into the F-Droid app, and it can automatically download and update this application.
Current version direct download:
Certificate signing fingerprint:
SHA-256: 51781a8f066a1bb483661824662f48e7593f066ad5aced6b3c34f2dd0021b838
Source Code
Source is on Github in branches whose name ends in '-FOSS'. You can use Github to compare the branch with upstream's release tag of the same version to see the changes.
Frequently Asked Questions
Isn't Signal for Android open source?
Not entirely. All official APKs include multiple closed source Google
dependencies including Firebase Cloud Messaging (for notifications), Maps,
Authentication and (since v5.24.15) Wallet/Payments. See the
app/build.gradle
file in Signal's source, or search the codebase for for any imports of
com.google.android.gms or
com.google.firebase - these two links search the
whole Signal codebase for files that import those dependencies.
The Signal developers explain their reasons here.
What's the difference between this and official Signal for Android?
Links go to pages describing relevant privacy policies:
| Component: | Signal-FOSS | Signal Website Build | Signal Play Build |
|---|---|---|---|
| Updates | Via F-Droid Repo | Built-in updater | Via Google Play |
| Notifications | Websocket to Signal server | Firebase Cloud Messaging if installed, otherwise websocket | |
| Maps | OpenStreetMap | Google Maps | |
| Donations | Partial support | Google Wallet/Payments | |
| Billing for remote backup | Unsupported | Google Play Billing | |
A websocket connection often uses slightly more battery than Firebase Cloud Messaging, which the official client uses for message notification pings. Maps and in-app Donations in both official builds only work on devices with Google Apps (GAPPS) installed, otherwise the map is blank.
Signal versions 4.61.4 - 5.3.7 included Firebase ML Vision for facial recognition; this was replaced in 5.3.8 with Android's inbuilt support.
From v7.51.2, this build also includes preferences to keep view-once messages, disable remote deletion, control media deletion, and disable expiring messages.
Does GPS work?
GPS works for maps, but can be slow on phones without Google's location services installed; consider waiting a while, or installing another location provider to accelerate GPS locks like UnifiedNLP.
How do I switch between this and an official Signal build?
- It's best to switch between identical versions of Signal.
- Make sure local backups are enabled in your "Chats and Media" preferences and you have written down the backup password and made a backup.
- Check your backup exists in the "Signal/Backups" folder on your internal storage.
- Uninstall the application.
- Install the other application and import backups on first run.
Can I use this alongside an official Signal build?
Not currently as they share the same Android package ID. You would have to rename it, and compile it yourself to do so.
Can this be distributed on F-Droid?
F-Droid requires the original project's permission to distribute an application in their main repository. I asked for permission on their bug tracker and the Signal developers declined.
How do I compile it?
Clone the Github project, see the .github/workflows/android.yml
file; you need to add a Base64 encoded Java private key generated from
keytool named apksign, and its corresponding
password, both as named Github secrets. Then just push a branch whose name
ends in "-FOSS" and it will compile, sign and release a build.
To build locally, checkout the source and see the
Signal wiki for instructions (or look into the
Reproducible Builds directory for Docker build instructions).
NOTE: Instead of ./gradlew build use
./gradlew assembleWebsiteFossProdRelease (or prior to
7.15.4.0-FOSS: ./gradlew assemblePlayFossProdRelease) to
build without Google proprietary dependencies. Also, please use
apksigner instead of jarsigner if the wiki
suggests that.
Can I trust this build?
Builds are automatically generated by Github Actions from source. If you're logged into GitHub check the project's Actions for the relevant build, in the "Sign APKs" step, there's a SHA256SUM listed for each build by filename. Currently the Universal builds are published here. The only new dependency on top of plain Signal is the open source osmdroid library.
Will you participate in Google's Android Developer Verification program, so this fork can run on future Google certified devices?
LOL, no :).
Credits
- Molly.im (Valldrac)
- For Firebase Messaging stubs from Molly-FOSS.
- Fumiakiy Yoshimatsu
- For OpenStreetMap support.
- johanw
- For preferences to keep view-once messages, disable remote deletion, and control media deletion.
Changelog
7.66.4.0-FOSS
- Pulled new upstream.
7.65.4.0-FOSS
- Pulled new upstream.
7.64.2.0-FOSS
- Pulled new upstream.
7.63.3.0-FOSS
- Pulled new upstream.
7.62.3.0-FOSS
- Pulled new upstream.
7.60.4.0-FOSS
- Updated patch to DataMessageProcessor.kt due to upstream.
7.58.2.0-FOSS
- Updated patch to ChatSettingsFragment.kt due to upstream.
7.57.2.0-FOSS
- Changed GoogleApiAvailability.java and ConnectionResult.java in libfakegms due to upstream remote backup requirements.
- Patches to app/build.gradle.kts and donations/build.gradle.kts
7.56.10.0-FOSS
- Re-added and moved Billing API website build override from website to foss build variant folder, as it was dropped upstream.
- Rewrote chat settings integration for message deletion settings as upstream changed settings organisation.
7.54.1.0-FOSS
- Pulled new upstream.
7.53.4.0-FOSS
- Pulled new upstream.
7.52.2.0-FOSS
- Pulled new upstream.
7.51.2.0-FOSS
- Added new preferences to keep view-once messages, disable remote deletion, control media deletion (from 'johanw'), and disable expiring messages.
- Removed 'play.services.wallet' from FOSS build in debuglogs-viewer/lib/build.gradle.kts.
7.50.1.0-FOSS
- Pulled new upstream.
7.49.1.0-FOSS
- Removed libs.google.signin from app/build.gradle.kts in FOSS build.
7.48.1.0-FOSS
- Pulled new upstream.
7.47.2.0-FOSS
- Pulled new upstream.
7.46.1.0-FOSS
- Pulled new upstream.
7.45.3.0-FOSS
- Excluded androidx.credentials.compat in app/build.gradle.kts.
7.42.2.0-FOSS
- Pulled new upstream.
7.41.3.0-FOSS
- Pulled new upstream.
7.40.2.0-FOSS
- Pulled new upstream.
7.39.4.0-FOSS
- Pulled new upstream.
7.38.7.0-FOSS
- Pulled new upstream.
7.37.3.0-FOSS
- Pulled new upstream.
7.36.2.0-FOSS
- Pulled new upstream.
7.35.0.0-FOSS
- Pulled new upstream.
7.34.2.0-FOSS
- Pulled new upstream.
7.33.2.0-FOSS
- Pulled new upstream.
7.32.2.0-FOSS
- Pulled new upstream.
7.31.1.0-FOSS
- Updated gradle verification metadata to fix build.
7.30.2.0-FOSS
- Pulled new upstream.
7.29.4.0-FOSS
- Updated gradle verification metadata to fix build.
7.28.4.0-FOSS
- Pulled new upstream.
7.27.1.0-FOSS
- Pulled new upstream.
7.26.1.0-FOSS
- Updated dependency/verification data to match upstream changes, and removed kotlinx temporary libs from 7.15.4.0-FOSS.
7.25.2.0-FOSS
- Pulled new upstream.
7.24.2.0-FOSS
- Minor tweak to app/donations/lib/build.gradle.kts as upstream made slight changes.
7.23.1.0-FOSS
- Pulled new upstream.
7.22.2.0-FOSS
- Updated Github workflow to install Signal-specific version of the Android NDK, allowing JNI libs to be stripped for a much smaller build size.
7.21.5.0-FOSS
- Pulled new upstream.
7.20.2.0-FOSS
- Pulled new upstream.
7.19.2.0-FOSS
- Updated Github Workflow so that it can be dispatched manually.
7.18.2.0-FOSS
- Pulled new upstream.
7.17.4.0-FOSS
- Pulled new upstream.
7.16.4.0-FOSS
- Pulled new upstream.
7.15.4.0-FOSS
- Switched build type from "playFoss" to "websiteFoss" due to upstream incorporating Google Play Billing API into Play builds. Multiple changes to app/build.gradle.kts and .github/worksflows/android.yml
- Updated OSMDroid to 6.1.20.
- Trimmed out some old dependencies from gradle/verification-metadata.xml and had to add a couple of kotlin coroutine versions temporarily.
7.14.2.0-FOSS
- Pulled new upstream.
7.13.3.0-FOSS
- Improved kotlinux tasks libfakegms mplementation from Molly.
7.12.3.0-FOSS
- Pulled new upstream.
7.11.3.0-FOSS
- Pulled new upstream.
7.10.3.0-FOSS
- Pulled new upstream.
7.9.6.0-FOSS
- Added stub for new upstream GMS requirement of kotlinx coroutines for play services, and await() to Task.
7.8.1.0-FOSS
- Pulled new upstream.
7.7.2.0-FOSS
- Pulled new upstream.
7.6.2.0-FOSS
- Pulled new upstream.
7.5.2.0-FOSS
- Pulled new upstream.
7.4.2.0-FOSS
- Pulled new upstream.
7.2.4.0-FOSS
- Pulled new upstream.
7.1.3.0-FOSS
- Updated GH build action slightly to match upstream.
7.0.2.0-FOSS
- Updated internal MapView version to Signal-FOSS/7.
6.47.5.0-FOSS
- Pulled new upstream.
6.46.7.0-FOSS
- Updated build.gradle.kts for upstream variant selection changes.
6.45.2.0-FOSS
- Pulled new upstream.
6.43.2.0-FOSS
- Updated android.yml workflow file to use Android tools 34.0.0.
6.42.3.0-FOSS
- Moved build.gradle changes to new upstream build.gradle.kts files.
- Removed hack in build.gradle including wallet for Donations project dependency resolution.
- Remove package="com.google.android.gms" from libfakegms AndroidManifest.xml as no longer recommended by Gradle.
- Updated osmdroid to 6.1.18.
6.41.3.0-FOSS
- Pulled new upstream.
6.40.4.0-FOSS
- Pulled new upstream.
6.39.1.0-FOSS
- Pulled new upstream.
6.38.2.0-FOSS
- Pulled new upstream.
6.37.2.0-FOSS
- Pulled new upstream.
6.36.5.0-FOSS
- Pulled new upstream.
6.35.3.0-FOSS
- Pulled new upstream.
6.34.5.0-FOSS
- Pulled new upstream.
6.33.3.0-FOSS
- Pulled new upstream.
6.32.5.0-FOSS
- Pulled new upstream.
6.31.2.0-FOSS
- Updated Github Actions workflow file to add more swap space.
6.30.4.0-FOSS
- Pulled new upstream.
- Note this release is built manually as Github Actions kept cancelling the build for some reason.
6.29.2.0-FOSS
- Pulled new upstream.
6.28.6.0-FOSS
- Pulled new upstream.
6.27.10.0-FOSS
- Pulled new upstream.
6.26.4.0-FOSS
- Pulled new upstream.
6.25.5.0-FOSS
- Changed libfakegms build.gradle for upstream Gradle 8 / JDK 17.
6.24.4.0-FOSS
- Added Task onCancelListener to libfakegms.
- Updated osmdroid to 6.1.16.
6.21.3.0-FOSS
- Pulled new upstream.
6.20.5.0-FOSS
- Pulled new upstream.
6.19.8.0-FOSS
- Pulled new upstream.
6.18.4.0-FOSS
- Pulled new upstream.
6.17.3.0-FOSS
- Pulled new upstream.
6.15.3.0-FOSS
- Updated libfakegms with MapStyleOptions and setMapStyle().
6.14.5.0-FOSS
- Switched Github Actions to run on ubuntu-latest (this was on 20.04, and upstream just switched to ubuntu-latest-8-cores which doesn't run).
6.13.8.0-FOSS
- Pulled new upstream.
6.13.6.0-FOSS
- Pulled new upstream.
6.12.6.0-FOSS
- Updated build.gradle to match upstream library convention plugins.
6.11.7.0-FOSS
- Pulled new upstream.
6.10.9.0-FOSS
- Pulled new upstream.
6.9.2.0-FOSS
- Pulled new upstream.
6.8.3.0-FOSS
- Pulled new upstream.
6.7.6.0-FOSS
- Pulled new upstream.
6.6.3.0-FOSS
- Pulled new upstream.
6.5.6.0-FOSS
- Fixed getPaymentsClient in Wallet to accept context not activity.
6.4.2.0-FOSS
- Removed extra MmsDatabase import, not needed and upstream renamed.
- Edited new permissions in GitHub workflow file to allow writing.
6.3.6.0-FOSS
- Updated version used in OSM useragent to Signal-FOSS/6.
6.2.3.0-FOSS
- Pulled new upstream.
6.1.4.0-FOSS
- Pulled new upstream.
6.0.6.0-FOSS
- Pulled new upstream.
5.53.8.0-FOSS
- Pulled new upstream.
5.52.5.0-FOSS
- Pulled new upstream.
5.51.7.0-FOSS
- Pulled new upstream.
5.50.4.0-FOSS
- Updated osmdroid to 6.1.14 and its appropriate dependencies.
5.49.3.0-FOSS
- Pulled new upstream.
5.48.3.0-FOSS
- Pulled new upstream.
5.47.3.0-FOSS
- Pulled new upstream.
5.46.6.0-FOSS
- Pulled new upstream.
5.45.6.0-FOSS
- Pulled new upstream.
5.44.5.0-FOSS
- Pulled new upstream.
5.43.7.0-FOSS
- Pulled new upstream.
5.42.7.0-FOSS
- Pulled new upstream.
5.41.11.0-FOSS
- Added com.google.firebase.FirebaseApp to libfakegms.
5.40.4.0-FOSS
- Pulled new upstream.
5.39.3.0-FOSS
- Pulled new upstream.
5.38.5.0-FOSS
- Pulled new upstream.
5.37.4.0-FOSS
- Pulled new upstream.
5.36.3.0-FOSS
- Added RemoteMessage.PRIORITY_HIGH to libfakegms.
5.35.3.0-FOSS
- Pulled new upstream.
5.34.10.0-FOSS
- Reorganised gradle/verification-metadata.xml
5.34.4.0-FOSS
- Pulled new upstream.
5.33.6.0-FOSS
- Pulled new upstream.
5.32.14.0-FOSS
- Pulled new upstream.
5.31.6.0-FOSS
- Removed one patch from this build as it was accepted upstream
5.30.6.0-FOSS
- Pulled new upstream.
5.29.7.0-FOSS
- Pulled new upstream.
5.28.10.0-FOSS
- Pulled new upstream.
5.28.6.0-FOSS
- Updated to new Gradle dependency verification, and upstream fixes.
5.28.5.0-FOSS
- Pulled new upstream.
5.27.13.0-FOSS
- Updated libfakegms to handle status codes in wallet.
5.26.11.0-FOSS
- Pulled new upstream.
5.25.7.0-FOSS
- Added ENVIRONMENT_PRODUCTION to WalletConstants in libfakegms.
5.24.17.0-FOSS
- Large addition of com.google.android.gms.wallet stubs to support new ':donations' project in upstream source.
- Added place marker to OSM map and refactored URL construction. Thanks to sergimn for suggesting it.
5.24.14.0-FOSS
- Pulled new upstream.
5.24.5.0-FOSS
- Updated build.gradle to match upstream reformat of libs.
- Changed Github action to match upstream e.g. use Java 11.
- Updated libfakegms Task.java to match Molly.
5.23.7.0-FOSS
- Slimmed libfakegms build.gradle and changed fragment dependency to fragment-ktx. Now it properly uses witness-verification to validate dependencies.
- Added onCompleteListener to com.google.android.gms.tasks to support new Signal upstream features.
5.22.7.0-FOSS
- Tweaked build.gradle to ignore GMS in selectableFlavors.
- Removed all flavors from libfakegms as no longer needed.
5.21.6.0-FOSS
- Pulled new upstream.
5.20.4.0-FOSS
- Pulled new upstream.
5.19.4.0-FOSS
- Removed Gradle memory boost and Instantiatable lint disable; unneeded.
- Updated OSMDroid to 6.1.11.
5.18.5.0-FOSS
- Pulled new upstream.
5.17.3.0-FOSS
- Pulled new upstream.
5.16.3.0-FOSS
- Pulled new upstream.
5.15.6.0-FOSS
- Updated libfakegms with some tips from Valldrac for upstream Firebase/Tasks changes.
- Updated osmdroid to 6.1.10.
5.14.5.0-FOSS
- Pulled new upstream.
5.13.8.0-FOSS
- Pulled new upstream.
5.12.3.0-FOSS
- Pulled new upstream.
5.11.5.0-FOSS
- Updated Java version to 8.0.292.
5.10.8.0-FOSS
- Added patch to remove new GMS import from emoji/EmojiJsonParser.kt
5.9.7.0-FOSS
- Pulled new upstream.
5.8.10.0-FOSS
- Pulled new upstream.
5.7.6.0-FOSS
- Specified Java version in android.yml and boosted Java/Gradle memory.
5.6.3.0-FOSS
- Pulled new upstream.
5.5.5.0-FOSS
- More build types in libfakegms to match upstream.
5.4.12.0-FOSS
- Added some more required Firebase messaging stubs.
- Changed map text URLs to openstreetmap.org.
5.3.9.0-FOSS
- Removed Firebase ML Vision from libfakegms as Signal has switched to using Android's inbuild FaceDetector.
- Added getMessageId() and onDeleteMessages() to Firebase stubs.
- Tweaks to CI workflow, logs SHA256 of signed builds.
5.2.3.0-FOSS
- Changed CI signing to use apksigner instead of jarsigner to make V2 signatures for better compatibility.
- Added a couple of extra map types if other forks want to use this.
5.1.9.0-FOSS
- Added Github CI script to automatically build and sign releases.
- Added "perf" buildtype to libfakegms.
5.0.8.1-FOSS
- Added OpenStreepMap support thanks to Fumiakiy Yoshimatsu.
- Switched SDK/tools version in libfakegms to use variables.
5.0.8.0-FOSS
- A fix for file transfers from valldrac.
4.77.3.0-FOSS
- Worked around a FcmReceiveService 'Instantiatable' error by disabling that check in lint options :(.
- Added more flavor dimensions to match upstream - production/staging.
4.75.8.0-FOSS
- Refactored code into "libfakegms" library in project folder.
- Adopted Firebase Messaging and ML Kit Vision stubs from valldrac.
4.61.6.0-FOSS
- Signal added Firebase ML Vision binaries. Dummy file to override.
4.61.0.0-FOSS
- Worked around Signal using GMS libs for array concatenation.
4.60.5.0-FOSS
- Initial release.