masqueradarr
masqueradarr · documentation zero → hero

Self-hosted IPTV, aggregated.

Aggregating scattered IPTV sources behind a single, trusted identity.

masqueradarr is a self-hosted IPTV aggregator. It pulls channel playlists (M3U) and guide data (EPG/XMLTV) from a range of online IPTV services, normalizes them into one catalog, and serves them back as a single, unified, standards-compliant playlist + guide — behind one trusted identity that your media apps and IPTV clients can talk to.

masqueradarr
What it does

Four jobs, one container

masqueradarr is the ground-up successor to TVApp2. Where the original kept static .m3u files fresh, masqueradarr runs a live, resolve-on-demand engine — and wraps it in a real management app.

● aggregate & normalize

Many providers → one catalog

Pulls M3U playlists and EPG/XMLTV guides from ~17 provider adapters plus your own URL / file / HDHomeRun imports, and normalizes them into a single, deduplicated channel catalog.

● resolve on demand

No dead URLs on disk

Every stream is resolved at play time, which is what makes authenticated, token-gated and rotating-mirror sources possible — captured logins, per-play signed URLs, live mirror failover.

● deliver anywhere

One endpoint for every client

An in-app player plus per-user, tokenized .m3u + XMLTV export for TiviMate, VLC, Plex, Jellyfin and Emby — bytes served by a durable Rust proxy engine.

● own the whole stack

Users, telemetry, schedule

scrypt users with roles and per-user access lists, live viewer/bandwidth telemetry, MongoDB-backed logs, a cron scheduler, and full-system backup / restore.

The shape of it

One picture: clients, the container, the upstreams

Two processes ship in the same container. Your browser and IPTV clients talk to the Express control plane (Node), which owns MongoDB and drives a Rust data-plane sidecar (masq-proxy) that actually moves the stream bytes.

primary architecture control plane · data plane
clients
Browser
Vue 3 management SPA
IPTV clients
TiviMate · VLC · Plex · Jellyfin
/api/* · WS · .m3u · bytes
masqueradarr container
one image · two processes
Express API — Node
control plane · auth · resolve · telemetry
gate + relay ↓
masq-proxy — Rust
data-plane sidecar · fetch · rewrite · pipe
internal seams ↑ loopback
MongoDB
state · playlists · users · logs
resolve · fetch · rewrite · pipe
upstream
Upstream IPTV sources
dulo · DaddyLive · Pluto · Roku · …
read it as

Node is the brains (stateful, provider-specific: logins, scraping, the token gate, telemetry). Rust is the muscle (byte work, driven per-stream by a "grant" from Node). The same diagram, explained from never-heard-of-IPTV, opens the Concepts page.

The app

A real management SPA

Full screens for Dashboard, Active Streams, History / Metrics, Playlists, EPG Sources, Channel Mapping, Users and Settings — with an editable channel store where your edits survive a re-sync.

Dashboard screen
Dashboard · live system stats
Playlists screen
Playlists
Active Streams screen
Active Streams
EPG Sources screen
EPG Sources
History and Metrics screen
History / Metrics
Settings screen
Settings
Where to go next

Read it in order — or dive in

The docs are built to take you from "I've never heard of IPTV" all the way to the Rust data-plane.

masqueradarr · documentation one playlist · one guide · one identity