StyleIPTV

A modern, cross-platform IPTV player built with .NET MAUI
100% free, forever.
Stream your playlists anywhere.

.NET MAUI 10 Android / Android TV Windows

In development

iOS macOS Tizen
⭐ View on GitHub 📦 Releases 🐛 Issues

Run everywhere

🤖
Android
API 21+ · ARM32 / ARM64 · x86 / x64
🪟
Windows
Windows 10/11 · MSIX package
📺
Smart TV
Android TV

Everything you need for IPTV

📋 Playlist Management

  • Import M3U / M3U8 from URL or local file
  • SQLite database for persistent channel storage
  • Automatic deduplication on import
  • Track channel addition dates
  • Scheduled auto-update (Daily / Weekly / Bi-Weekly / Monthly)

🎬 Channel Categories

  • Live Shows — channels streamed as .ts
  • Movies — VOD content detected by keywords
  • Series — episodes detected by S01E01 patterns
  • Search across all categories
  • Channel logos loaded via TvgLogo

▶️ Video Player

  • Fullscreen playback on all platforms
  • HTTP & HTTPS streaming support
  • Auto-hide player controls
  • Landscape lock during playback
  • Platform-native media renderers

🖥️ User Interface

  • Minimal, dark-themed design
  • Responsive layout: smartphone / tablet / TV
  • Remote-control navigable on Smart TVs
  • Lazy-load category content on scroll
  • Real-time import progress indicator

🔗 Synchronization between different devices

  • Syncs your watched movies and episodes
  • Saves and syncs your playback position
  • Pick up right where you left off on any movie or episode

🎬 Rich Metadata with TMDB

  • Fetches accurate details for movies and TV shows
  • Automatically loads posters, backdrops, and cast info
  • Keeps your media library organized with up-to-date data

Automatic content detection

📡 Live Shows

URLs that end with .ts extension are classified as live streams — TV, sports, news channels.

Example: stream/channel.ts

🎥 Movies

Group title or channel name contains keywords such as movie or film. Fallback for non-.ts, non-series VOD.

📺 Series

Detected by keywords (series, tv show, episode) or episode patterns like S01E01, s02e05.

How playlist updates work

1

Startup check

App reads the configured update frequency and compares it to the last update timestamp stored in the database.

2

Download

The M3U playlist is downloaded from the configured URL. Real-time progress shows KB transferred and percentage.

3

Parse

Playlist is parsed in memory. Channel metadata (name, logo, group, type) is extracted from M3U directives.

4

Bulk import

Existing channel URLs are loaded once. New channels are identified in-memory and inserted in a single SQLite transaction — no duplicates.

5

Done

Channel lists refresh automatically. Progress indicator disappears. All pages show updated content.

Optimised for large playlists

Playlist size Method Import time
5 000 channels Per-row DB insert (old) 30 – 60 seconds
5 000 channels Bulk transaction (current) 2 – 5 seconds

🗄️ Single-query load

  • All existing URLs loaded once at import start
  • Stored in a HashSet<string> for O(1) lookup

⚡ Bulk insert

  • All new channels inserted in one SQLite transaction
  • No per-row round-trips to the database

Built with modern .NET

🟣
.NET MAUI 10
Cross-platform UI framework
🗃️
SQLite-net-pcl
Lightweight local database
🌐
HttpClient
Playlist download & streaming
📐
XAML + C# 13
Declarative UI with source gen
🎵
CommunityToolkit Maui MediaElement
Native multimedia playback engine