[Skip to content](https://github.com/Davidona/StreamVault-IPTV#start-of-content)

You signed in with another tab or window. [Reload](https://github.com/Davidona/StreamVault-IPTV) to refresh your session.You signed out in another tab or window. [Reload](https://github.com/Davidona/StreamVault-IPTV) to refresh your session.You switched accounts on another tab or window. [Reload](https://github.com/Davidona/StreamVault-IPTV) to refresh your session.Dismiss alert

{{ message }}

[Davidona](https://github.com/Davidona)/ **[StreamVault-IPTV](https://github.com/Davidona/StreamVault-IPTV)** Public

- Sponsor







# Sponsor Davidona/StreamVault-IPTV



















##### External links





![ko_fi](https://github.githubassets.com/assets/ko_fi-53a60c17e75c.svg)



[ko-fi.com/ **davidona**](https://ko-fi.com/davidona)









[Learn more about funding links in repositories](https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository).




[Report abuse](https://github.com/contact/report-abuse?report=Davidona%2FStreamVault-IPTV+%28Repository+Funding+Links%29)

- [Notifications](https://github.com/login?return_to=%2FDavidona%2FStreamVault-IPTV) You must be signed in to change notification settings
- [Fork\\
76](https://github.com/login?return_to=%2FDavidona%2FStreamVault-IPTV)
- [Star\\
487](https://github.com/login?return_to=%2FDavidona%2FStreamVault-IPTV)


master

[**75** Branches](https://github.com/Davidona/StreamVault-IPTV/branches) [**53** Tags](https://github.com/Davidona/StreamVault-IPTV/tags)

[Go to Branches page](https://github.com/Davidona/StreamVault-IPTV/branches)[Go to Tags page](https://github.com/Davidona/StreamVault-IPTV/tags)

Go to file

Code

Open more actions menu

## Folders and files

| Name | Name | Last commit message | Last commit date |
| --- | --- | --- | --- |
| ## Latest commit<br>[![Davidona](https://avatars.githubusercontent.com/u/81252480?v=4&size=40)](https://github.com/Davidona)[Davidona](https://github.com/Davidona/StreamVault-IPTV/commits?author=Davidona)<br>[Merge pull request](https://github.com/Davidona/StreamVault-IPTV/commit/69992823c9dccf5a85581a25b0ab93ab9d15e847) [#134](https://github.com/Davidona/StreamVault-IPTV/pull/134) [from Davidona/develop](https://github.com/Davidona/StreamVault-IPTV/commit/69992823c9dccf5a85581a25b0ab93ab9d15e847)<br>Open commit details<br>3 weeks agoJun 16, 2026<br>[6999282](https://github.com/Davidona/StreamVault-IPTV/commit/69992823c9dccf5a85581a25b0ab93ab9d15e847) · 3 weeks agoJun 16, 2026<br>## History<br>[489 Commits](https://github.com/Davidona/StreamVault-IPTV/commits/master/) <br>Open commit details<br>[View commit history for this file.](https://github.com/Davidona/StreamVault-IPTV/commits/master/) 489 Commits |
| [.github](https://github.com/Davidona/StreamVault-IPTV/tree/master/.github ".github") | [.github](https://github.com/Davidona/StreamVault-IPTV/tree/master/.github ".github") | [Update beta.yml](https://github.com/Davidona/StreamVault-IPTV/commit/9c318ebb1ae6b22bf6af7552604f49cc207aa695 "Update beta.yml") | 3 weeks agoJun 16, 2026 |
| [app](https://github.com/Davidona/StreamVault-IPTV/tree/master/app "app") | [app](https://github.com/Davidona/StreamVault-IPTV/tree/master/app "app") | [Add Live TV decorative row visibility toggle](https://github.com/Davidona/StreamVault-IPTV/commit/def553916fc65251fb3ace38e728356cff4f6f66 "Add Live TV decorative row visibility toggle") | 3 weeks agoJun 16, 2026 |
| [data](https://github.com/Davidona/StreamVault-IPTV/tree/master/data "data") | [data](https://github.com/Davidona/StreamVault-IPTV/tree/master/data "data") | [some stalker fixes](https://github.com/Davidona/StreamVault-IPTV/commit/93c705c7ea9793c99f3ac7332e92db8ec69e471f "some stalker fixes") | 3 weeks agoJun 16, 2026 |
| [docs](https://github.com/Davidona/StreamVault-IPTV/tree/master/docs "docs") | [docs](https://github.com/Davidona/StreamVault-IPTV/tree/master/docs "docs") | [Document PR 119 live channel header filtering](https://github.com/Davidona/StreamVault-IPTV/commit/1a0fd462265fb8aaa7ba2e8ad987f91b44e4b5c1 "Document PR 119 live channel header filtering") | 3 weeks agoJun 16, 2026 |
| [domain](https://github.com/Davidona/StreamVault-IPTV/tree/master/domain "domain") | [domain](https://github.com/Davidona/StreamVault-IPTV/tree/master/domain "domain") | [Keep PR 119 header filtering consistent in counts](https://github.com/Davidona/StreamVault-IPTV/commit/0acc37547667bad6001d9733921e7fa8fd5c5056 "Keep PR 119 header filtering consistent in counts") | 3 weeks agoJun 16, 2026 |
| [gradle](https://github.com/Davidona/StreamVault-IPTV/tree/master/gradle "gradle") | [gradle](https://github.com/Davidona/StreamVault-IPTV/tree/master/gradle "gradle") | [Add AVC playback fallback, Fire TV HLS fix, and low-memory buffer sup…](https://github.com/Davidona/StreamVault-IPTV/commit/1fe9cf766376645bb0968b6b12eb4877e9ae2fa3 "Add AVC playback fallback, Fire TV HLS fix, and low-memory buffer support") | 3 weeks agoJun 13, 2026 |
| [player](https://github.com/Davidona/StreamVault-IPTV/tree/master/player "player") | [player](https://github.com/Davidona/StreamVault-IPTV/tree/master/player "player") | [Merge branch 'test/pr-114-local'](https://github.com/Davidona/StreamVault-IPTV/commit/9557602dbc7f3d8efaf39444c0025efa114d17e4 "Merge branch 'test/pr-114-local'") | 3 weeks agoJun 15, 2026 |
| [tools](https://github.com/Davidona/StreamVault-IPTV/tree/master/tools "tools") | [tools](https://github.com/Davidona/StreamVault-IPTV/tree/master/tools "tools") | [Offer real-time translation as a subtitle-menu track](https://github.com/Davidona/StreamVault-IPTV/commit/6521e51e9cd28eb0a4c4461c0f1f687ffd7f0beb "Offer real-time translation as a subtitle-menu track  The Settings > Playback toggle now only makes real-time translation available; it no longer starts a session on its own. Translation runs only when the user picks \"Real-time translation\" from the subtitle (\"Subs\") menu, and stops when they select a regular track or \"Off\".  Split toggleLiveTranslation into refreshLiveTranslationAvailability, activateLiveTranslation, and deactivateLiveTranslation, and replace the single enabled flow with separate available/active state.  Extract caption pacing into a standalone runCaptionDisplayLoop so it can be unit-tested without audio/network plumbing, and migrate the translation tests to JUnit + Truth (Robolectric for org.json).") | 3 weeks agoJun 15, 2026 |
| [.gitignore](https://github.com/Davidona/StreamVault-IPTV/blob/master/.gitignore ".gitignore") | [.gitignore](https://github.com/Davidona/StreamVault-IPTV/blob/master/.gitignore ".gitignore") | [Update .gitignore: exclude AI tooling, dev notes, smoke scripts, and …](https://github.com/Davidona/StreamVault-IPTV/commit/d3d265f0d2582a438a9d7a9b35a312cf0f83a017 "Update .gitignore: exclude AI tooling, dev notes, smoke scripts, and build logs") | 2 months agoMay 27, 2026 |
| [.graphifyignore](https://github.com/Davidona/StreamVault-IPTV/blob/master/.graphifyignore ".graphifyignore") | [.graphifyignore](https://github.com/Davidona/StreamVault-IPTV/blob/master/.graphifyignore ".graphifyignore") | [feat: provider sync change](https://github.com/Davidona/StreamVault-IPTV/commit/2df0d1262e9c2e2fb0df2106034f6b9010535d47 "feat: provider sync change") | 2 months agoMay 4, 2026 |
| [AGENTS.md](https://github.com/Davidona/StreamVault-IPTV/blob/master/AGENTS.md "AGENTS.md") | [AGENTS.md](https://github.com/Davidona/StreamVault-IPTV/blob/master/AGENTS.md "AGENTS.md") | [Improve live playback recovery diagnostics](https://github.com/Davidona/StreamVault-IPTV/commit/873086e130312680496ee7fd2048bb853479e171 "Improve live playback recovery diagnostics  Add live playback retry and stall recovery helpers, including HLS malformed refresh retries, live retry state preservation, TS fallback URL support, and data-source read progress tracking.  Improve player diagnostics by logging retry reasons, fatal retry reasons, sanitized source details, external player probe support, and alternate stream/content resolution fallback behavior.  Document the emulator orientation lock and 2-second live TV validation workflow, and add regression coverage for retry policy, stall recovery, log sanitization, fallback URL handling, data-source stats, media source selection, and player fallback support.  Test Plan:\n- ./gradlew :player:testDebugUnitTest :app:testDebugUnitTest\n- ./gradlew :app:assembleRelease\n- graphify update .\n- ./gradlew :app:lintDebug :player:lintDebug --continue (fails on existing lint backlog: app first failure ExternalNavigationRequest.kt:88 NewApi; player first failure PlayerTrackController.kt:200 MissingPermission)") | 2 months agoMay 20, 2026 |
| [LICENSE](https://github.com/Davidona/StreamVault-IPTV/blob/master/LICENSE "LICENSE") | [LICENSE](https://github.com/Davidona/StreamVault-IPTV/blob/master/LICENSE "LICENSE") | [Release 1.0.4 - security fixes, EPG improvements, player stability](https://github.com/Davidona/StreamVault-IPTV/commit/7c38f4f4026bf08f785ae99fa4b001fd4b8fe1ba "Release 1.0.4 - security fixes, EPG improvements, player stability") | 3 months agoApr 11, 2026 |
| [README.md](https://github.com/Davidona/StreamVault-IPTV/blob/master/README.md "README.md") | [README.md](https://github.com/Davidona/StreamVault-IPTV/blob/master/README.md "README.md") | [Document Jellyfin and recent features](https://github.com/Davidona/StreamVault-IPTV/commit/405bf5997c80ce5e9ab6baff61479a1e2eee5998 "Document Jellyfin and recent features") | 3 weeks agoJun 13, 2026 |
| [build.gradle.kts](https://github.com/Davidona/StreamVault-IPTV/blob/master/build.gradle.kts "build.gradle.kts") | [build.gradle.kts](https://github.com/Davidona/StreamVault-IPTV/blob/master/build.gradle.kts "build.gradle.kts") | [Complete feature and localization pass](https://github.com/Davidona/StreamVault-IPTV/commit/cce3f68e0d4e1fc5762c0062a17e9309c65fa038 "Complete feature and localization pass") | 4 months agoMar 20, 2026 |
| [final\_narrow\_compile.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/final_narrow_compile.log "final_narrow_compile.log") | [final\_narrow\_compile.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/final_narrow_compile.log "final_narrow_compile.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [final\_narrow\_test1.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/final_narrow_test1.log "final_narrow_test1.log") | [final\_narrow\_test1.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/final_narrow_test1.log "final_narrow_test1.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [final\_narrow\_test2.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/final_narrow_test2.log "final_narrow_test2.log") | [final\_narrow\_test2.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/final_narrow_test2.log "final_narrow_test2.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle.properties](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle.properties "gradle.properties") | [gradle.properties](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle.properties "gradle.properties") | [Add external playback mode](https://github.com/Davidona/StreamVault-IPTV/commit/134a9c53f21b9699da83392a12ec5b8091a01bb1 "Add external playback mode") | 2 months agoMay 27, 2026 |
| [gradle\_runner\_regression\_rerun.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_runner_regression_rerun.log "gradle_runner_regression_rerun.log") | [gradle\_runner\_regression\_rerun.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_runner_regression_rerun.log "gradle_runner_regression_rerun.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle\_runner\_regression\_test.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_runner_regression_test.log "gradle_runner_regression_test.log") | [gradle\_runner\_regression\_test.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_runner_regression_test.log "gradle_runner_regression_test.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle\_stalker\_overlap\_rerun.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_stalker_overlap_rerun.log "gradle_stalker_overlap_rerun.log") | [gradle\_stalker\_overlap\_rerun.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_stalker_overlap_rerun.log "gradle_stalker_overlap_rerun.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle\_stalker\_overlap\_test.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_stalker_overlap_test.log "gradle_stalker_overlap_test.log") | [gradle\_stalker\_overlap\_test.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_stalker_overlap_test.log "gradle_stalker_overlap_test.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle\_sync\_fix\_test1.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_sync_fix_test1.log "gradle_sync_fix_test1.log") | [gradle\_sync\_fix\_test1.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_sync_fix_test1.log "gradle_sync_fix_test1.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle\_sync\_fix\_test2.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_sync_fix_test2.log "gradle_sync_fix_test2.log") | [gradle\_sync\_fix\_test2.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_sync_fix_test2.log "gradle_sync_fix_test2.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle\_test1.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_test1.log "gradle_test1.log") | [gradle\_test1.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_test1.log "gradle_test1.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradle\_test2.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_test2.log "gradle_test2.log") | [gradle\_test2.log](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradle_test2.log "gradle_test2.log") | [Improve Stalker sync throughput and playback-aware deferral](https://github.com/Davidona/StreamVault-IPTV/commit/5068039ceec0ba109caf8927cd087012528baac7 "Improve Stalker sync throughput and playback-aware deferral") | 2 months agoMay 21, 2026 |
| [gradlew](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradlew "gradlew") | [gradlew](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradlew "gradlew") | [feat: add APK companion plugin support](https://github.com/Davidona/StreamVault-IPTV/commit/ab5a162a5e66d882c6fcc1f215c8948491e0bcee "feat: add APK companion plugin support  Introduce the StreamVault plugin IPC contract, Messenger client, manifest models, and plugin manager for discovering companion APK services.  Add the Plugins screen with APK install from URL, local APK file selection, manual refresh for externally installed plugins, enable/disable toggles, and plugin configuration launch support.  Wire enabled plugin capabilities into M3U provider sync, playback preparation, and Cast URL rewriting while documenting the generic plugin API without HaP-specific references.  Adjust Android visibility/minSdk settings needed for companion APK discovery and keep existing database migration fixes for quoted cast columns and favorites indexes.") | 2 months agoMay 12, 2026 |
| [gradlew.bat](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradlew.bat "gradlew.bat") | [gradlew.bat](https://github.com/Davidona/StreamVault-IPTV/blob/master/gradlew.bat "gradlew.bat") | [Initial commit: Fix build errors, empty home screen, and implement za…](https://github.com/Davidona/StreamVault-IPTV/commit/041d96b85df08c0c84dcd7299b46b8ad29abc75a "Initial commit: Fix build errors, empty home screen, and implement zapping/favorites") | 5 months agoFeb 12, 2026 |
| [local.properties.example](https://github.com/Davidona/StreamVault-IPTV/blob/master/local.properties.example "local.properties.example") | [local.properties.example](https://github.com/Davidona/StreamVault-IPTV/blob/master/local.properties.example "local.properties.example") | [feat(dev): opt-in onboarding seeding from local.properties](https://github.com/Davidona/StreamVault-IPTV/commit/88ba9f4ff4b39abede5a48db9fd91082094dd1bf "feat(dev): opt-in onboarding seeding from local.properties  Lets contributors skip the manual onboarding form on every fresh install (or after pm clear) by populating four (Xtream) or two (M3U) keys in their own local.properties. Includes a versioned local.properties.example template and a short docs/DEV_SEEDING.md walk-through.  Why this is safe to ship publicly:    * No credentials live in the diff. The example file is fully     commented out and ships only one suggestion: iptv-org's public,     legal M3U aggregation (https://iptv-org.github.io/), no auth.   * local.properties stays gitignored (existing rule, .gitignore:21).   * Six new BuildConfig fields are declared empty in defaultConfig     and overridden from local.properties only in the debug build     type. Release builds always see empty strings; release APKs can     never carry a contributor's credentials.  How it works:    WelcomeViewModel.maybeSeedDevProvider() runs once on first boot,   before the existing getProviders() observation:      1. If a provider already exists -> no-op.     2. Else if XTREAM_DEV_SERVER/USERNAME/PASSWORD are all set ->        ValidateAndAddProvider.loginXtream(...) (same code path as        the manual setup form).     3. Else if M3U_DEV_URL is set ->        ValidateAndAddProvider.addM3u(...).     4. Else -> manual onboarding runs unchanged.  On success the existing getProviders() flow flips hasProviders to true and the navigator falls through to home.  Files:    * app/build.gradle.kts                  — local.properties loader,                                             6 BuildConfig fields                                             (defaultConfig empty,                                             debug override).   * app/.../welcome/WelcomeScreen.kt      — maybeSeedDevProvider().   * local.properties.example              — versioned template, fully                                             commented out, no values.   * docs/DEV_SEEDING.md                   — short contributor guide.") | 2 months agoMay 12, 2026 |
| [settings.gradle.kts](https://github.com/Davidona/StreamVault-IPTV/blob/master/settings.gradle.kts "settings.gradle.kts") | [settings.gradle.kts](https://github.com/Davidona/StreamVault-IPTV/blob/master/settings.gradle.kts "settings.gradle.kts") | [Initial commit: Fix build errors, empty home screen, and implement za…](https://github.com/Davidona/StreamVault-IPTV/commit/041d96b85df08c0c84dcd7299b46b8ad29abc75a "Initial commit: Fix build errors, empty home screen, and implement zapping/favorites") | 5 months agoFeb 12, 2026 |
| View all files |

## Repository files navigation

# StreamVault

[Permalink: StreamVault](https://github.com/Davidona/StreamVault-IPTV#streamvault)

[![Download StreamVault APK](https://camo.githubusercontent.com/e7407fbad6c29ce999cd41d26876fd8298691b6fdf75c809667853472cddf1f0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f776e6c6f61642d53747265616d5661756c742e61706b2d3265613434663f7374796c653d666f722d7468652d6261646765266c6f676f3d616e64726f6964)](https://github.com/Davidona/StreamVault-IPTV/releases/latest/download/StreamVault.apk)[![Latest StreamVault release](https://camo.githubusercontent.com/feb22113577ceb89157d3f6c6e9708af820de8fff2117d1b48ced8c163458d54/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f44617669646f6e612f53747265616d5661756c742d495054563f646973706c61795f6e616d653d746167267374796c653d666f722d7468652d626164676526636f6c6f723d306637363665)](https://github.com/Davidona/StreamVault-IPTV/releases/latest)[![Total Downloads](https://camo.githubusercontent.com/ec8872e7f1b22af74926ea4bc7a3e5a13cce82a5071b286a742255030df9f139/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f44617669646f6e612f53747265616d5661756c742d495054562f746f74616c3f7374796c653d666f722d7468652d626164676526636f6c6f723d386235636636)](https://github.com/Davidona/StreamVault-IPTV/releases)[![Join the StreamVault Discord](https://camo.githubusercontent.com/25d5019de174ab8fb7c07930f02a952cc02e97419af685f93bec6bf525854624/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446973636f72642d4a6f696e2532305365727665722d3538363546323f7374796c653d666f722d7468652d6261646765266c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465)](https://discord.gg/eGPBMygcb)[![View changelog](https://camo.githubusercontent.com/a4164cc92885dc485b9375a21c8c7db164ba4e947fa9481cdcd438d4eefdd8ba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368616e67656c6f672d566965772d3235363365623f7374796c653d666f722d7468652d6261646765)](https://github.com/Davidona/StreamVault-IPTV/blob/master/docs/CHANGELOG.md)[![GitHub Actions status](https://camo.githubusercontent.com/461a37986b8265a896fdc8a188ffdf0669b7024f1f78ac7503c372e01912b2cd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f44617669646f6e612f53747265616d5661756c742d495054562f72656c656173652e796d6c3f6272616e63683d6d6173746572267374796c653d666f722d7468652d6261646765266c6162656c3d4349)](https://github.com/Davidona/StreamVault-IPTV/actions/workflows/release.yml)[![Support on Ko-fi](https://camo.githubusercontent.com/69fd56d6bcef2a37ad9e34c925801ef3caee29a94354dc7b6f46bd59e01a3084/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537570706f72742d4b6f2d2d66692d6666356635663f7374796c653d666f722d7468652d6261646765266c6f676f3d6b6f6669)](https://ko-fi.com/davidona)[![License](https://camo.githubusercontent.com/1768597f852377ad25af7abb61f0c21b37d60f545319f17c4aa98059654d0164/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d53747265616d5661756c745f4f534c2d3032383463373f7374796c653d666f722d7468652d6261646765)](https://github.com/Davidona/StreamVault-IPTV/blob/master/LICENSE)

StreamVault is a TV-first IPTV player for Android TV built with Kotlin, Jetpack Compose, Room, Hilt, and Media3.

It is designed for large playlists, remote-friendly browsing, fast provider switching, and a polished living-room playback experience. StreamVault supports `M3U` playlists, `Xtream Codes`, `Stalker Portal`, and `Jellyfin` providers, with dedicated flows for `Live TV`, `Movies`, and `Series`.

Built for Android TV first, StreamVault focuses on the things generic IPTV apps usually get wrong: D-pad navigation, quick channel movement, large-library organization, and a player that still feels good to use from the couch. Phone and tablet installs are also supported, but the primary UX target is TV.

## Preview

[Permalink: Preview](https://github.com/Davidona/StreamVault-IPTV#preview)

![Live TV](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/LiveTV.png)

![Movies](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/Movies.png)![Movie Details](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/MovieInfo.png)

![Home](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/Home.png)![Live TV](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/LiveTV.png)![Channel Preview](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/ChannelView.png)![Guide](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/Guide.png)![Settings](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/Settings.png)

![Series Episodes](https://github.com/Davidona/StreamVault-IPTV/raw/master/docs/images/SeriesEpisodes.png)

## Highlights

[Permalink: Highlights](https://github.com/Davidona/StreamVault-IPTV#highlights)

- Android TV-first interface with D-pad-friendly focus, navigation, and playback flows
- Provider support for `Xtream Codes`, `Stalker Portal`, `Jellyfin`, and `M3U` sources, including local playlist files
- Combined M3U live-source support with optional in-browser source switching for merged Live TV setups
- Jellyfin onboarding with password sign-in or Quick Connect QR/code flow for TV-friendly setup
- Fast live-TV browsing with preview mode, favorites, recent channels, custom groups, and pinned categories
- Transparent full-guide overlay that can open over live playback without leaving the player
- Movie and series libraries with detailed info pages, resume support, episode switching, and auto-play for next episodes
- Offline VOD downloads with grouped episode queues, pause or resume controls, and local playback for completed files
- Full EPG support with guide search, XMLTV support, and provider archive or catch-up when available
- Built-in DVR with scheduled recording, background capture, recording playback, and app-managed default storage
- Multi-view split-screen playback for watching multiple channels at once
- Plugin API for creating companion Android APKs that extend providers, playback, Cast URL handling, or configuration flows
- Strong parental controls with PIN-protected categories and automatic adult-category detection
- TV integrations including Watch Next, launcher recommendations, TV input sync, Cast support, external-player handoff, and in-app update delivery

## Features

[Permalink: Features](https://github.com/Davidona/StreamVault-IPTV#features)

### Provider Support

[Permalink: Provider Support](https://github.com/Davidona/StreamVault-IPTV#provider-support)

- `Xtream Codes`
- `Stalker Portal`
- `Jellyfin` media servers with direct library sync and TV-friendly Quick Connect support
- `M3U` playlists from URLs plus local files
- Separate onboarding and sync flows for live channels, movies, series, and guide data
- Fast switching between providers with provider-scoped settings
- Combined M3U profiles for merging multiple M3U providers into a single Live TV source
- QR-based provider pairing from a phone on the same LAN for faster TV setup

### Navigation And TV UX

[Permalink: Navigation And TV UX](https://github.com/Davidona/StreamVault-IPTV#navigation-and-tv-ux)

- Designed for Android TV and D-pad navigation first
- Fast channel browsing with large-playlist friendly layouts
- Numeric remote input for direct channel entry
- Configurable startup landing screen so the app can open Home, Live TV, Movies, Series, Guide, Downloads, Plugins, or Settings first
- Colored remote button remapping with global defaults plus playback and live-browse overrides
- Preview mode while browsing channels
- TV-friendly search and text-entry flows

### Live TV And Channel Management

[Permalink: Live TV And Channel Management](https://github.com/Davidona/StreamVault-IPTV#live-tv-and-channel-management)

- Favorites and recently watched channels
- Custom groups for personal channel collections
- Pinned categories surfaced near the top of the live guide rail
- Optional Live TV provider or source browser for M3U-based setups
- Long-press live categories for actions like pin, hide, lock or unlock, and custom-group management
- Channel reordering for favorites and custom groups
- Channel numbering modes by group or across the full provider lineup
- Predefined filter words to make category search cleaner on noisy provider data

### Guide, Search, And Playback

[Permalink: Guide, Search, And Playback](https://github.com/Davidona/StreamVault-IPTV#guide-search-and-playback)

- Full EPG grid view
- Transparent full-guide overlay over live playback
- Program search inside the guide
- XMLTV guide support with built-in EPG source management
- Manual EPG match overrides and source-priority controls from inside Settings and Guide flows
- Provider archive or catch-up support when the source exposes replay streams
- Live rewind or timeshift playback with up to 30 minutes of buffer, even when provider catch-up is unavailable
- Global search across live TV, movies, and series
- Multi-view for watching multiple live streams at once
- Player controls for subtitles, audio tracks, aspect ratio, playback speed, video quality, Cast, and external-player handoff

### Recording And Playback

[Permalink: Recording And Playback](https://github.com/Davidona/StreamVault-IPTV#recording-and-playback)

- Scheduled and background DVR recording for live channels
- Offline VOD downloads with grouped episode handling and completed-file local playback
- Program reminders from guide entries when you want a notification without scheduling a recording
- Conflict detection, persistence, and repair support for recording jobs
- App-managed default recording folder with optional custom storage selection
- In-app playback for completed recordings with a visible on-player recording indicator during active capture
- Playback troubleshooting controls for decoder mode, media session behavior, and timeout tuning
- Bundled Media3 FFmpeg audio fallback for unsupported audio codecs such as AC-3, E-AC-3, DTS, MP2, and TrueHD, with diagnostics and expert compatibility controls

### Movies And Series

[Permalink: Movies And Series](https://github.com/Davidona/StreamVault-IPTV#movies-and-series)

- Two VOD layouts:
  - Modern shelf-based browsing
  - Classic left-sidebar category browsing
- Detailed info pages for movies and series
- Continue watching, playback history, and detail-screen resume actions with saved position context
- Long-press VOD categories and custom groups for actions like hide, rename, delete, or reorder when applicable
- In-player episode switching for series
- Automatic next-episode playback when another episode is available

### Parental Controls

[Permalink: Parental Controls](https://github.com/Davidona/StreamVault-IPTV#parental-controls)

- Hide categories completely
- Lock categories behind a PIN
- Option to hide locked content from browsing views
- Adult-category detection using provider flags and category naming heuristics

### Languages And Device Support

[Permalink: Languages And Device Support](https://github.com/Davidona/StreamVault-IPTV#languages-and-device-support)

- English plus 25 translated locale packs currently ship with the app
- Locale coverage is broader and rendering is more reliable across supported languages
- Built for TV first; phones and tablets are supported, but not the primary design target

### Platform Integrations

[Permalink: Platform Integrations](https://github.com/Davidona/StreamVault-IPTV#platform-integrations)

- Android TV Watch Next integration
- Launcher recommendations and TV entry points
- Android TV Input Framework channel sync
- Google Cast sender support

### Plugins

[Permalink: Plugins](https://github.com/Davidona/StreamVault-IPTV#plugins)

- StreamVault can be extended with companion Android APK plugins.
- Plugin developers can expose provider, playback, Cast URL rewrite, and host-rendered or native configuration capabilities.
- See the [StreamVault Plugin API](https://github.com/Davidona/StreamVault-IPTV/blob/master/docs/PLUGIN_API.md) docs to create compatible plugins.

## Quick TV Tips

[Permalink: Quick TV Tips](https://github.com/Davidona/StreamVault-IPTV#quick-tv-tips)

- Long-press a channel, movie, or series to add it to Favorites or a custom group.
- Long-press a live category to open category actions such as pin, hide, lock or unlock, and custom-group actions like reorder.
- In Movies and Series, long-press categories or custom groups for hide or group-management actions where available.
- Long-press a live channel to queue it for Split Screen.
- Use the number keys on a remote while in the player to jump directly to a channel.
- While watching a series, open Episodes in the player to switch episodes without backing out to the details page.

## Download

[Permalink: Download](https://github.com/Davidona/StreamVault-IPTV#download)

- [Download latest StreamVault.apk](https://github.com/Davidona/StreamVault-IPTV/releases/latest/download/StreamVault.apk)
- The app can also detect and download newer releases in-app through GitHub Releases.
- GitHub Actions still runs build and test validation on pushes and pull requests.
- GitHub Releases are now published only when the workflow is started manually with `workflow_dispatch`, so versioned releases do not get created by mistake on every push.

## Support

[Permalink: Support](https://github.com/Davidona/StreamVault-IPTV#support)

If StreamVault is useful to you, you can support development here:

- [Support on Ko-fi](https://ko-fi.com/davidona)

## Project Structure

[Permalink: Project Structure](https://github.com/Davidona/StreamVault-IPTV#project-structure)

- `app/` Android app UI, navigation, dependency injection, and Android TV integrations
- `data/` Room database, sync, parsing, provider implementations, and repositories
- `domain/` models, repository contracts, managers, and use cases
- `player/` playback abstraction and Media3 player implementation
- `docs/` architecture notes, plugin API docs, and image assets

## Build

[Permalink: Build](https://github.com/Davidona/StreamVault-IPTV#build)

Requirements:

- Android Studio
- Android SDK
- JDK 17 or another Gradle-supported JDK 17 runtime
- Android NDK only if you want to rebuild the bundled Media3 FFmpeg extension locally

Useful commands:

```
./gradlew assembleDebug
./gradlew assembleRelease
./gradlew testDebugUnitTest
```

## Notes

[Permalink: Notes](https://github.com/Davidona/StreamVault-IPTV#notes)

- StreamVault is an IPTV client, not a content provider.
- Use only playlists, streams, and guide sources you are authorized to access.
- Local configuration and signing files are intentionally excluded from git.

## License

[Permalink: License](https://github.com/Davidona/StreamVault-IPTV#license)

This project was originally released without an explicit license.

As of April 2026, all usage, modification, and distribution are governed by the StreamVault Source-Available License (Non-Commercial).

Any use of this project must comply with the terms defined in the LICENSE file.

## About

StreamVault is a TV-first free IPTV player for Android TV built with Kotlin, Jetpack Compose, Room, Hilt, and Media3.


### Topics

[iptv-player](https://github.com/topics/iptv-player "Topic: iptv-player")

### Resources

[Readme](https://github.com/Davidona/StreamVault-IPTV#readme-ov-file)

### License

[View license](https://github.com/Davidona/StreamVault-IPTV#License-1-ov-file)

### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/Davidona/StreamVault-IPTV).

[Activity](https://github.com/Davidona/StreamVault-IPTV/activity)

### Stars

**487**
stars


### Watchers

**9**
watching


### Forks

[**76**\\
forks](https://github.com/Davidona/StreamVault-IPTV/forks)

[Report repository](https://github.com/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2FDavidona%2FStreamVault-IPTV&report=Davidona+%28user%29)

## [Releases\  52](https://github.com/Davidona/StreamVault-IPTV/releases)

[StreamVault 1.0.15\\
Latest\\
\\
3 weeks agoJun 16, 2026](https://github.com/Davidona/StreamVault-IPTV/releases/tag/v1.0.15)

[\+ 51 releases](https://github.com/Davidona/StreamVault-IPTV/releases)

## Sponsor this project

- ![ko_fi](https://github.githubassets.com/assets/ko_fi-53a60c17e75c.svg)[ko-fi.com/ **davidona**](https://ko-fi.com/davidona)

## [Packages\  0](https://github.com/users/Davidona/packages?repo_name=StreamVault-IPTV)

No packages published

## [Contributors\  11](https://github.com/Davidona/StreamVault-IPTV/graphs/contributors)

- [![@Davidona](https://avatars.githubusercontent.com/u/81252480?s=64&v=4)](https://github.com/Davidona)
- [![@Celtiore](https://avatars.githubusercontent.com/u/38855912?s=64&v=4)](https://github.com/Celtiore)
- [![@claude](https://avatars.githubusercontent.com/u/81847?s=64&v=4)](https://github.com/claude)
- [![@metanet](https://avatars.githubusercontent.com/u/999867?s=64&v=4)](https://github.com/metanet)
- [![@jopsis](https://avatars.githubusercontent.com/u/2316320?s=64&v=4)](https://github.com/jopsis)
- [![@dev-salmontech](https://avatars.githubusercontent.com/u/288432961?s=64&v=4)](https://github.com/dev-salmontech)
- [![@disclosurez](https://avatars.githubusercontent.com/u/42372412?s=64&v=4)](https://github.com/disclosurez)
- [![@mvanhorn](https://avatars.githubusercontent.com/u/455140?s=64&v=4)](https://github.com/mvanhorn)
- [![@aniketkarne](https://avatars.githubusercontent.com/u/12999365?s=64&v=4)](https://github.com/aniketkarne)
- [![@amazd](https://avatars.githubusercontent.com/u/1421133?s=64&v=4)](https://github.com/amazd)
- [![@codex](https://avatars.githubusercontent.com/u/267193182?s=64&v=4)](https://github.com/codex)

## Languages

- [Kotlin99.5%](https://github.com/Davidona/StreamVault-IPTV/search?l=kotlin)
- Other0.5%

You can’t perform that action at this time.