Native Android TV IPTV player — Kotlin, Compose for TV, ExoPlayer + mpv. Xtream, M3U and Stalker portals, EPG, catch-up TV, profiles and downloads.
See the code
Your own IPTV player for Android TV
Fast · modern · remote-first — bring your own M3U, Xtream or Stalker (MAC) sources
OwnTV is a native Android TV IPTV player, built with Kotlin and Jetpack Compose for TV. It runs two playback engines — libmpv (FFmpeg) for the widest compatibility, ExoPlayer (Media3) for near-instant Live TV — and it is a player only: you bring your own Xtream login, M3U playlist (URL or a local file) or Stalker/Ministra portal.
⚠️ OwnTV ships no channels, playlists, subscriptions or streams. You are responsible for the sources you add.
Open source, GPLv3, original code, built with the help of AI. Android TV only — leanback launcher, D-pad first.
📖 New here? User Guide →
Every feature, where to find it, and the remote shortcuts — on one page.
Questions, ideas, bug reports — join the OwnTV Telegram group:
.own file, optionally encrypted, locally or over Wi-Fi![]() Home — Continue Watching | ![]() Live TV — preview playing |
![]() TV Guide (EPG) | ![]() Settings |
More in extras/screenshots/.
| Area | Choice |
|---|---|
| Language | Kotlin 2.4.20 (no kotlin-android plugin) |
| Build | AGP 9.4.0 / Gradle 9.7.1, KSP2 2.3.11 |
| UI | Jetpack Compose for TV (androidx.tv:tv-material 1.1.0), Compose BOM 2026.08.00 |
| Media | libmpv (FFmpeg) · ExoPlayer/Media3 1.11.1 |
| Database | Room 2.8.5 + Paging 3.5.1 + FTS4 |
| DI · Network · Images | Koin 4.2.2 · OkHttp 5 · Coil 3.6.0 |
minSdk 26, targetSdk 36, compileSdk 37, applicationId tv.own.owntv.
Build note: there is no
kotlin-androidplugin. AGP 9 ships its own Kotlin, but the Compose compiler plugin pulls the Kotlin Gradle plugin up to thekotlinversion ingradle/libs.versions.toml— that is what compiles the app, so keep the Compose compiler plugin on exactly that version. KSP versions independently and does not have to match it.
JsonReader, so a huge
provider payload is never fully buffered. Refresh is chunked, cancellable and reports progress.PlaybackEngine interface, with a four-rung fallback ladder.
Live promotes the running preview straight to full screen with no reload.This repository is the Android TV app. Everything underneath it — database, sync, parsers, EPG, backup, settings storage, the playback engines and every translated string — is a separate core library, shared with the OwnTV Mobile app for phones and tablets.
OwnTV/ (this repo)
tv.own.owntv/
├── player/ the TV player HUD, surfaces and mini-player
├── ui/ theme + reusable components
├── features/ setup, shell, live, movies, series, search, downloads, epg, profiles, settings
└── di/ Koin modules
OwnTV_Core/ (separate repo, published as tv.own.owntv:core / :player-core)
├── core/ database, network, parsers, Stalker, repository, sync, strings
└── player-core/ libmpv + ExoPlayer engines, fallback ladder, watchdogs, diagnostics
OwnTV_Mobile/ (separate repo, the phone and tablet app on the same core)
Related repositories
extras/)Grab the signed APK from the latest release. This link always points at the newest build:
https://github.com/ahXN00/OwnTV/releases/latest/download/OwnTV.apk
4308278. Enable Apps from
Unknown Sources if prompted.adb install OwnTV.apk.Install only from this repository's Releases. Each release ships two APKs:
OwnTV.apk(arm — every real TV box, and what the Downloader code fetches) andOwnTV-x86_64-vX.X.X.apk(emulators and rare Intel boxes).
Only if you want to build from source — otherwise just install the APK.
Half the app lives in the separate OwnTV_Core repository; Gradle downloads it from OwnTV's public Maven repository by itself — no account or token needed.
git clone https://github.com/ahXN00/OwnTV.git (or download the ZIP).standard for real devices and arm emulators, x86_64 for x86_64
emulators. This matters: the native player only loads on a matching ABI.Command line: ./gradlew assembleDebug (gradlew.bat on Windows). The APK lands in
app/build/outputs/apk/.
Tested on a real TCL Google TV and the Android Studio emulator (Android TV and Google TV images).
Contributions, bug reports and ideas are welcome — open an issue or a pull request. Please keep the project's player-only, bring-your-own-source positioning and match the existing code style.
If your language is already available, contribute interface translations across OwnTV's six Android resource components on Hosted Weblate. If it is not listed, open a language request ticket first. A maintainer will review the request, register the locale, and prepare its base translation files on Hosted Weblate. Once the language appears on Hosted Weblate, you can start translating it there. The strings themselves live in OwnTV's core library repository, together with the language contributor guide covering identifiers, validation, and promotion policy.
OwnTV speaks 26 languages because people translate it on Weblate, which hosts the project free of charge for libre software. Thank you to Weblate and to every translator who has given the app their language.
Movie & series metadata and trailers are provided by TMDB. This product uses the TMDB API but is not endorsed or certified by TMDB.
Subtitle search & download is powered by OpenSubtitles.com. This product uses the OpenSubtitles API but is not endorsed or certified by OpenSubtitles. You sign in with your own OpenSubtitles account and are subject to their terms and download quotas.
Which of the two starts a stream is yours to set, separately for Live TV and for Movies & Series (Settings → Video Player): either order, or one engine only with the automatic handover turned off.
Jetpack Compose for TV · Room · Koin · OkHttp · Coil · ZXing — and the wider Kotlin / AndroidX open-source ecosystem. Thank you to all their maintainers. See each project for its own license.
OwnTV is a media player only. It ships with no channels, playlists, subscriptions, or content, and does not endorse or facilitate access to unauthorized streams. Users are solely responsible for the sources they add and for complying with the laws and rights that apply to them.
Released under the GNU General Public License v3.0 (GPLv3) — see LICENSE.
In short: you're free to use, study, modify, and redistribute OwnTV, including commercially — but any redistributed version (including forks and commercial products built on it) must also be licensed under GPLv3 and its source made available.
OwnTV is an open-source, player-only project, built with the help of AI.
178 followers · starred Jun 2026
Kotlin
96.2%
HTML
1.9%
Python
1.6%
Native Android TV IPTV player — Kotlin, Compose for TV, ExoPlayer + mpv. Xtream, M3U and Stalker portals, EPG, catch-up TV, profiles and downloads.
See the code
Your own IPTV player for Android TV
Fast · modern · remote-first — bring your own M3U, Xtream or Stalker (MAC) sources
OwnTV is a native Android TV IPTV player, built with Kotlin and Jetpack Compose for TV. It runs two playback engines — libmpv (FFmpeg) for the widest compatibility, ExoPlayer (Media3) for near-instant Live TV — and it is a player only: you bring your own Xtream login, M3U playlist (URL or a local file) or Stalker/Ministra portal.
⚠️ OwnTV ships no channels, playlists, subscriptions or streams. You are responsible for the sources you add.
Open source, GPLv3, original code, built with the help of AI. Android TV only — leanback launcher, D-pad first.
📖 New here? User Guide →
Every feature, where to find it, and the remote shortcuts — on one page.
Questions, ideas, bug reports — join the OwnTV Telegram group:
.own file, optionally encrypted, locally or over Wi-Fi![]() Home — Continue Watching | ![]() Live TV — preview playing |
![]() TV Guide (EPG) | ![]() Settings |
More in extras/screenshots/.
| Area | Choice |
|---|---|
| Language | Kotlin 2.4.20 (no kotlin-android plugin) |
| Build | AGP 9.4.0 / Gradle 9.7.1, KSP2 2.3.11 |
| UI | Jetpack Compose for TV (androidx.tv:tv-material 1.1.0), Compose BOM 2026.08.00 |
| Media | libmpv (FFmpeg) · ExoPlayer/Media3 1.11.1 |
| Database | Room 2.8.5 + Paging 3.5.1 + FTS4 |
| DI · Network · Images | Koin 4.2.2 · OkHttp 5 · Coil 3.6.0 |
minSdk 26, targetSdk 36, compileSdk 37, applicationId tv.own.owntv.
Build note: there is no
kotlin-androidplugin. AGP 9 ships its own Kotlin, but the Compose compiler plugin pulls the Kotlin Gradle plugin up to thekotlinversion ingradle/libs.versions.toml— that is what compiles the app, so keep the Compose compiler plugin on exactly that version. KSP versions independently and does not have to match it.
JsonReader, so a huge
provider payload is never fully buffered. Refresh is chunked, cancellable and reports progress.PlaybackEngine interface, with a four-rung fallback ladder.
Live promotes the running preview straight to full screen with no reload.This repository is the Android TV app. Everything underneath it — database, sync, parsers, EPG, backup, settings storage, the playback engines and every translated string — is a separate core library, shared with the OwnTV Mobile app for phones and tablets.
OwnTV/ (this repo)
tv.own.owntv/
├── player/ the TV player HUD, surfaces and mini-player
├── ui/ theme + reusable components
├── features/ setup, shell, live, movies, series, search, downloads, epg, profiles, settings
└── di/ Koin modules
OwnTV_Core/ (separate repo, published as tv.own.owntv:core / :player-core)
├── core/ database, network, parsers, Stalker, repository, sync, strings
└── player-core/ libmpv + ExoPlayer engines, fallback ladder, watchdogs, diagnostics
OwnTV_Mobile/ (separate repo, the phone and tablet app on the same core)
Related repositories
extras/)Grab the signed APK from the latest release. This link always points at the newest build:
https://github.com/ahXN00/OwnTV/releases/latest/download/OwnTV.apk
4308278. Enable Apps from
Unknown Sources if prompted.adb install OwnTV.apk.Install only from this repository's Releases. Each release ships two APKs:
OwnTV.apk(arm — every real TV box, and what the Downloader code fetches) andOwnTV-x86_64-vX.X.X.apk(emulators and rare Intel boxes).
Only if you want to build from source — otherwise just install the APK.
Half the app lives in the separate OwnTV_Core repository; Gradle downloads it from OwnTV's public Maven repository by itself — no account or token needed.
git clone https://github.com/ahXN00/OwnTV.git (or download the ZIP).standard for real devices and arm emulators, x86_64 for x86_64
emulators. This matters: the native player only loads on a matching ABI.Command line: ./gradlew assembleDebug (gradlew.bat on Windows). The APK lands in
app/build/outputs/apk/.
Tested on a real TCL Google TV and the Android Studio emulator (Android TV and Google TV images).
Contributions, bug reports and ideas are welcome — open an issue or a pull request. Please keep the project's player-only, bring-your-own-source positioning and match the existing code style.
If your language is already available, contribute interface translations across OwnTV's six Android resource components on Hosted Weblate. If it is not listed, open a language request ticket first. A maintainer will review the request, register the locale, and prepare its base translation files on Hosted Weblate. Once the language appears on Hosted Weblate, you can start translating it there. The strings themselves live in OwnTV's core library repository, together with the language contributor guide covering identifiers, validation, and promotion policy.
OwnTV speaks 26 languages because people translate it on Weblate, which hosts the project free of charge for libre software. Thank you to Weblate and to every translator who has given the app their language.
Movie & series metadata and trailers are provided by TMDB. This product uses the TMDB API but is not endorsed or certified by TMDB.
Subtitle search & download is powered by OpenSubtitles.com. This product uses the OpenSubtitles API but is not endorsed or certified by OpenSubtitles. You sign in with your own OpenSubtitles account and are subject to their terms and download quotas.
Which of the two starts a stream is yours to set, separately for Live TV and for Movies & Series (Settings → Video Player): either order, or one engine only with the automatic handover turned off.
Jetpack Compose for TV · Room · Koin · OkHttp · Coil · ZXing — and the wider Kotlin / AndroidX open-source ecosystem. Thank you to all their maintainers. See each project for its own license.
OwnTV is a media player only. It ships with no channels, playlists, subscriptions, or content, and does not endorse or facilitate access to unauthorized streams. Users are solely responsible for the sources they add and for complying with the laws and rights that apply to them.
Released under the GNU General Public License v3.0 (GPLv3) — see LICENSE.
In short: you're free to use, study, modify, and redistribute OwnTV, including commercially — but any redistributed version (including forks and commercial products built on it) must also be licensed under GPLv3 and its source made available.
OwnTV is an open-source, player-only project, built with the help of AI.
178 followers · starred Jun 2026
Kotlin
96.2%
HTML
1.9%
Python
1.6%