Add documentation on F-Droid publishing requirements and considerations

This commit is contained in:
MartinBraquet
2026-07-20 20:22:36 +02:00
parent 153d52ece3
commit 1c81d2c56c

46
docs/fdroid.md Normal file
View File

@@ -0,0 +1,46 @@
# F-Droid publishing
Can Compass be published on [F-Droid](https://f-droid.org/)? Short version: **licensing allows it, but the
Google/Firebase dependencies block the official repo.**
## Eligibility
- **License** — ✅ AGPL-3.0 + MIT. Meets F-Droid's hard FOSS-license requirement.
- **Buildable from source** — feasible; it's a Capacitor WebView shell over the `web` build.
- **Backend** — ⚠️ the app wraps the hosted service (compassmeet.com, Supabase + Firebase). F-Droid tags
this `NonFreeNet` ("depends on a non-free network service") regardless of the client code.
## Blocking dependencies
Proprietary Google libraries F-Droid's main repo bans. From `android/app/build.gradle`:
- `com.google.firebase:firebase-analytics` — proprietary **and** tracking; an outright anti-feature.
- `com.google.firebase:firebase-auth` — proprietary Google auth.
- `com.google.android.gms:play-services-auth` — proprietary Google Play Services.
- `com.google.android.play:app-update` / `app-update-ktx` — proprietary in-app-update lib.
- `com.google.gms.google-services` Gradle plugin + `google-services.json` — non-free build tooling/config.
From the web bundle (`web/package.json`):
- `firebase` (11.1.0) — proprietary JS SDK compiled into the WebView assets.
- `@capacitor/push-notifications` — wired to Firebase Cloud Messaging (FCM), which is proprietary.
## Paths to ship
**Official F-Droid repo** — significant work:
- Remove `firebase-analytics` (or swap for self-hosted Matomo/Plausible).
- Replace Firebase Auth with a Supabase-side / FOSS auth flow.
- Replace FCM push with **UnifiedPush** (the F-Droid-blessed push system) — the biggest lift.
- Drop the in-app-update lib (F-Droid handles updates).
- Remove `google-services.json` and the gms plugin.
- Add F-Droid metadata + a reproducible build recipe. A `NonFreeNet` label likely remains because the
backend is a hosted service.
Estimate: days-to-weeks, dominated by the auth + push replacement.
**Self-hosted F-Droid repo** — easy:
- Use `fdroidserver` to host the existing signed APK/AAB at your own repo URL (Firebase and all). The
anti-feature bans are official-repo _policy_, not enforced by the tooling. Users add the repo manually
and get auto-updates; you skip Google's storefront. Setup is roughly an afternoon.