Migrates the long tail of user-facing English literals identified by the
audit report — 65 new keys across 14 source files plus the matching FR
translations (tutoiement, NBSP, curly apostrophes).
Categories:
- TMDB filter placeholders in CollectionEditorScreen (10 keys, "28,12",
"2020-01-01", "100", "en, ko, ja, hi", etc.)
- Collection editor titles & errors in CollectionEditorRepository
(TMDB/Trakt fallback titles, validation errors, "Could not load …")
- Folder type labels in FolderDetailRepository ("Trakt Series List",
"Trakt Movie List")
- TMDB resolver errors (api key required, not found, missing IDs, discover
no data) in TmdbCollectionSourceResolver
- Trakt public list resolver errors and search-result fallbacks in
TraktPublicListSourceResolver (rate limit, not public, items/likes
counts, credentials missing, error_with_code formatter)
- Comments load failure in TraktCommentsRepository
- Trakt status messages (Connected/Disconnected) in TraktAuthRepository
- AppUpdater exceptions (no release, github api error, missing tag,
no APK asset) — also strips the "cmp-rewrite" branch name from the
user-facing copy
- HTTP error fallbacks shared by both AddonPlatform.{android,ios}.kt
("Request failed with HTTP %d", "Empty response body")
- AndroidAppUpdaterPlatform download/install errors
- iOS DownloadsPlatformDownloader file/HTTP errors
- SubtitleRepository addon-subtitle display format
- DownloadsLiveStatusPlatform.android Pause action (reuses
compose_action_pause) and the byte-unit table (now includes
unit_bytes_tb)
Non-Composable suspend bodies use the existing `getString(...)` pattern;
synchronous bodies (constructors, lambda inits) use the established
`runBlocking { getString(...) }` pattern already in the codebase.
Keys that overlap with #943 (the FR overhaul PR) use the exact same
names so the eventual merge is a no-op on those.
|
||
|---|---|---|
| .github | ||
| composeApp | ||
| Docs/Stremio addons refer | ||
| gradle | ||
| iosApp | ||
| libass-android@c10b71ab8b | ||
| MPVKit@97923266e4 | ||
| scripts | ||
| vendor | ||
| .gitignore | ||
| .gitmodules | ||
| build.gradle.kts | ||
| CONTRIBUTING.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
A modern media hub for Android and iOS built with Kotlin Multiplatform and Compose Multiplatform.
Stremio addon ecosystem • Cross-platform
About
Nuvio is the current Kotlin Multiplatform rewrite of the original React Native app. It delivers a shared Compose UI for Android and iOS while keeping the playback-focused experience, collection tools, watch progress flows, downloads, and Stremio addon ecosystem integration that shaped the earlier app.
The mobile app is built from a single shared codebase in composeApp, with native platform entry points for Android and iOS.
Installation
Android
Download the latest Android build from GitHub Releases.
iOS
Development
git clone https://github.com/NuvioMedia/NuvioMobile.git
cd NuvioMobile
./scripts/run-mobile.sh android
# or
./scripts/run-mobile.sh ios
Project Structure
composeApp/contains the shared Kotlin Multiplatform and Compose Multiplatform app code.composeApp/src/commonMain/contains shared UI, features, repositories, and platform-agnostic logic.composeApp/src/androidMain/contains Android-specific integrations.composeApp/src/iosMain/contains iOS-specific integrations.iosApp/contains the native Xcode project and iOS entry point.
Useful commands:
./gradlew :composeApp:assembleDebug
./gradlew :composeApp:compileKotlinIosSimulatorArm64
./scripts/build-distribution.sh
Versioning is driven from iosApp/Configuration/Version.xcconfig, which is used as the shared source of truth for both iOS and Android builds.
Legal & DMCA
Nuvio functions solely as a client-side interface for browsing metadata and playing media provided by user-installed extensions and/or user-provided sources. It is intended for content the user owns or is otherwise authorized to access.
Nuvio is not affiliated with any third-party extensions, catalogs, sources, or content providers. It does not host, store, or distribute any media content.
For comprehensive legal information, including our full disclaimer, third-party extension policy, and DMCA/Copyright information, please visit our Legal & Disclaimer Page.
Built With
- Kotlin Multiplatform
- Compose Multiplatform
- Kotlin
- AndroidX Media3
- AVFoundation and native iOS integrations