# mikailakar/simpleiptv architecture

> Architecture diagram of the GitHub repository mikailakar/simpleiptv, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mikailakar/simpleiptv
- Repository: https://github.com/mikailakar/simpleiptv

## Overview

SimpleIPTV is an Android IPTV player: users provide their own playlist, browse channels, and watch streams. Its documented workflow covers M3U or Xtream loading, channel/category parsing and caching, browsing and customization, then playback; Xtream playlists also support EPG. The sampled implementation concentrates these responsibilities in MainActivity.kt. The README documents player controls and management features whose detailed wiring is not visible in the excerpts, so those links are intentionally limited.

Main entry points: [`app/src/main/java/com/micka/simpleiptv/MainActivity.kt`](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt) (App interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_playlist["Playlist ingestion"]
  node_playlist_load["Playlist loading<br/>[MainActivity.kt]"]
  node_playlist_source["Playlist service"]
  node_playlist_parse["Channel parsing<br/>[MainActivity.kt]"]
end

subgraph group_browse["Channel browsing"]
  node_app["App interface<br/>[MainActivity.kt]"]
  node_browse_channels["Channel and category browsing<br/>[MainActivity.kt]"]
  node_favorites["Favorites and ordering<br/>[MainActivity.kt]"]
  node_epg["Live EPG<br/>[MainActivity.kt]"]
end

subgraph group_playback["Playback"]
  node_player["Video player<br/>[MainActivity.kt]"]
  node_media3["Media3 playback"]
  node_player_controls["Playback controls<br/>[MainActivity.kt]"]
end

subgraph group_state["Preferences and cache"]
  node_channel_cache[("Channel cache<br/>[MainActivity.kt]")]
  node_preferences[("User preferences<br/>[MainActivity.kt]")]
end

node_user(("Viewer"))

node_user -->|"uses"| node_app
node_app -->|"loads playlists"| node_playlist_load
node_playlist_load -->|"fetches streams"| node_playlist_source
node_playlist_load -->|"parses response"| node_playlist_parse
node_playlist_parse -->|"caches channels"| node_channel_cache
node_app -->|"reads cache"| node_channel_cache
node_app -->|"shows channels"| node_browse_channels
node_browse_channels -->|"manages favorites"| node_favorites
node_favorites -->|"saves settings"| node_preferences
node_app -->|"loads settings"| node_preferences
node_browse_channels -.->|"views guide"| node_epg
node_browse_channels -->|"selects channel"| node_player
node_player -->|"controls playback"| node_media3
node_player -->|"offers controls"| node_player_controls

click node_app "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_playlist_load "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_playlist_parse "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_channel_cache "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_browse_channels "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_favorites "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_preferences "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_epg "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_player "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"
click node_player_controls "https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_playlist_load,node_playlist_source,node_playlist_parse,node_user toneBlue
class node_app,node_browse_channels,node_favorites,node_epg toneAmber
class node_player,node_media3,node_player_controls toneMint
class node_channel_cache,node_preferences toneRose
```

## Components

### Playlist ingestion

- [Playlist loading](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`
- **Playlist service**
- [Channel parsing](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`

### Channel browsing

- [App interface](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`
- [Channel and category browsing](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`
- [Favorites and ordering](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`
- [Live EPG](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`

### Playback

- [Video player](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`
- **Media3 playback**
- [Playback controls](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`

### Preferences and cache

- [Channel cache](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`
- [User preferences](https://github.com/mikailakar/simpleiptv/blob/main/app/src/main/java/com/micka/simpleiptv/MainActivity.kt): `app/src/main/java/com/micka/simpleiptv/MainActivity.kt`

### Other components

- **Viewer**

## Connections

- Viewer → App interface: uses
- App interface → Playlist loading: loads playlists
- Playlist loading → Playlist service: fetches streams
- Playlist loading → Channel parsing: parses response
- Channel parsing → Channel cache: caches channels
- App interface → Channel cache: reads cache
- App interface → Channel and category browsing: shows channels
- Channel and category browsing → Favorites and ordering: manages favorites
- Favorites and ordering → User preferences: saves settings
- App interface → User preferences: loads settings
- Channel and category browsing → Live EPG: views guide
- Channel and category browsing → Video player: selects channel
- Video player → Media3 playback: controls playback
- Video player → Playback controls: offers controls
