Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenIPTV

OpenIPTV is a Flutter-based IPTV player for Android TV / Fire TV and desktop platforms. It is designed for remote-control-friendly navigation and focuses on local media management, playlist-based streaming, favorites, downloads, recordings, casting, and secure profile transfer between your own devices.

OpenIPTV does not provide channels, playlists, VOD catalogs, or subscriptions. You bring your own M3U or Xtream sources.

Features

  • Live TV playback with EPG integration.
  • VOD and series browsing.
  • Support for M3U playlists and Xtream sources.
  • Favorites and watch-style library collections.
  • Search across loaded content.
  • Local downloads and download management.
  • Recording schedules and Android recording helpers.
  • Picture-in-picture support where the platform supports it.
  • Local-network casting and remote playback control.
  • Password-protected profile import/export and authenticated auto-sync.
  • Resume support for the last visited route and playback-related state.
  • Multi-language UI.
  • TV-first focus handling and D-pad / remote navigation.

Main Sections

The app currently exposes these primary sections:

  • Live TV
  • VOD
  • Favorites
  • Search
  • Downloads

The player route is opened separately for live streams, movies, and series episodes.

Supported Source Types

OpenIPTV currently supports:

  • M3U playlists
  • Xtream-based providers

Depending on the configured source, the app can also load XMLTV-backed EPG data and Xtream catalog metadata.

Platforms

This repository is a Flutter project with Android, iOS, macOS, Linux, and Windows folders. The current development workflow in this repository explicitly provides build tasks for:

  • Android APK
  • Android App Bundle (.aab)
  • Linux bundle
  • Windows bundle

Desktop playback uses fvp on Linux, Windows, and macOS.

Languages

The app ships with UI translations for:

  • German
  • English
  • French
  • Spanish
  • Italian
  • Portuguese
  • Dutch
  • Polish
  • Czech
  • Hungarian
  • Romanian
  • Swedish
  • Danish
  • Finnish
  • Greek
  • Ukrainian

Tech Stack

  • Flutter
  • Dart
  • flutter_bloc for state management
  • go_router for navigation
  • dio for network access
  • shared_preferences and local file storage for persistent state
  • video_player and fvp for playback

Repository Structure

The project follows a layered Flutter structure:

  • lib/app for app bootstrap and routing
  • lib/core for constants, localization, and theme setup
  • lib/data for local/remote datasources and repositories
  • lib/domain for entities and repository interfaces
  • lib/presentation for pages, widgets, and BLoC state
  • lib/services for playback-related platform bridges and app services
  • test for widget, service, and repository tests
  • docs for feature-specific documentation

Getting Started

Prerequisites

  • Flutter SDK compatible with the project constraints in pubspec.yaml
  • Dart SDK matching the Flutter version
  • Android SDK for Android builds
  • Platform-specific toolchains for Linux or Windows builds if needed

Install Dependencies

flutter pub get

Run the App

flutter run

If you want to target a specific device:

flutter devices
flutter run -d <device-id>

Development Notes

On first launch, the app routes to onboarding if no source has been configured yet. Once sources are available, the app resumes into the last supported main route when possible.

Important local storage concerns:

  • Playlist URLs, Xtream credentials, favorites, watch data, playback data, downloads, and recording metadata can be stored locally on the device.
  • Profile transfer and auto-sync are intended for your own devices and are protected by authentication when enabled.

Build Commands

Android APK

flutter build apk

Artifact:

  • build/app/outputs/flutter-apk/app-release.apk

Android App Bundle

flutter build appbundle

Artifact:

  • build/app/outputs/bundle/release/app-release.aab

Linux Bundle

flutter build linux

The VS Code task Build Linux Bundle also builds a Debian package automatically:

  • build/linux/x64/release/debian/open-iptv_<version>_amd64.deb

The VS Code task Build Linux Arch Package builds an Arch package automatically:

  • build/linux/x64/release/arch/open-iptv-<version>-<pkgrel>-<arch>.pkg.tar.zst

The Arch packaging step uses makepkg. On Arch Linux it can use local base-devel; on Ubuntu or other hosts without makepkg, the script automatically runs the packaging step in Docker with the archlinux:base-devel image.

Windows Installer and Portable ZIP

flutter build windows

The VS Code task Build Windows Bundle also builds release artifacts automatically:

  • build/windows/x64/release/open-iptv_<version>_windows_x64_setup.exe
  • build/windows/x64/release/open-iptv_<version>_windows_x64_portable.zip

The installer uses logo.png for the setup icon and wizard images. Inno Setup 6 must be installed and ISCC.exe must either be available on PATH or in the standard Inno Setup installation directory.

VS Code Tasks

The repository includes ready-to-use build tasks in .vscode/tasks.json:

  • Build Android APK
  • Build Android App Bundle
  • Build Linux Bundle
  • Build Linux Arch Package
  • Build Windows Bundle

These tasks inject build metadata through --dart-define values such as build date, git SHA, and build channel. The Linux task additionally runs scripts/build_linux_deb.sh and emits a .deb package from the release bundle. The Arch Linux task additionally runs scripts/build_linux_arch.sh and emits a .pkg.tar.zst package from the release bundle. If local makepkg is unavailable, Docker is used for the Arch packaging step. The Windows task additionally runs scripts/build_windows_release.ps1 and emits an Inno Setup installer plus a portable ZIP from the release bundle.

Android Release Signing

Android release builds are configured to load signing properties from:

  • android/key.properties

Typical values include:

  • storeFile
  • storePassword
  • keyAlias
  • keyPassword

Do not commit your real keystore or secret signing credentials.

Testing

Run all tests:

flutter test

Run a specific test file:

flutter test test/presentation/pages/favorites/favorites_page_test.dart

Privacy and Security

Legal

OpenIPTV is a player application only.

  • It does not include IPTV content.
  • It does not sell subscriptions.
  • It does not guarantee the legality of third-party playlists or providers.
  • You are responsible for the sources, credentials, streams, downloads, and recordings you use with the app.

Contributing

If you plan to contribute:

  • keep changes focused and platform-aware,
  • add or update tests for behavior changes,
  • prefer minimal, targeted edits over broad refactors,
  • document user-visible behavior changes in the relevant docs when needed.

Publishing this source

See publication preparation for clean-history publication, licensing and signing setup.

License

Copyright (c) 2026 OpenIPTV contributors.

Original OpenIPTV code is licensed under the GNU General Public License version 3 (SPDX: GPL-3.0-only). You may redistribute and modify it under version 3 of that license. It is provided without any warranty, including the implied warranties of merchantability or fitness for a particular purpose.

When distributing modified or derived versions, you must provide the corresponding source code under GPLv3 and comply with its notice and distribution requirements. Private modifications do not have to be published. Third-party code, libraries and assets retain their respective licenses and copyright notices; the root license does not relicense those components. See the LICENSE files in third_party and the notices supplied by dependencies.

About

Free IPTV Player for Android, macOS, iOS, Linux and Windows

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages