A lightweight IPTV client for Xtream Codes compatible servers. Browse live TV, movies, and series from your IPTV provider with a clean, keyboard-friendly interface.
Built with Tauri, React, and TypeScript.
- Live TV — Browse and stream live channels organized by category
- Movies — Browse video-on-demand films with poster art, year, and ratings
- Series — Browse TV shows with season and episode navigation
- Search — Global search across all content types (works from app store and cached content)
- Favorites — Save channels, movies, and series across sessions
- Watch History — Recent plays per server; resume from last position with progress saved as you watch and across sessions
- Multiple servers — Save several Xtream servers with optional display names; switch or connect from Login or Settings; auto-connect to last-used server on launch
- Custom Groups — Create your own groups and organize content your way
- Group Visibility — Show or hide categories per tab to reduce clutter
- Refresh from Server — Re-fetch all content from your IPTV provider with progress tracking, background operation, and stop/resume support
- Caching — Content is cached locally for fast browsing; refresh on demand per tab or all at once from Settings
- Copy Stream URL — Copy the direct stream URL to clipboard for use in external players
- Keyboard Navigation — Full keyboard support for quick browsing
- Launch TvX
- Enter your Xtream Codes server URL (e.g.,
http://example.com:8080) - Enter your username and password
- Optionally set a Display name to identify this server (e.g. "Home IPTV")
- Click Connect
Your credentials are saved locally. You can add more servers in Settings (URL, username, password, display name) and connect to any saved server from the Login page. If you have at least one saved server, TvX can auto-connect to the most recently used one on launch.
Use the sidebar to switch between Live TV, Movies, Series, and Watch History. Each content tab shows categories from your IPTV provider. On first load or after a refresh, categories are loaded with a progress indicator. Click a category to browse its content.
- Live TV — Click a channel to copy its stream URL or play it
- Movies — Click a movie to see details and stream it; sort by name, year, or rating
- Series — Click a series to see its seasons and episodes
- Watch History — Lists recent plays for the current server. Use Resume to continue from where you left off; progress is saved as you watch and when you close the player. You can Clear history per server from this page.
Go to Settings > Group Management > Manage to:
- Hide categories you don't want to see
- Create custom groups with your own selection of channels, movies, or series
- Per-tab refresh — Click the blue Refresh button next to the page title on any tab to re-fetch that content type from the server
- Full refresh — Go to Settings > Data & Cache > Refresh All to clear the entire local cache and re-fetch everything. This runs in the background — you can navigate to other tabs and come back to check progress. Click Stop to cancel at any time
- Visible only — Check "Only refresh visible groups" to skip hidden categories during a full refresh
| Key | Action |
|---|---|
| Arrow keys | Navigate |
| Enter | Select / Play |
| Backspace | Go back |
| F | Toggle favorite |
| S | Open search |
| Escape | Close modal / Exit |
| Space | Play / Pause |
| H | Hide current group |
| Ctrl+H | Hide all groups |
| C | Copy stream URL |
- Node.js (v18 or later)
- Rust (latest stable)
- Platform-specific dependencies for Tauri — see the Tauri prerequisites guide
# Clone the repository
git clone https://github.com/skizha/TvX.git
cd TvX
# Install dependencies
npm install# Run in the browser (hot reload, no Tauri shell)
npm run dev
# Run as a desktop app (Tauri dev mode with hot reload)
npm run tauri dev# Build the desktop app installer
npm run tauri buildThe installer will be output to src-tauri/target/release/bundle/.
| Component | Technology |
|---|---|
| Shell | Tauri 2 |
| Frontend | React 19 + TypeScript |
| Styling | Tailwind CSS 4 |
| State | Zustand |
| Routing | React Router 7 |
| Video | HLS.js + native HTML5 |
| Build | Vite 7 |
This project is licensed under the MIT License.


