1
0
Fork 0
mirror of https://github.com/fluxerapp/flutter_client.git synced 2026-07-11 03:18:03 +00:00
Official Fluxer Mobile client built on the Flutter framework.
  • Dart 99.1%
  • Swift 0.4%
  • C++ 0.2%
  • Ruby 0.1%
  • CMake 0.1%
Find a file
2026-07-10 23:38:20 +02:00
.bundle Create config 2026-06-04 22:57:35 +02:00
.github chore: remove duplicate security policy 2026-07-06 13:32:55 +01:00
.vscode chore(vscode): add launch option 2026-06-27 18:23:21 +02:00
android chore(android): add languages 2026-07-04 22:17:40 +02:00
assets feat(emojis): support Unicode 16 and 17 2026-07-08 14:19:41 +02:00
dart_sdk@2fe9cedd47 feat(guild): add creating and organizing channels 2026-07-07 16:41:14 +02:00
docs fix(deeplinks): block oauth2 links 2026-07-02 13:12:57 +02:00
fastlane fix(fastlane): iOS canary issue 2026-07-10 00:18:14 +02:00
integration_test fix(fcm): improvements to fcm flow and added tests 2026-06-30 13:29:33 +02:00
ios fix(push): local ignore notifications when app is in forground 2026-07-08 12:52:45 +02:00
lib fix(chat): preserve message list scroll position 2026-07-10 23:38:20 +02:00
linux feat(self-hosted): add sso login support 2026-06-23 20:14:17 +02:00
macos chore: add app_settings 2026-07-05 00:05:45 +02:00
packages feat(fluxer_markdown): design match web tables 2026-07-10 23:07:39 +02:00
test fix(chat): preserve message list scroll position 2026-07-10 23:38:20 +02:00
tool fix(fcm): use native notification forwarding services 2026-07-03 20:30:31 +02:00
web chore: update apps name 2026-03-28 16:48:29 +01:00
windows feat(self-hosted): add sso login support 2026-06-23 20:14:17 +02:00
.gitignore Revert "fix(workflows): remove native measure setup (use pure dart)" 2026-06-26 23:06:56 +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 feat(observability): replace Measure with SigNoz 2026-06-27 07:48:39 +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
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 build: pin xcodeproj where 70 is 2026-07-05 01:07:22 +01:00
Gemfile.lock build: pin xcodeproj where 70 is 2026-07-05 01:07:22 +01: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 packages 2026-07-03 19:40:28 +02:00
pubspec.lock feat(guild): add creating and organizing channels 2026-07-07 16:41:14 +02:00
pubspec.yaml feat(guild): add creating and organizing channels 2026-07-07 16:41:14 +02:00
README.md feat(README): add translate badge 2026-07-02 15:31:19 +02:00

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.

Fluxer graphic logo

Donate Documentation AGPLv3 License Dart analyze Translation status

Fluxer Flutter Client

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.

Community

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.

Download

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.

Android (APK)

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.

1. Pick a push variant

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.

2. Pick a release channel

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

3. Pick the APK file on GitHub

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> is beta (or stable when available)
  • <variant> is fcm or oss
  • <abi> is usually arm64-v8a for modern phones; use the universal APK if unsure

Examples for most users:

  • app-arm64-v8a-betafcm-release.apk
  • app-betafcm-release.apk (universal fallback)

OSS example (degoogled phones):

  • app-arm64-v8a-betaoss-release.apk

Auto-updates with Obtainium

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:

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

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.

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 setup a relay service for self hosted instances to use. This is something that will be worked on in the future.

SSO (Single Sign-On) login is supported for self-hosted instances that have configured an OIDC/OAuth2 provider. When connecting to an instance with SSO enabled, the app will display the appropriate login options based on the server's configuration. If SSO is enforced, only the SSO login flow will be available. If SSO is optional, both SSO and email/password login can be used.

For mobile SSO, register this redirect URI with your OIDC provider:

fluxer://auth/sso/callback

Contributing

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

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)

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

Coming soon!

API

The Flutter client uses the dart_sdk to send requests to the Fluxer API which is generated from the OpenApi spec.

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.