M3U vs Xtream: what’s the difference?
M3U and Xtream Codes are two hand-over formats for the same subscription. An M3U is one URL that carries everything — the channel list and, usually, your credentials. Xtream is three fields — server, username, password — that a player uses to query a JSON API. Most providers offer both.
M3U: one link that carries everything
An M3U playlist is a flat text file: one #EXTINF line per channel with its name and tags, then the stream URL. Your provider serves it from a URL, and that URL is the whole hand-over — typically shaped like http://host/get.php?username=…&password=…&type=m3u_plus. Read it again: your username and password ride inside the link. Anything that sees the URL holds your login, which is why an M3U link should be treated like a password.
The playlist arrives whole — one fetch, every channel. Simple, portable, and a little blunt: a big line-up means a big file, and picking up changes means downloading all of it again.
Xtream: a login that answers questions
Xtream Codes hands over three fields instead — server address, username, password — and the player uses them to query a JSON API (player_api.php). Channels come by category as the player asks; the guide comes through the same login; and the account status reports when the plan expires and how many simultaneous connections it allows. Same subscription, served in pieces.
Stream URLs are then assembled from the same three fields — the server, then the username and password as path segments, then a channel id. So the “login” and the “link” are really two arrangements of the same facts, and neither is more secret than the other: the Xtream API sends your credentials with each request too, so the connection they ride matters as much as the format.
The pieces matter at scale, though: a line-up of tens of thousands of channels loads without shipping one giant file, and picking up a line-up change doesn’t mean downloading the lot again.
The guide
The EPG is where the two differ most in practice. With an M3U you usually get a separate XMLTV URL to pair with the playlist — two links to keep in sync. With Xtream, guide data comes through the same login, matched to the same channel ids. Same schedule either way; one route has fewer moving parts.
Which players take which
Nearly every IPTV player accepts an M3U — it’s the lowest common denominator, decades old. Xtream support is standard in dedicated IPTV apps and thinner in general-purpose media players. If your provider hands you both, the choice is about your player, not your channels: the line-up is the same underneath.
Naming is loose in the wild, too. Add-source screens say “M3U”, “M3U8”, “playlist URL”, “Xtream”, “Xtream API”, or just “login” — the giveaway is the shape of what you were given. A bare URL is an M3U; three fields are Xtream.
Which to pick in Twiga
Twiga takes both, and both end up in the same place: your channel list, sealed URL by URL on your device with a key only you hold, stored on our servers as ciphertext. Neither format stores your provider login at rest — creating either source pins only the non-secret host. The difference is one of mechanics. Xtream is three fields your browser keeps; it composes the catalogue calls on your device, and those calls route out through Twiga’s VPN exits so your provider sees our IP, not your home one. An M3U link is a single URL your browser can’t fetch itself — cross-origin rules forbid it, and it has to leave from our exits anyway — so the link reaches Twiga once, in memory, for one fetch, and is never written down. The honest way to say it: the Xtream secret stays on your device and is composed into each request; the M3U link passes through ours once, unstored. If you want the credential to physically stay put, that edge goes to Xtream — but both seal the same list the same way.
Either way the stream path is identical — streams route via Twiga’s VPN exits, the guide goes over Tor, and the blind relay in the middle can’t read what passes through it.
Got your three fields — or your link? add your source