M3U vs M3U8 vs PLS: which playlist format should you use?

Use M3U8 for local music on a modern system. Use M3U if your player is older. Use PLS only if your software explicitly requires it.


If you have a folder of music files and want to build playlists, you will quickly run into three file formats: .m3u, .m3u8, and .pls. They all do roughly the same job, and most players support all three. But they are not identical, and picking the wrong one causes problems that are annoying to debug. Here is how they differ and when to use each one.

What all three formats have in common

All three are plain text files. Open one in a text editor and you will see a list of file paths, one track per line. None of them store the audio. They are just pointers, a map from the playlist to the actual files on your disk. Move the files, and the playlist breaks. That is true of all three formats.

M3U

M3U is the oldest and most widely supported format. The basic structure is simple: one file path per line, with an optional header and per-track metadata.

A minimal M3U file with metadata looks like this:

#EXTM3U
#EXTINF:243,Artist Name - Song Title
/music/artist/album/01-song.flac
#EXTINF:198,Artist Name - Second Song
/music/artist/album/02-second.flac

The #EXTM3U line declares the format. The #EXTINF lines carry the duration in seconds and a display label. Players that do not understand #EXTINF ignore those lines and just read the paths. That backward compatibility is why M3U has stayed relevant for thirty years.

The catch: M3U does not specify a character encoding. In practice this means files with non-ASCII characters in their paths or tags (accented letters, Japanese characters, anything outside the basic Latin alphabet) can look fine in one player and show garbage in another, because different software assumes different encodings.

M3U8

M3U8 is M3U with the encoding problem fixed. The 8 refers to UTF-8, and the format is otherwise identical. An M3U8 file follows the same structure as M3U, just with a declared encoding that every modern application can handle correctly.

If your music library has any artists or albums with non-Latin characters, use M3U8. If your library is entirely ASCII, M3U and M3U8 are interchangeable. The only reason to pick plain M3U over M3U8 today is compatibility with older software that predates UTF-8 support, which is increasingly rare.

M3U8 is also the format used by HLS (HTTP Live Streaming) for video and audio streaming. If you search for M3U8 online you will find a lot of results about streaming, IPTV, and video players. Ignore all of that. The format is the same, but the use case here is local music on your own machine.

PLS

PLS is a different format entirely. Instead of one path per line, it uses an INI-style structure:

[playlist]
NumberOfEntries=2
File1=/music/artist/album/01-song.flac
Title1=Artist Name - Song Title
Length1=243
File2=/music/artist/album/02-second.flac
Title2=Artist Name - Second Song
Length2=198
Version=2

PLS stores the same information as M3U (paths, titles, durations), just in a different shape. It was popularized by Winamp and is still used by some internet radio clients. For local music libraries it offers no practical advantage over M3U8 and is less widely supported.

Use PLS if a specific piece of software requires it. Otherwise, skip it.

Relative vs absolute paths

This applies to all three formats and is the source of most playlist breakage. A path in a playlist can be absolute or relative.

An absolute path points to a fixed location on disk:

/home/bret/music/artist/album/song.flac

A relative path points to a location relative to where the playlist file itself is stored:

../music/artist/album/song.flac

Absolute paths work fine as long as the files never move. The moment you rename a folder, move your library to a new drive, or copy the playlist to a different machine, every path in the file is wrong.

Relative paths move with the playlist as long as you keep the playlist and the music in the same directory tree. This makes them more portable. If you are building playlists for a self-hosted media server like Jellyfin or Navidrome, check the documentation for that server: some expect absolute paths, some expect relative, and getting it wrong is the most common reason a freshly imported playlist shows up empty.

Which format to use

For local music on a modern system, M3U8 with relative paths is the right default. It handles any characters in file names, it works with virtually every music player and media server, and the relative paths make the playlist portable.

The cases where you would deviate from that:

  • Your player only reads .m3u files: rename the file or pick M3U. The content is the same.
  • Your media server requires absolute paths: switch to absolute. Keep in mind that your playlists will break if you ever move the library.
  • A specific tool requires PLS: use PLS for that tool.

How Emthree handles this

Emthree exports standard .m3u files with an #EXTM3U header and #EXTINF metadata on each track. Paths are written as relative paths, so the exported file stays portable as long as you keep the playlist alongside your music folder.

One guard worth knowing: if the tracks you have selected do not share a common root folder with each other, the export is blocked. That is deliberate, because relative paths that cross different root folders cannot resolve correctly on another machine. If you hit that block, it means your selected tracks are spread across folders that do not have a shared parent, and you will need to sort out the library structure before exporting.

The scanner reads duration and tag data directly from your files in the browser, no upload required, so the #EXTINF line reflects the actual values from each file's metadata rather than whatever was typed in manually.


For most people with a local music library, the format decision is not the hard part. The hard part is keeping paths consistent when the library moves. Pick M3U8, use relative paths, and keep the playlist in the same folder tree as the music.