Official Fluxer Mobile client built on the Flutter framework.
  • Dart 99.3%
  • Swift 0.3%
  • C++ 0.1%
  • Ruby 0.1%
Find a file
2026-08-28 17:52:17 +02:00
.bundle Create config 2026-06-04 22:57:35 +02:00
.github fix(ci): increase xcode timeout 2026-08-24 16:48:34 +02:00
.vscode fix(vscode): add macos launch options 2026-08-06 23:41:39 +02:00
android fix(android): self hosted sso android link launch 2026-08-26 15:15:12 +02:00
assets feat(haptics): tune to be a quicker curve 2026-08-14 18:43:56 +02:00
dart_sdk@7cba36a550 feat(guild): improved unavailability handling 2026-08-26 01:34:44 +02:00
docs fix(deeplinks): block oauth2 links 2026-07-02 13:12:57 +02:00
fastlane fix(ci): macos missing certs 2026-08-08 17:39:42 +02:00
integration_test feat(chat): improved scrolling tests and caching 2026-08-25 21:46:15 +02:00
ios fix(iOS): removed stable icon from project 2026-08-25 19:30:35 +02:00
lib fix(settings): hide labs on self host 2026-08-28 17:52:17 +02:00
linux revert(android): remove refresh rate force 2026-07-26 21:24:47 +02:00
macos chore: update lock 2026-08-26 23:41:31 +02:00
packages fix(markdown): keep invisible-only formatting literal, fixes #668 2026-08-27 16:28:16 +02:00
test fix(settings): hide labs on self host 2026-08-28 17:52:17 +02:00
test_driver feat(chat): improved scrolling tests and caching 2026-08-25 21:46:15 +02:00
tool chore: add before commit script 2026-08-13 17:04:37 +02:00
web chore: update apps name 2026-03-28 16:48:29 +01:00
windows feat(chat): add tts message support 2026-08-07 03:04:17 +02:00
.gitignore fix(macos): webcrypto build issues 2026-08-07 20:42:52 +02:00
.gitmodules chore: swap dart_sdk branch 2026-06-28 00:06:21 +01:00
.metadata chore: run dart format on entire project 2026-04-14 22:31:27 +02:00
analysis_options.yaml chore: dart format 2026-08-13 12:29:59 +02:00
CODEOWNERS Create CODEOWNERS 2026-06-14 15:16:55 +02:00
CONTRIBUTING.md ci(dco): replace app check with workflow 2026-06-28 01:44:05 +02:00
dart_test.yaml fix(test): failing test 2026-08-06 14:02:28 +02:00
DCO chore: add DCO sign-off and AGPLv3 App Store exception (#406) 2026-06-26 04:01:25 +02:00
devtools_options.yaml chore: enable accessibility_radar devtool 2026-03-22 12:51:20 +01:00
Gemfile chore(iOS): update gems 2026-08-08 19:23:29 +02:00
Gemfile.lock chore(iOS): update gems 2026-08-08 19:23:29 +02:00
l10n.yaml feat: add base for localizations 2026-03-22 09:51:25 +01:00
LICENSE chore: add LICENSE 2026-03-20 22:20:13 +01:00
LICENSE-APPSTORE-EXCEPTION chore: add DCO sign-off and AGPLv3 App Store exception (#406) 2026-06-26 04:01:25 +02:00
pubspec.firebase.deps.yaml chore: update fcm 2026-08-20 20:15:17 +02:00
pubspec.lock chore: update lock 2026-08-26 23:41:31 +02:00
pubspec.yaml chore: revert file_picker change 2026-08-26 21:11:01 +02:00
README.md chore: update README 2026-08-25 20:51:14 +02:00

Caution

The Fluxer Flutter mobile client is still in beta so features will be missing or broken. There is currently no set release date for the app, but you can join our public beta!.

Please checkout the known issues list before reporting an issue.

Fluxer graphic logo

Donate Documentation AGPLv3 License Dart analyze Translation status

Fluxer Flutter Client

This is the repo for the official Fluxer mobile / tablet 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.

Community

For updates, support, and discussion, there is an Fluxer Labs community for all users to be able to join and give feedback.

Join here: Join Link

Download

Apple App Store: Coming when V1 is finished.

Google Play Store: Coming when V1 is finished.

Accrescent: This is something we are interested in doing after V1 and they allow app submissions again.

F-Droid: Coming when V1 is finished.

iOS TestFlight: Join with the TestFlight link.

Obtainium: This is currently the best way to install and keep the Android betas installed and updated. Find out more here.

Android (APK)

Download the latest beta build from GitHub releases.

Most phones (Samsung, Pixel, etc.): install the FCM APK. Look for betafcm in the name, e.g. app-arm64-v8a-betafcm-release.apk. Not sure which file? Pick the one with arm64-v8a, or the universal app-betafcm-release.apk.

Degoogled phones (GrapheneOS, no Google apps): install the OSS APK (betaoss) and set up UnifiedPush (e.g. ntfy).

APK naming (optional)

Files look like app-<cpu>-beta<fcm|oss>-release.apk. FCM and OSS are separate installs; installing one replaces the other.

Auto-updates with Obtainium

Easiest install: use Obtainium to 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 (FCM for most phones, OSS for degoogled). Each enables pre-releases, filters to the correct APK (betafcm or betaoss), and picks the right CPU architecture automatically:

Signing

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

Bug reporting

You must report bugs or feedback in Fluxer Labs community and bugs are synced to Github from the community.

Self-hosted instances

The mobile app supports self-hosted instances now! Push notifications are currently only supported for users using the Android OSS build.

For iOS and Android FCM build we will need to set up a relay service for self-hosted instances to use. This is something we mostly have finished (on the backend side), and will allow notifications on both platforms with zero knowledge of message content being passed through the relay.

SSO (Single Sign-On) login is supported on the mobile client. For it to fully work you need to register this redirect URI with your OIDC provider:

fluxer://auth/sso/callback

Contributing (for developers)

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).

Before committing, run bash tool/before_commit.sh to apply dart fix and format tracked Dart files (generated and vendored paths are skipped). CI uses the same file list.

Contribution licensing and sign-off

By contributing you agree your contribution is licensed under the AGPLv3 together with the App Store additional permission (see LICENSE-APPSTORE-EXCEPTION), and you sign off each commit under the Developer Certificate of Origin with git commit -s. There is no signed CLA. See CONTRIBUTING.md for details; this is checked automatically on every pull request.

Translating

App translations are welcome at any time.

Strings are managed on Weblate. You can translate in the browser — no repository checkout or pull request is needed. English is the source language.

Tech stack

  • 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)

Version numbers

Note

We will transition to this version method after the V1 update.

Releases use {year}.{month}.{public release number}, for example 2026.07.100.

  • Year and month are when the release was published.
  • Public release number is the release counter for that month. It resets at the start of each month.
  • Counters start at 100, then 200, 300, and so on (not 1, 2, 3) so they are not mistaken for a day of the month.

Build generated files

Riverpod generated files are not committed, so you need to generate them before running the project.

dart run build_runner build

Mobile builds

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

Desktop builds

We plan to provide desktop builds in the future but they will be labled as Fluxer Lite clients. These builds will not replace the Electron verison but be a seperate version you can download.

License

Fluxer Mobile is licensed under the GNU Affero General Public License v3 (AGPLv3), together with an App Store additional permission under section 7 of the AGPLv3 that allows the app to be distributed through application stores (such as the Apple App Store and Google Play) without changing the project's public AGPLv3 licensing.