Back to all posts

M3U or Xtream Codes: which one should you use?

An M3U playlist is a file of channel names and stream URLs. Xtream Codes is an API your provider runs, so the app can ask it for categories, series and guide data. If your provider offers both, use Xtream.

M3U and Xtream Codes are two ways to load the same subscription into an IPTV player. An M3U playlist is a file: channel names and stream URLs, nothing more. Xtream Codes is an API your provider runs, so the app can ask it for categories, series and guide data. If your provider offers both, use Xtream.

Here is what each one actually gives the app, and why it changes what you see on screen.

What an M3U playlist is

An M3U playlist is a text file. Each entry is a channel name and a URL. Extended playlists add attributes on the #EXTINF line: tvg-id for guide matching, group-title for grouping, and catch-up tags such as catchup-source and catchup-days.

The app downloads that file and reads it. Whatever the provider wrote in is what you get. Guide data is not in it, so you add an XMLTV URL separately and we match the playlist tvg-id to the XMLTV channel id.

What Xtream Codes adds

With Xtream you enter a server URL, a username and a password. The app then calls the panel’s player API and gets back a structured catalogue instead of a flat list: live categories, movies with metadata, and series broken into seasons and episodes.

The account is readable too. The panel reports expiry, how many simultaneous connections you are allowed, and which stream formats it will actually serve.

M3UXtream Codes
What you enterOne playlist URLServer URL, username, password
Channel listFlat, as written in the fileCategories from the panel
Movies and seriesWhatever is in the fileSeries with seasons and episodes
Guide dataSeparate XMLTV URLSame credentials
Catch-upTags on the playlist lineTimeshift endpoint
Account detailNoneExpiry, connections, formats

Why Xtream panels disagree with each other

Xtream is a convention, not a standard, and panels differ. The same field arrives as a string on one server and a number on another. Dates are Unix second strings in one place and date-like strings in another. Guide titles and descriptions often come back Base64-encoded. Some panels return an object keyed "0" and "1" where an array belongs, or send an empty season list while the episodes sit keyed underneath it.

We normalise all of that into one fixed shape before the interface ever sees it. A panel quirk becomes a failing test for us rather than an empty screen for you.

Which to choose

Both formats work in the free tier, along with live playback and the full guide. Multiple playlists, catch-up, scheduled recordings and offline downloads require Boost.

Frequently asked questions

What is the difference between M3U and Xtream Codes?
An M3U playlist is a static file. It lists channel names and stream URLs, and the player reads it top to bottom. Xtream Codes is an HTTP API the provider runs, so the player can request categories, movies, series and guide data as structured responses instead of one flat list.
Is Xtream Codes better than M3U?
For most people, yes. You get categories from the panel, series split into seasons and episodes, and guide data on the same credentials. An M3U playlist gives you exactly what the provider wrote into the file and nothing more.
Do I still need a separate EPG URL with Xtream Codes?
Usually not. Xtream panels publish guide data at xmltv.php using the same username and password, so the app can fetch it without a second URL. With a plain M3U playlist you do need to add the XMLTV URL yourself, otherwise the guide stays empty.
Can I add both an M3U and an Xtream playlist?
Yes. Jetpack IPTV supports both formats and you can keep more than one playlist in the app at the same time. Adding a single playlist is free. Multiple playlists require Boost.

Sources

  1. XMLTV, the open file format for TV listings
  2. Xtream Codes v2.9.2 panel API documentation
  3. @iptv/xtream-api, an open source Xtream client