Modern web IPTV player compatible with the Xtream Codes API.
- Overview
- Current Features
- Upcoming Features (Roadmap)
- Screenshots
- Project Structure
- Prerequisites
- Run Locally (Machine)
- Run with Docker
- Run with Docker Compose
- CI/CD Docker Hub (GitHub Actions)
- Environment Variables
- Acknowledgements
- Legal Warning
- Issues & Pull Requests
- License
This project lets you connect to an Xtream-compatible IPTV provider, browse Live / VOD / Series content, and play streams from a web interface.
The backend handles authentication, IPTV account security, data retrieval, and multiple playback modes (direct, proxy, transcoding).
- User authentication (register / login).
- Multiple IPTV account management (add + select).
- Section-based navigation: Live, Movies (VOD), Series.
- Dynamic categories based on the selected IPTV account.
- Text search on current content.
- “Load more” pagination in the UI.
- Detailed series view:
- seasons,
- episodes,
- metadata (duration, date, rating, etc.).
- Video player with multiple candidate/fallback sources.
- Live EPG:
- upcoming schedule,
- past programs (recordings/replay).
- Dark / light mode.
- Fastify API (Node.js + TypeScript).
- JWT authentication.
- User password hashing.
- IPTV password encryption.
- Local SQLite database.
- Categories/content/series cache with TTL.
- Xtream endpoints:
- categories,
- content,
- EPG,
- series info.
- Video playback:
- direct URL,
- stream proxy,
- replay/timeshift,
- FFmpeg transcoding (example: MKV to MP4).
- Health endpoint:
/health.
This roadmap lists the next planned improvements for the project.
- Favorites (channels, movies, series, episodes).
- "TvParty" mode for synchronized multi-viewer watching.
- Docker images release
- Enriched context using the IMDB API.
- Watch history and automatic resume.
- Advanced filters (genre, year, rating, resolution).
- Enhanced sorting (popularity, added date, alphabetical).
- Advanced player settings (quality, buffer, external subtitles).
- Internationalization (FR/EN).
- Better backend observability (structured logs + metrics).
Screenshots currently available in screenshot/:
.
├── frontend/ # React + Vite
├── backend/ # Fastify + SQLite
└── docker-compose.yml
- Node.js 22+
- npm 10+
- Docker (optional)
- Docker Compose (optional)
- FFmpeg (recommended for some playback/transcoding scenarios outside containers)
git clone <YOUR_REPO_URL>
cd git_versioncd backend
cp .env.example .env
npm install
npm run devBackend available at http://localhost:4000.
cd frontend
cp .env.example .env
npm install
npm run devFrontend available at http://localhost:5173.
cd backend
cp .env.example .env
docker build -t iptv-backend .
docker run --rm -p 4000:4000 --env-file .env iptv-backendcd frontend
docker build --build-arg VITE_API_BASE_URL=http://localhost:4000 -t iptv-frontend .
docker run --rm -p 8080:80 iptv-frontendFrontend available at http://localhost:8080.
From the project root:
cp backend/.env.example backend/.env
docker compose up --buildServices:
- Frontend:
http://localhost:8080 - Backend: internal compose service (healthcheck on
/health)
To stop:
docker compose downPORT(default:4000)HOST(default:0.0.0.0)JWT_SECRETAPP_ENCRYPTION_SECRET(minimum 32 characters)CORS_ORIGINCACHE_TTL_SECONDSDB_PATH(optional depending on environment)
VITE_API_BASE_URL(example:http://localhost:4000)
I was inspired by the following project:
Big thanks to the original author for the initial work and inspiration.
This project is provided for development, learning, and testing purposes only.
I am not responsible for how users use their IPTV subscriptions, playlists, or streams.
Each user is responsible for:
- ensuring the legality of the content they access,
- complying with copyright laws and regulations in their country,
- not using this project for illegal activities.
Contributions are welcome.
Please include:
- Context (OS, browser, Node/Docker version)
- Reproduction steps
- Expected result
- Actual result
- Logs / screenshots
- Fork the repository
- Create a branch:
git checkout -b feat/my-feature- Create clean and atomic commits
- Open the PR with:
- objective,
- main changes,
- before/after screenshots for UI changes,
- specific review points.
- No secrets in commits (
.env, tokens, credentials) - Keep existing code style
- Focused change set (avoid out-of-scope refactors)
- Update documentation when needed
This project is licensed under the MIT license. See the LICENSE file for more information.






