Open source IPTV client built with Tauri (Rust) + React + TypeScript. Supports Xtream Codes API providers — browse live channels, movies, and series from your IPTV subscription.
Development status: The app is still in early development. Live streams work; movies and series do not work when the provider serves them as MKV. For that case I added an experimental transcode pipeline and a Test section in the UI (MKV → HLS via FFmpeg), but that part is still under active development. Transcoding, HLS, and low-level streaming are areas I’m still learning — if you have experience there, your help and contributions are especially appreciated.
- Live TV — browse categories and channels, stream via HLS
- Movies — browse VOD library, play with the built-in player
- Series — browse series, seasons, and episodes
- Transcode test — experimental MKV → HLS transcoding via FFmpeg (local pipeline, does not affect the main player)
| Layer | Technology |
|---|---|
| Desktop shell | Tauri 2 (Rust) |
| Frontend | React 19 + TypeScript + Vite |
| Video playback | hls.js |
| IPTV protocol | Xtream Codes API |
| Transcoding | FFmpeg subprocess + tiny_http |
- Node.js 18+
- Rust (stable toolchain)
- Yarn (or npm)
- macOS / Linux / Windows (Tauri 2 supports all three)
For the transcode test feature only:
- FFmpeg —
brew install ffmpegon macOS
# Clone
git clone https://github.com/Closery/open-iptv-player.git
cd open-iptv-player
# Install JS dependencies
yarn install
# Run in development mode (hot-reload)
yarn tauri dev
# Build for production
yarn tauri build- Launch the app.
- Enter your Xtream Codes server URL, username, and password on the login screen.
- Browse Live TV, Movies, or Series from the sidebar.
Credentials are stored locally in localStorage (no external servers involved).
- Movies & series (MKV): When the provider serves VOD as MKV, playback fails in the main player. Use the Test section to try the experimental MKV → HLS transcode pipeline (requires FFmpeg).
- Transcode pipeline: Still unstable with IPTV URLs (e.g. segment loading, buffering). Local MKV files tend to work; improvements in progress.
- Better player — improved playback UX, controls, and reliability.
- UI overhaul — full redesign for clearer layout and easier use on desktop and beyond.
- Multi‑platform — prepare for mobile (Tauri 2 mobile) and optionally a web build where it makes sense.
iptv/
├── src/ # React frontend
│ ├── api/xtream.ts # Xtream Codes API client
│ ├── components/ # Shared UI components (Layout, VideoPlayer)
│ ├── context/AuthContext.tsx # Auth state management
│ ├── features/ # Page-level feature modules
│ │ ├── auth/ # Login screen
│ │ ├── live/ # Live TV
│ │ ├── movies/ # Movies / VOD
│ │ ├── series/ # Series
│ │ └── test/ # Transcode test (FFmpeg/HLS)
│ └── types/ # TypeScript type definitions
└── src-tauri/ # Rust backend
└── src/
├── lib.rs # Tauri app entry, command registration
└── transcoder.rs # FFmpeg subprocess + tiny_http HLS server
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
GPL-3.0 © 2026 closery
