Caution
The Fluxer Flutter mobile client is still in beta so features will be missing or broken. Currently the only way to report issues is on the Fluxer Mobile community (Plutonium members only), this will change in the future.
Note there is currently no set release date for the app.
This is the repo for the official Fluxer mobile app powered by Flutter (desktop is in the works also but mobile is the main focus currently).
You can follow more about the V1 development and what features are planned/implemented in this Roadmap issue.
Note
Currently the community is locked to Fluxer Plutonium members only. This limit will be lifted after the beta period (the link below will not work yet).
For updates, support, and discussion, join the Fluxer Mobile community on Fluxer.
Note
Unless you are using a degoogled operating system, you should use the FCM client. If you don't know if your OS is degoogled, it likely is not.
Apple App Store: Coming when V1 is finished.
Google Play Store: Coming when V1 is finished.
Fdroid: Coming when V1 is finished.
iOS Testflight: Currently only available to Plutonium users.
Quick pick (most users): download the beta FCM APK from GitHub releases — e.g. app-arm64-v8a-betafcm-release.apk on a phone from the last few years.
| If your phone… | Install | Notifications use… |
|---|---|---|
| Has Google Play Services (typical Samsung/Pixel/etc.) | FCM build | Google Firebase Cloud Messaging |
| Is degoogled / has no Google apps | OSS build | UnifiedPush (you must install a distributor app such as ntfy) |
Majority of users will use the FCM version.
You cannot switch push variants in-app: FCM and OSS are separate APKs for the same release channel and will replace each other if installed.
- Beta — recommended during the beta period; pre-release builds for testing.
- Stable — production builds; will appear on GitHub releases when V1 launches (same timing as Play Store / F-Droid entries above).
On a release page, assets follow this naming pattern:
- Per-CPU (smaller, preferred):
app-<abi>-<channel><variant>-release.apk - Universal (works on all CPUs, larger):
app-<channel><variant>-release.apk
Where:
<channel>isbeta(orstablewhen available)<variant>isfcmoross<abi>is usuallyarm64-v8afor modern phones; use the universal APK if unsure
Examples for most users:
app-arm64-v8a-betafcm-release.apkapp-betafcm-release.apk(universal fallback)
OSS example (degoogled phones):
app-arm64-v8a-betaoss-release.apk
Obtainium can install and auto-update from GitHub. Beta releases are marked pre-release on GitHub, so the link must enable that option — the simple obtainium://add/... URL cannot do this.
Use one of these one-click links (matching your push variant from step 1). Each enables pre-releases, filters to the correct APK (betafcm or betaoss), and picks the right CPU architecture automatically:
- Fluxer Beta (FCM): Add to Obtainium
- Fluxer Beta (OSS): Add to Obtainium
Stable, beta, and canary Android release builds on GitHub are signed with this SHA-256 certificate fingerprint:
91:E4:98:E1:B8:A6:C8:BA:99:41:5E:DB:29:78:29:6B:6C:58:BA:A5:E2:D2:A6:49:CE:C6:2D:A7:A8:29:C7:BC
Warning
During the beta period the only place to report bugs will be in the Fluxer Mobile community (they are mirrored to Github still). Once the beta period finishes you will be able to report issues on Github and the community.
During the current beta, we are only accepting contributions for bug fixes. To submit a PR, it must be for a linked reported issue.
After the beta period, we will be updating these guidelines.
Pull requests should target the canary branch. For local testing, use the canary build flavor so your build matches that branch (see Mobile builds below).
We welcome contributions for app translations. Translations are managed through our own Weblate instance. More information about that will be linked here soon.
- Flutter / Dart — cross platform UI (mobile today, desktop in progress)
- Riverpod — state management (with code generation)
- go_router — navigation and deep links
- Drift — local SQLite database
- Dio — HTTP client
- fluxer_dart — Fluxer API client (OpenAPI generated)
- WebSockets — real time gateway events
- LiveKit / WebRTC — voice and video calls
- FCM / UnifiedPush / APNs — push notifications (platform dependent)
Riverpod generated files are not committed, so you need to generate them before running the project.
dart run build_runner build --delete-conflicting-outputs
Environments are canary, beta, and stable. Pass compile-time defines with --dart-define-from-file=tool/dart_defines/<environment>.json (each file sets APP_ENVIRONMENT) plus --dart-define=PUSH_PROVIDER=... as needed.
Application ID / bundle ID: beta and stable use com.fluxer. canary uses com.fluxer.canary
Android uses two Gradle flavor dimensions: environment plus push (fcm or unifiedpush). The variant name combines both in camelCase (for example stableFcm, betaUnifiedpush). PUSH_PROVIDER must match the push dimension: fcm for Firebase Cloud Messaging (adds deps via pubspec.firebase.deps.yaml) or unifiedpush for UnifiedPush.
iOS uses schemes with the same environment names (canary, beta, stable). There is no push flavor dimension; push is always Apple Push Notification service, so use PUSH_PROVIDER=apns.
Example (Android, stable with FCM):
flutter run --flavor stableFcm --dart-define-from-file=tool/dart_defines/stable.json --dart-define=PUSH_PROVIDER=fcm
For the same environment on iOS, swap the flavor for the scheme and set PUSH_PROVIDER=apns, for example --flavor stable, --dart-define-from-file=tool/dart_defines/stable.json, and --dart-define=PUSH_PROVIDER=apns.
flutter build ios --flavor canary --dart-define-from-file=tool/dart_defines/canary.json --dart-define=PUSH_PROVIDER=apns
Coming soon!
The Flutter client uses the dart_sdk to send requests to the Fluxer API which is generated from the OpenApi spec.
