6.05 - Library file format
by Dotpitch on 2025-10-01

XMPlay saves its library (and current playlist track info) in the xmplay.library file next to xmplay.exe (or in C:\Users\[username]\AppData\XMPlay if you have Store per-user config/etc ticked). You can process this file with external utilities, for example to find duplicate files in your collection.

Header

  • The first byte of the file denotes the library format version number. When a new feature is added to the library which breaks backwards compatibility, this version number is increased to detect those problems.
  • The second and third byte are 00.
  • The fourth byte contains library file information flags. Currently, the 1st bit (MSB) describes the string format used in the rest of the file, either UTF-8 (1) or ANSI (0).

Track entries

Each entry contains a number of different fields depending on the library format version.

Library version 6 (since XMPlay 3.8.2):
  • Filename as string (full path)
  • Formatted title as string (shown in the playlist)
  • Title, Artist, Album, Year, Track, Genre, Comment and Filetype tags as string
  • Field flags as byte (1 = 64-bit file size, 2 = got subsongs)
  • Duration in milliseconds as dword
  • Last play timestamp as dword
  • File size in bytes as dword or qword (depending on Field flags)
  • Play count as dword
  • Added timestamp as dword (0 = not in library)
  • Flags as byte (2 = got length, 4 = got tags, 16 = overridden tags, 32 = got subsong info)
  • Rating as byte
  • Subsong count as 2 bytes (depending on Field flags)
  • Separated subsong number as 2 bytes (depending on Field flags)
Library versions 3 (XMPlay 3.3), 4 (XMPlay 3.5), 5 (XMPlay 3.8):
  • Filename as string (full path)
  • Formatted title as string (shown in the playlist)
  • Title, Artist, Album, Year, Track, Genre, Comment and Filetype tags as string
  • Duration in milliseconds as dword
  • Last play timestamp as dword
  • File size in bytes as dword
  • Play count as dword
  • Added timestamp as dword (0 = not in library)
  • Flags as byte (2 = got length, 4 = got tags, 16 = overridden tags, 32 = got subsong info)
  • Rating as byte (since library version 4)
  • Subsong count as 2 bytes (since library version 5)
  • Separated subsong number as 2 bytes (since library version 5)

Each string is terminated with a null character (00). There is no length limit on strings and empty strings are allowed. Timestamps are noted in seconds since January 1st, 1970, 0:00. The track entries are closed with a null filename (00).

Monitored folder entries

Each entry contains three fields.

Next page: Custom filetypes and icons