Cross-platform TV front-end player for the M3U Editor web app. Provides a convenient way to view your content on Android TV, Apple TV, and Desktop.
- Live TV: Browse and watch live TV channels with category filtering
- Movies (VOD): Browse and watch on-demand movies with category filtering
- TV Series: Browse series with season/episode navigation
- EPG: Electronic Program Guide with timeline view for live channels
- Search: Search across live channels, movies, and series
- Favorites: Save and manage favorite channels and content
- Continue Watching: Resume playback from where you left off
- Settings: Configure Xtream API connection with secure credential storage
| Platform | Method |
|---|---|
| Android TV | React Native (react-native-tvos) |
| Apple TV (tvOS) | React Native (react-native-tvos) |
| Desktop (Windows, macOS, Linux) | Electron + React Native Web |
- TypeScript
- React Native 0.81 (react-native-tvos)
- Expo SDK 54
- React Navigation 7
- Electron 41 for Desktop builds
- HLS.js for web/desktop stream playback
- mpv (embedded or external) for Desktop playback
- Custom
react-native-mpvnative module for TV playback (Android TV + tvOS) - Native TV focus APIs (react-native-tvos) for D-pad focus management
- Node.js v18+
- Yarn v4+ (
corepack enable) - Android TV: Android Studio with TV emulator
- Apple TV: Xcode with tvOS simulator
- Desktop: No additional requirements; mpv or VLC optional for external player fallback
cd m3u-tv
corepack yarn install# Generate native project (first time or after dependency changes)
corepack yarn prebuild
corepack yarn android# Generate native project (first time or after dependency changes)
corepack yarn prebuild
corepack yarn ioscorepack yarn electron:devThis exports the Expo web bundle and launches it in Electron.
corepack yarn electron:buildOutputs to release/:
| OS | Format |
|---|---|
| Linux | AppImage, .deb |
| Windows | NSIS installer, portable .exe |
| macOS | .dmg |
- Launch the app and navigate to Settings
- Enter your Xtream credentials:
- Server URL: Your Xtream server address (e.g.,
http://example.com:8080) - Username: Your Xtream username
- Password: Your Xtream password
- Server URL: Your Xtream server address (e.g.,
- Click Connect
The app will authenticate and fetch your content categories. Credentials are stored securely for future sessions.
- Welcome screen with quick access to content
- Shows preview rows of Live TV, Movies, and Series when connected
- Grid of live channels organized by category
- Category filter tabs at the top
- Select a channel to start playback
- Grid of movies organized by category
- Shows ratings and posters
- Select a movie to start playback
- Grid of TV series organized by category
- Select a series to view seasons and episodes
- Episode browser with thumbnails
- Search across live channels, movies, and series from a single screen
- Xtream API connection management
- Connection status and statistics
On Desktop, streams are handled in two ways:
- Embedded mpv (default): mpv renders directly inside the Electron window via IPC.
- External player fallback: If embedded mpv is unavailable, the app falls back to launching mpv, VLC, or the system default handler.
Keyboard shortcuts:
| Shortcut | Action |
|---|---|
F11 |
Toggle fullscreen |
Cmd/Ctrl+Q |
Quit |
This app is designed to work with the M3U Editor backend which provides Xtream API endpoints:
- Direct Xtream Provider: Connect directly to your IPTV provider's Xtream API
- M3U Editor Server: Connect to your M3U Editor instance which emulates the Xtream API
To use with M3U Editor, use your M3U Editor server URL and credentials from a Playlist or PlaylistAuth.
m3u-tv/
├── electron/ # Electron main process (Desktop)
│ ├── main.js # BrowserWindow, IPC handlers, mpv integration
│ ├── mpvController.js
│ └── preload.js
├── modules/
│ └── react-native-mpv/ # Custom native mpv module (Android TV + tvOS)
├── plugins/ # Expo config plugins
├── src/
│ ├── components/ # Shared UI components
│ ├── context/ # React context providers
│ ├── hooks/ # Custom hooks (platform-split where needed)
│ ├── navigation/ # React Navigation setup and types
│ ├── screens/ # Screen components (platform-split where needed)
│ ├── services/ # API, cache, storage services
│ ├── theme/ # Colors, typography, spacing
│ ├── types/ # TypeScript types
│ └── utils/ # Utilities
└── app.config.js # Expo config
corepack yarn lint
corepack yarn lint:fix
corepack yarn typecheck- Add the screen component in
src/screens/ - Add the route to
src/navigation/types.ts - Register it in
src/navigation/AppNavigator.tsx - Export from
src/screens/index.ts
- Enhanced EPG with timeline view
- Continue watching
- Favorites/Watchlist
- Search functionality
- Desktop (Electron) support
- Parental controls
- Stream quality selection
- Catchup/DVR support
Whether it's writing docs, squashing bugs, or building new features, your contribution matters!
We welcome PRs, issues, ideas, and suggestions!
Here's how you can join the party:
- Follow our coding style and best practices.
- Be respectful, helpful, and open-minded.
- Respect the CC BY-NC-SA license.
m3u editor is licensed under CC BY-NC-SA 4.0:
- BY: Give credit where credit's due.
- NC: No commercial use.
- SA: Share alike if you remix.
For full license details, see LICENSE.