No description
Find a file
KhooLy 31cfd2b931 Add Koin as the DI mechanism for shared code
Hilt is Android/Dagger-only and can't run on Kotlin/Native, so it
can't be used for anything moving into :shared. Koin is the standard
KMP alternative — this wires it up for real: a Koin module
(sharedModule) providing GreetingViewModel via the koin viewmodel DSL,
CmpSmokeTest now resolves it through koinViewModel() instead of
constructing it directly, and AppApplication.onCreate() calls
initSharedKoin() at startup so this isn't just compile-checked dead
code — Koin actually starts alongside Hilt (the two coexist fine,
verified by compiling the full app afterward).

This is the pattern for every ViewModel/ScreenModel that moves to
:shared going forward. HomeViewModel/DetailViewModel themselves stay
Hilt-based in app for now — porting them means porting their
repositories to KMP first, which is separate, larger work.

Verified compiling for android, iosArm64, iosSimulatorArm64, and both
app product flavors still build with Koin initialized at startup.
2026-07-13 03:09:18 +03:00
.github/workflows Point fluxa-core references at the FluxaMedia org 2026-07-10 13:06:48 +03:00
app Add Koin as the DI mechanism for shared code 2026-07-13 03:09:18 +03:00
build-logic Add Compose Multiplatform module 2026-07-13 02:47:02 +03:00
core Convert core module to Kotlin Multiplatform 2026-07-13 02:30:20 +03:00
data Align mobile trailer and account sync flows 2026-07-12 02:47:24 +03:00
gradle Add Koin as the DI mechanism for shared code 2026-07-13 03:09:18 +03:00
player Align mobile trailer and account sync flows 2026-07-12 02:47:24 +03:00
shared Add Koin as the DI mechanism for shared code 2026-07-13 03:09:18 +03:00
tools/libass Fix libass fonts and glyph rendering to match mpv 2026-07-03 23:43:50 +03:00
.gitignore Ignore .gradle state dirs in included builds 2026-07-03 23:45:20 +03:00
build.gradle.kts Add Compose Multiplatform module 2026-07-13 02:47:02 +03:00
gradle.properties Initial commit 2026-06-05 14:43:08 +03:00
gradlew Initial commit 2026-06-05 14:43:08 +03:00
gradlew.bat Initial commit 2026-06-05 14:43:08 +03:00
README.md Point fluxa-core references at the FluxaMedia org 2026-07-10 13:06:48 +03:00
settings.gradle.kts Add Compose Multiplatform module 2026-07-13 02:47:02 +03:00

Fluxa

Fluxa

A fast, native media client for Android phones, tablets, and TV.
Browse catalogs, track what you watch, and play anything the Stremio addon ecosystem exposes.

Contributors Forks Stars Issues License

Download · Features · Building from source


What it does

Fluxa connects to any Stremio-compatible addon and turns it into a proper Android app: a home feed with genre and category browsing, a calendar of upcoming episodes, a library with continue-watching and resume positions, and two-way watch tracking with Trakt, MyAnimeList, and Simkl. Playback runs through Media3/ExoPlayer and MPV, including direct torrent/magnet support, with no telemetry.

The Android shell handles all platform I/O — HTTP, Room, ExoPlayer, audio, notifications — but the actual decision-making lives in fluxa-core, a headless Rust library that runs the same logic across Android and desktop targets. Rust never touches the network directly; it emits typed effects that the Kotlin layer fulfills.

Features

  • Catalogs & discovery — home feed, genre/category grids, search across every installed addon, and a calendar of upcoming episodes for what you're following
  • Library — watchlist, continue watching with resume position, and custom collections, with import support for existing lists
  • Watch tracking — two-way sync with Trakt, MyAnimeList, and Simkl
  • Playback — subtitle and audio track selection, intro/outro/recap skip, and direct torrent/magnet support
  • Profiles — multiple local profiles on one install, each with its own library, addons, and sync accounts
  • Addons — install and manage Stremio-compatible addons directly from the app
  • TV-ready — a dedicated Android TV / Google TV interface, not a stretched phone layout
  • Auto-update — checks for and installs new versions in-app

Download

Grab the latest build from Releases. Requires Android 8.0+ (API 26).

Variant Package Target
mobile com.fluxa.app.mobile Phone & tablet
tv com.fluxa.app.tv Android TV / Google TV

Each variant ships per-ABI APKs — pick the one matching your device, or let the in-app updater do it for you:

ABI Devices
arm64-v8a Most phones/tablets/TVs from the last ~6 years
armeabi-v7a Older 32-bit ARM devices
x86 Intel-based Android (emulators, some set-top boxes)

Building from source

git clone https://github.com/KhooLy/Fluxa.git
cd Fluxa
./gradlew :app:assembleMobileDebug
# or for TV
./gradlew :app:assembleTvDebug

Prerequisites

  • JDK 17+
  • Rust stable with the Android NDK targets (aarch64-linux-android, armv7-linux-androideabi, i686-linux-android)
  • Android NDK (version pinned in app/build.gradle.kts)
  • fluxa-core checked out as a sibling directory (../fluxa-core) — it also provides fluxa-streaming-engine (../fluxa-streaming-engine)

The Rust libraries (fluxa_core, fluxa_streaming_engine) are cross-compiled for all Android ABIs automatically as part of the Gradle build; no manual cargo build step is needed.

Architecture

Fluxa is split into two native Rust libraries and an Android Kotlin shell:

┌─────────────────────────────────────────────────────────┐
│                  Android (Kotlin + Compose)              │
│   UI · ViewModel · Repository · OkHttp · Room · Player  │
├───────────────────────────┬─────────────────────────────┤
│      fluxa_core           │    fluxa_streaming_engine    │
│  Headless brain: state,   │  Video proxy, Dolby Vision   │
│  policy, stream planning  │  rewrite, torrent engine     │
└───────────────────────────┴─────────────────────────────┘

Rust never calls the network directly. Instead it emits typed effects that Kotlin executes:

Kotlin  →  dispatch(action)
        ←  { state, effects: [{ id, type, payload }] }
Kotlin  →  executes each effect (OkHttp / Room / audio / ...)
        →  completeEffect({ effectId, result })
        ←  { state, effects: [...] }

This keeps fluxa_core fully portable — the same crate compiles for Android (JNI), desktop (native Rust), and future targets without any platform-specific code inside Rust.

Stack

Kotlin · Jetpack Compose · Rust · AndroidX Media3 / ExoPlayer · MPV · librqbit · UniFFI · Hilt · Room · OkHttp + Retrofit · Coil


Legal — Fluxa is a client-side interface for user-installed Stremio addons. It does not host, serve, or distribute any media content. All streams come from third-party addons chosen by the user. Fluxa is not affiliated with any addon developer, repository, or content provider. Users are responsible for ensuring they have the right to access what they stream.