LiveSince 2026
Linux · Windows · macOS · Android
Product, architecture, desktop and Android
JoTV
An IPTV player for desktop and Android that stays fast on catalogs of tens of thousands of channels, and protects the user's account from provider blocks.
Cold start to Home, 68k-item catalog (was 1.7 s)
Janky frames scrolling 12k channels (was 27%)
Automated tests, Rust and Kotlin
Platforms from two codebases

01/Problem
IPTV playlists are huge and messy: tens of thousands of channels, movies and series, names in mixed Arabic spellings, and servers that answer slowly or not at all.
Most players freeze while loading, and worse, they keep retrying a server that already rate-limited the account, which turns a short pause into a long ban.
02/Constraints
- 01One product on Linux, Windows, macOS and Android phones and tablets.
- 02Usable within a second, even with a provider-sized catalog.
- 03Never put the user's IPTV account at risk.
- 04Arabic and English, right to left, dark and light.
03/Architecture
Apps
- Desktop · Svelte 5
- Android · Jetpack Compose
Playback
- MPV
- Media3 / ExoPlayer
- picture-in-picture
Core
- Xtream + M3U parsers
- provider guard
- program guide
- search
Storage
- SQLite (Rust)
- Room (Kotlin)
- image cache
04/Decisions
A circuit breaker for the provider, not blind retries
Panels answer a lock or rate limit with odd codes (461, 469, 429) and extend the block when hit again. After such an answer the app holds that host back for 10, 20, 40, 80, 160, then 240 minutes. One good answer resets it; Try again lifts the pause but keeps the escalation.
Trade-off: Sometimes the user waits when the server has already recovered. Losing the account is worse.
Start fast by doing less at start
HTTP clients are created lazily, the database opens while the activity starts, the hero shows from the local catalog and upgrades when artwork arrives, and Home queries got their own indexes. Cold start went from 1.7 s to 0.75 s on a 68k-item catalog.
Trade-off: Measured on an emulator against a provider-sized fake catalog, so the numbers are relative, not a phone benchmark.
Search that knows Arabic spelling
Channel names mix أ/ا/إ, ة/ه and ى/ي. Search normalizes both sides, so typing a name the way you say it finds the channel the way the provider wrote it.
05/Screens

06/Stack
RustTauri v2Svelte 5MPVSQLiteKotlinJetpack ComposeMedia3RoomHiltCoil