A modern media hub for Android, iOS, and Linux Desktop built with Kotlin Multiplatform and Compose Multiplatform.
Stremio addon ecosystem • Cross-platform
In-app player — libVLC playback with subtitles, transport controls, track/source switching, and resume-from-position.
| Browse & discover | Title details & episodes |
|---|---|
![]() |
![]() |
| Multi-source stream selection | Playback with subtitles |
![]() |
![]() |
[EDIT] :Update as of 7/18/2026: I am considering taking this out of maintenence and back into active developement AND I will be working towards keeping it working untill the official version is released. The goal right now is to make it so that once the official version is released users can simply update from my fork to the offcial repo's version.
This is a fork of NuvioMedia/NuvioMobile with an added Linux Desktop target via Kotlin Multiplatform JVM + VLCJ.
The upstream project is an unofficial Kotlin Multiplatform rewrite of the original React Native Nuvio 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.
This fork adds a community-maintained Linux desktop build. Video playback, audio, authentication, and addon persistence are working. See known issues below.
This project is an independent, unofficial rewrite based on the work of the original developers of NuvioTV. This repository is not the original React Native application.
Because the original NuvioTV project was licensed under the GNU General Public License v3.0 (GPL-3.0), this repository is also strictly licensed under the GPL-3.0.
If you fork, modify, or distribute this code, you must also open-source your modifications under the GPL-3.0.
Note
The 0.3.x alpha (0.3.0 / 0.3.1) was withdrawn — it was the 1:1 upstream port, and it is not being continued. 0.3.2 is a stable release and is not a continuation of it; the version number is higher purely so that anyone left on an alpha is offered it as a normal upgrade. If you never turned experimental updates on, none of this affected you. Background: #5.
Note
This community fork exists to give Linux desktop a working Nuvio today — the official desktop port targets macOS and Windows first. It's built on the upstream NuvioMobile Kotlin Multiplatform / Compose codebase — the same shared commonMain that powers the Android and iOS apps — with a Linux/JVM desktop layer added on top: VLCJ playback, MPRIS media keys, hardware-accelerated video, and .deb + AppImage packaging. It's actively used and regularly released (see Releases). Development is fast-moving and AI-assisted, so expect the occasional rough edge — issues and pull requests are very welcome.
Important
Nuvio backend switch (July 1, 2026): the official Nuvio backend moved to
https://api.nuvio.tv. The old hosted Supabase project was decommissioned, so builds made
before the switch can no longer log in or sync — they were logged out when the switch
completed. To recover: rebuild with the new backend URL/key below (or install a release built
after the switch), then sign in again. Server-side account data was not wiped.
No configuration is required. When local.properties is absent (or has no Supabase keys),
builds default to the official Nuvio backend (https://api.nuvio.tv, the post-switch backend) —
accounts, profiles, and cross-device sync work out of the box, same as official builds.
To use your own backend instead: set up a free Supabase project at
supabase.com, then copy the Project URL and anon/public key from
Project Settings → API into a local.properties file in the root of the project (git-ignored,
see local.properties.example):
SUPABASE_URL=https://your-project-id.supabase.co
SUPABASE_ANON_KEY=your-anon-public-key(You will need to provision the Nuvio schema yourself; accounts on your own backend are separate from official Nuvio accounts. Set both keys or neither — a partial override fails the build.)
Download the latest Android build from NuvioMedia/NuvioMobile Releases.
Status: Community-maintained and actively developed. Video, audio, OAuth, addon persistence, debrid, resume-across-restart, and experimental P2P torrent streaming all working. See known issues.
Download Nuvio-<version>-x86_64.AppImage from the
Releases page. It bundles libVLC and its
full codec set, so there is nothing else to install — it runs on any glibc ≥ 2.35 distribution
(Ubuntu 22.04 LTS+, Debian 12+, Fedora, Arch, Mint, …):
chmod +x Nuvio-*-x86_64.AppImage
./Nuvio-*-x86_64.AppImageUsing AppImageLauncher? Older versions mishandle modern AppImages — update it to the latest release, or launch from a terminal with
APPIMAGELAUNCHER_DISABLE=1 ./Nuvio-*-x86_64.AppImage.
Download the latest nuvio_<version>_amd64.deb from the
Releases page, then:
# VLC provides the libVLC runtime the player needs — it is NOT bundled in the .deb
sudo apt install vlc
# Install Nuvio (apt resolves the remaining runtime dependencies and the emoji font)
sudo apt install ./nuvio_*_amd64.debNuvio then appears in your application launcher. To update, download the newer .deb and
run the same command, or use the in-app update prompt.
Note: libVLC is a hard requirement at runtime. If playback fails right after a
.debinstall, install VLC withsudo apt install vlcand relaunch.
# Build + runtime dependencies (Ubuntu/Debian/Mint)
sudo apt install openjdk-17-jdk libvlc-dev vlc
# Optional: VA-API drivers for hardware video acceleration
# Intel: sudo apt install intel-media-va-driver
# AMD: sudo apt install mesa-va-drivers
# NVIDIA: sudo apt install nvidia-vaapi-driver
# Optional: desktop notifications
sudo apt install libnotify-bin
# Clone
git clone https://github.com/blarns/NuvioForLinux.git
cd NuvioForLinux
# Add local.properties with your Supabase keys (see Environment Setup above)
# Build and run
./gradlew composeApp:runSee LINUX_QUICKSTART.md for quick setup, or LINUX_DESKTOP.md for comprehensive documentation.
Working:
- ✅ HLS, DASH, RTSP, HTTP streaming via VLCJ/libVLC
- ✅ Audio playback
- ✅ Subtitle support (SRT, VTT, ASS)
- ✅ OAuth authentication with persistent session
- ✅ Full addon ecosystem support with persistent storage
- ✅ Addon update notifications — twice-weekly manifest re-checks with an Updates section, plus one-click URL swap (⇄) for reconfigured addons (AIOStreams and friends)
- ✅ JavaScript plugin/scraper support (QuickJS runtime) — Settings → Plugins
- ✅ Continue Watching, Library, Search
- ✅ Resume playback from where you left off (persists across restarts)
- ✅ Right-click context menus (mark watched, mark previous/season watched, play manually, remove from Continue Watching)
- ✅ In-app update notifications — checks for new releases on startup and downloads the
.deb - ✅ TMDB enrichment, MDBList ratings, and Debrid (Torbox/Real-Debrid) settings — configurable and persistent (Settings → Integrations)
- 🧪 Peer-to-peer (P2P) torrent streaming — experimental, off by default. Stream torrents without a debrid subscription, via a bundled TorrServer engine. Enabling it (Settings → P2P) requires accepting a consent dialog.
⚠️ P2P exposes your real IP address to other peers in the swarm — use a VPN. Debrid (which resolves torrents server-side over HTTPS, never exposing your IP) remains the recommended default. - ✅ Hardware video acceleration via VA-API (Intel/AMD) or NVDEC (NVIDIA) — toggle in Settings → Playback
- ✅ Audio output selection (Auto / PulseAudio / ALSA / JACK) — Settings → Playback
- ✅ Keyboard shortcuts (Space, arrows, M, F for fullscreen, scroll wheel for volume)
- ✅ Media key integration via MPRIS2 (works with system panel and
playerctl) - ✅ Episode release notifications via
notify-send - ✅ App menu integration — run
scripts/install-desktop.shto add Nuvio to your application launcher - ✅ Window size persists between sessions
See CHANGELOG.md for the full release history.
Tested on: Linux Mint 22, kernel 6.8, X11, Intel Iris Xe, Bluetooth audio
git clone https://github.com/blarns/NuvioForLinux.git
cd NuvioForLinux
./gradlew composeApp:run # Linux desktop
./gradlew composeApp:assembleFullDebug # AndroidcomposeApp/src/commonMain/— shared UI, features, repositoriescomposeApp/src/androidMain/— Android-specific integrationscomposeApp/src/iosMain/— iOS-specific integrationscomposeApp/src/desktopMain/— Linux/JVM desktop implementationsiosApp/— native Xcode project
Versioning is driven from iosApp/Configuration/Version.xcconfig.
| Key | Action |
|---|---|
| Space | Play / Pause |
| ← / → | Seek ±10 seconds |
| ↑ / ↓ | Volume ±5% |
| M | Toggle mute |
| F | Toggle fullscreen |
| Scroll wheel | Volume |
Mouse: right-click a poster, episode, season, or Continue Watching card to open its context menu (mark watched, play manually, remove, etc.) — the desktop equivalent of long-press on mobile.
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 please visit the Legal & Disclaimer Page.
- Kotlin Multiplatform
- Compose Multiplatform
- AndroidX Media3 (Android)
- VLCJ / libVLC (Linux Desktop)
- AVFoundation (iOS)



