A comprehensive IPTV management system with automatic provider synchronization, intelligent category mapping, and multi-user support.
IPTV-Manager does not provide any IPTV content or subscriptions. Use your own legal IPTV service.
- Multi-User Management: Support for multiple users with individual channel configurations, secure login, and customizable concurrent stream limits (max connections).
- Provider Management: Connect to multiple IPTV providers via Xtream Codes API with automatic connection pooling.
- Category Organization: Drag & drop sorting and visual channel assignment.
- EPG Integration: Comprehensive Electronic Program Guide (EPG) support with automatic updates.
- Automatic Synchronization: Configurable intervals (hourly, daily, weekly) with intelligent category mapping.
- Provider Connection Pooling: Add the same provider multiple times to create a pool; streams automatically round-robin and fall back to available accounts when connection limits are reached.
- HDHomeRun Emulation: Emulate HDHomeRun devices for seamless integration with Plex, Emby, and Jellyfin.
- Shared Links: Create public share links with customizable slugs (short URLs) and expiration dates.
- Bulk Operations: Optimized bulk category import and deletion for managing large playlists efficiently.
- VOD & Series Support: Full proxy support for Movies and TV Series.
- Internationalization: Localized UI (English, German, French, Greek).
- M3U Playlist Generation: Generate custom M3U playlists for external players.
- Import/Export: Secure, password-protected data migration.
- User Backups: Automatically create and manage backups of assigned categories and channels per user.
- π‘οΈ SSRF Protection: Robust validation of upstream URLs (preventing access to private IPs, localhost, cloud metadata).
- π Rate Limiting: Tunable protection for general API traffic, brute force (Login), and DoS attacks (Client Logs).
- π« Secure Authentication: JWT-based auth with session management and Bcrypt password hashing.
- π« IP Blocking: Configurable IP blocking and whitelisting.
- π Security Headers: Comprehensive Helmet.js security headers.
- π₯ Multi-Core Optimization: Node.js Clustering utilizes all CPU cores.
- β‘ Optional Redis: High-performance tracking for active streams (recommended for >500 users).
- π§΅ Worker Threads: Offloads CPU-intensive tasks like EPG mapping.
- β‘ Optimized Channel Matching: Fast channel matching algorithms using bitwise signatures.
- β‘ Optimized Database Schema: Optimized indices for faster streaming performance and EPG updates.
- Node.js: 24.x+
- npm: 10.x+
- SQLite: 3.x (included)
- MaxMind GeoLite2 License Key: While basic region locking functions work out of the box with the included database, updating the internal GeoIP database requires a free MaxMind License Key. You can get one at maxmind.com and enter it in the WebUI Security Settings. On startup, IPTV-Manager checks MaxMind checksums first and only downloads/rebuilds GeoIP data when an update is available.
For production environments, it is strongly recommended to set NODE_ENV=production and run the application behind a reverse proxy (like Nginx or Traefik) that handles HTTPS. The application will enforce secure cookies when in production mode.
- Create
docker-compose.yml:services: iptv-manager: image: ghcr.io/bladestar2105/iptv-manager:latest container_name: iptv-manager restart: unless-stopped ports: - "3000:3000" volumes: - ./data:/data environment: - DATA_DIR=/data
- Run
docker-compose up -d. - Access at
http://localhost:3000.
We provide automated scripts for easy local deployment on Debian and Ubuntu systems. This is ideal for users who do not want to use Docker.
To install IPTV-Manager as a background systemd service, run the following command as root:
curl -fsSL https://raw.githubusercontent.com/Bladestar2105/IPTV-Manager/main/scripts/install.sh -o install.sh
chmod +x install.sh
sudo ./install.shTo update an existing automated installation, simply navigate to the installation directory and run the update script:
cd /opt/iptv-manager
sudo ./scripts/update.sh- Clone repo:
git clone https://github.com/Bladestar2105/IPTV-Manager.git - Install:
npm install - Configure:
cp .env.example .env(edit as needed) - Run:
npm start
For Proxmox VE users, you can easily deploy an LXC container running IPTV-Manager. Run the following command directly on your Proxmox Host Shell:
curl -fsSL https://raw.githubusercontent.com/Bladestar2105/IPTV-Manager/main/scripts/proxmox.sh -o proxmox.sh
chmod +x proxmox.sh
./proxmox.sh- Linting:
npm run lint - Testing:
npm test - Developer notes:
docs/DEVELOPMENT.md - Configuration reference:
docs/CONFIGURATION.md - API reference:
docs/API_REFERENCE.md
- Default Username:
admin - Default Password: Set by
scripts/install.shand printed at the end of the install (also saved asINITIAL_ADMIN_PASSWORDin/opt/iptv-manager/.env). - Important: Change password immediately after login.
The application blocks Cross-Origin Resource Sharing (CORS) by default for security. If you need to access the API or streams from another domain (e.g., an external web player), you must configure the ALLOWED_ORIGINS environment variable.
- Default: Cross-origin requests are blocked (
false). - Setup: Add
ALLOWED_ORIGINS=https://your-web-player.com,https://another-site.comto your.envfile. - Allow All: Set
ALLOWED_ORIGINS=*to allow all domains (β οΈ Not recommended for production).
Defaults are intentionally high enough for IPTV clients that make bursty playlist, XMLTV, and Xtream API requests. They can still be tuned via environment variables:
API_RATE_LIMIT_MAX(default:1000per60000ms)AUTH_RATE_LIMIT_MAX(default:100per900000ms)CLIENT_LOG_RATE_LIMIT_MAX(default:120per3600000ms)
Each limit also has a matching *_WINDOW_MS variable documented in
docs/CONFIGURATION.md.
To prevent stale sessions from blocking new playback with false Max connections reached / HTTP 403 responses, stream session cleanup is applied across Live TV, Movies, and Series.
Optional tuning via environment variables:
STREAM_MAX_AGE_MS(default:86400000= 24h)
Hard safety cap for a single session age. Very old orphan sessions are removed before limit checks.STREAM_INACTIVITY_TIMEOUT_MS(default:120000= 2 minutes)
Inactivity expiry for stalled streams to prevent orphan sessions from blocking new playback.
For most deployments, keep the defaults unless you have a specific operational need.
| Login | Dashboard |
|---|---|
![]() |
![]() |
| User Backups | Import/Export |
|---|---|
![]() |
![]() |
| Categories | Channels |
|---|---|
![]() |
![]() |
| Sync Logs |
|---|
![]() |
| EPG Sources | EPG Browse |
|---|---|
![]() |
![]() |
| EPG Mapping | Statistics |
|---|---|
![]() |
![]() |
| Security | Xtream Credentials |
|---|---|
![]() |
![]() |
| Web Player |
|---|
![]() |
The full route inventory is maintained in docs/API_REFERENCE.md.
- Auth: login, token verification, OTP, password changes, player tokens
- Users: user CRUD, clone/copy settings, user backups
- Providers: provider CRUD, sync, channel/category import
- Categories: category/channel assignment, reorder, bulk actions, mappings
- EPG: source management, schedule browsing, mapping, auto matching
- System: settings, security, import/export, sync config, statistics
- Shares: authenticated share management and public short links
GET /player_api.php: Auth & MetadataGET /player_api.php?action=get_live_categoriesGET /player_api.php?action=get_live_streams&category_id=<id>: Category-scoped live streamsGET /player_api.php?action=get_vod_categoriesGET /player_api.php?action=get_vod_streams&category_id=<id>: Category-scoped VODGET /player_api.php?action=get_series_categoriesGET /player_api.php?action=get_series&category_id=<id>: Category-scoped seriesGET /player_api.php?action=get_short_epg&stream_id=<id>&limit=<n>: Short stream EPGGET /player_api.php?action=get_simple_date_table&stream_id=<id>: Full stream EPGGET /player_api.php?action=get_simple_data_table&stream_id=<id>: Full stream EPG compatibility aliasGET /player_api.php?action=get_epg_batch&stream_ids=<ids>&date=<YYYY-MM-DD>: Batched Xtream EPG listingsGET /live/:user/:pass/:id.ts: Live StreamGET /movie/:user/:pass/:id.ext: Movie StreamGET /series/:user/:pass/:id.ext: Series StreamGET /xmltv.php: XMLTV EPG, gzip-compressed when requested withAccept-Encoding: gzip
- Share companion integration guide (Xtream/M3U/EPG):
docs/SHARE_COMPANION_INTEGRATION.md
GET /hdhr/:token/discover.jsonGET /hdhr/:token/lineup.jsonGET /hdhr/:token/auto/v:channelId
MIT License













