Self-hosted media server for Live TV, Movies & Series with Xtream Codes & M3U8 support
Generate dynamic playlists for Live TV, Movies and TV Series using Xtream Codes compatible API. Stream content via Real-Debrid, Torrentio, Comet, MediaFusion and direct sources. Perfect for IPTV apps like TiviMate, iMPlayer, IPTV Smarters Pro, XCIPTV, Kodi and more.
- Movies & Series - Add content from TMDB with full metadata, posters, and descriptions
- Movie Collections - Auto-detect and complete collections (add one MCU movie, get them all)
- Live TV - 700+ channels with EPG (DrewLive, DaddyLive, PlutoTV)
- Multi-Provider Streaming - Real-Debrid, Torrentio, Comet, MediaFusion with automatic fallback
- MDBList Sync - Auto-sync your watchlists and custom lists
- Modern Web UI - Beautiful dashboard, library browser, and settings
- Xtream Codes API - Full compatibility with all IPTV apps
- Background Services - Auto-sync collections, search streams, update EPG
The easiest way to get started. Requires Docker and Docker Compose.
# Clone the repository
git clone https://github.com/Zerr0-C00L/StreamArr.git
cd StreamArr
# Start with Docker Compose
docker compose up -d
# View logs
docker compose logs -f streamarrThat's it! Access the Web UI at http://localhost:8080
The database is automatically set up and migrations are applied.
Click to expand manual installation steps
- Go 1.21+ (download)
- PostgreSQL 14+ (download)
- Node.js 18+ (download) - only needed if building UI from source
# Clone the repository
git clone https://github.com/Zerr0-C00L/StreamArr.git
cd StreamArr
# Copy environment file
cp .env.example .env
# Edit .env with your settings (at minimum, set DATABASE_URL)
nano .env# Create database and user
sudo -u postgres psql
# In psql:
CREATE USER streamarr WITH PASSWORD 'streamarr';
CREATE DATABASE streamarr OWNER streamarr;
\q# Apply all migrations
psql postgres://streamarr:streamarr@localhost:5432/streamarr -f migrations/001_initial_schema.up.sql
psql postgres://streamarr:streamarr@localhost:5432/streamarr -f migrations/002_add_settings.up.sql
psql postgres://streamarr:streamarr@localhost:5432/streamarr -f migrations/003_add_users.up.sql
psql postgres://streamarr:streamarr@localhost:5432/streamarr -f migrations/004_add_collections.up.sql
psql postgres://streamarr:streamarr@localhost:5432/streamarr -f migrations/005_add_collection_checked.up.sql# Build the server
go build -o bin/server cmd/server/main.go
# Build the UI (optional - pre-built UI is included)
cd streamarr-ui && npm install && npm run build && cd ..
# Start the server
./bin/serverAccess the Web UI at http://localhost:8080
Click to expand VPS installation guide
Create a VPS with any provider (Hetzner, DigitalOcean, Vultr, Linode, etc.):
- OS: Ubuntu 22.04 or 24.04 LTS
- RAM: 2GB minimum (4GB recommended)
- Storage: 20GB minimum
# SSH into your server
ssh root@YOUR-SERVER-IP
# Update system
apt update && apt upgrade -y# Install Docker
curl -fsSL https://get.docker.com | sh
# Start Docker
systemctl enable docker
systemctl start docker# Clone repository
git clone https://github.com/Zerr0-C00L/StreamArr.git
cd StreamArr
# Start with Docker Compose
docker compose up -d
# Check if running
docker compose ps# Allow port 8080
ufw allow 8080/tcp
ufw enableOpen in your browser: http://YOUR-SERVER-IP:8080
# Install Caddy (automatic HTTPS)
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install caddy
# Create Caddyfile
cat > /etc/caddy/Caddyfile << 'EOF'
your-domain.com {
reverse_proxy localhost:8080
}
EOF
# Restart Caddy
systemctl restart caddyNow access via https://your-domain.com
# View logs
docker compose logs -f
# Restart services
docker compose restart
# Update to latest version
cd StreamArr
git pull
docker compose build
docker compose up -dAfter installation, open http://localhost:8080 and go to Settings:
| Setting | Description | Required |
|---|---|---|
| TMDB API Key | For movie/series metadata. Get free key | ✅ Yes |
| Real-Debrid Key | Premium cached torrents. Get key | Optional |
| MDBList API Key | Watchlist sync. Get key | Optional |
Most IPTV apps support Xtream Codes. Use these settings:
| Field | Value |
|---|---|
| Server URL | http://YOUR-IP:8080 |
| Username | user (or anything) |
| Password | pass (or anything) |
For apps without Xtream support:
http://YOUR-IP:8080/get.php?username=user&password=pass&type=m3u_plus&output=ts
| App | Platform | Xtream Support |
|---|---|---|
| TiviMate | Android/TV | ✅ Yes |
| iMPlayer | iOS/Apple TV | ✅ Yes |
| IPTV Smarters Pro | All | ✅ Yes |
| XCIPTV | Android | ✅ Yes |
| OTT Navigator | Android | ✅ Yes |
| Kodi (PVR IPTV) | All | M3U only |
| VLC | All | M3U only |
- Go to Movies or Series in the sidebar
- Click + Add button
- Search for content by name
- Click the result to add it to your library
When you add a movie that's part of a collection (like Marvel, Star Wars, etc.), StreamArr can automatically add all other movies in that collection.
Enable in Settings → Quality → Auto-add Collections
- Get your API key from mdblist.com/preferences
- Go to Settings → MDBList and enter your key
- Your lists will sync automatically every 6 hours
# Start services
docker compose up -d
# View logs
docker compose logs -f
# Stop services
docker compose down
# Rebuild after updates
git pull
docker compose build
docker compose up -d
# Reset database (WARNING: deletes all data)
docker compose down -v
docker compose up -dcd StreamArr
git pull
docker compose build
docker compose up -dcd StreamArr
git pull
go build -o bin/server cmd/server/main.go
# Restart the serverServer won't start
- Check PostgreSQL is running:
sudo systemctl status postgresql - Verify DATABASE_URL is correct in .env
- Check logs:
docker compose logs streamarr
No streams found
- Ensure at least one provider is enabled in Settings → Providers
- For Real-Debrid, verify your API key is valid
- Check if the content has available torrents
IPTV app can't connect
- Use your server's IP address, not
localhost - Ensure port 8080 is open in firewall
- Try the full URL format:
http://IP:8080
Live TV channels not loading
- Go to Settings → Services
- Manually trigger "Channel Refresh" service
- Wait for EPG Update to complete
GET /player_api.php- Xtream Codes compatible APIGET /get.php- Playlist generation
GET /api/v1/movies- List moviesGET /api/v1/series- List seriesGET /api/v1/channels- List channelsGET /api/v1/health- Health check
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE.md for details.
If you find this project useful, consider supporting:
This software is for personal use only. Users are responsible for ensuring they have the right to access any content they stream.