Where VirtualDJ Stores Your Library: database.xml, MyLists and More
Updated · by the MixGoat team · Tool: Library Migration
Short answer
VirtualDJ keeps its library as plain files in one data folder: Documents\VirtualDJ on Windows (some installs use %LOCALAPPDATA%\VirtualDJ or %APPDATA%\VirtualDJ) and ~/Library/Application Support/VirtualDJ on macOS. database.xml is the library itself, one Song element per track with its tags, analysis and every cue, loop and grid point as Poi elements. MyLists holds your playlists as .vdjfolder XML files, Folders holds virtual and filter folders, History logs each session as an M3U, Settings.xml stores preferences and Cache holds waveforms and covers. Every external drive with tracks also gets its own VirtualDJ/database.xml at the drive root. Back up database.xml, MyLists and Folders together; the rest can be rebuilt.
Step by step
- 1
Open the data folder
Windows: press Win+R, type %USERPROFILE%\Documents\VirtualDJ and press Enter; if that folder is empty or missing, try %LOCALAPPDATA%\VirtualDJ and then %APPDATA%\VirtualDJ. macOS: in Finder choose Go → Go to Folder and enter ~/Library/Application Support/VirtualDJ. MixGoat checks these same locations, in that order on Windows, when it looks for your library.
- 2
Identify database.xml
This is the file that matters. Its root element is VirtualDJ_Database with a Version attribute (the year of the release that last wrote it, for example 2025). Under it, each Song has a FilePath and FileSize, a Tags element (Author, Title, Genre, Album, Year, Bpm, Key, Stars, Comment, Flag), an Infos element (SongLength, PlayCount, FirstSeen, LastPlay, Bitrate), a Scan element (analysed Bpm, Key, Volume) and zero or more Poi elements. Open it in a text editor and search for a title to see one entry.
- 3
Look inside MyLists and Folders
MyLists contains one .vdjfolder per saved playlist: an XML VirtualFolder with a song element per track carrying the path, songlength, bpm and key. Legacy or imported lists may sit there as .m3u. Folders holds virtual folders and filter folders (the saved searches), also as .vdjfolder or .subfolders files. Both store paths, not track IDs, so they break the same way database.xml does when files move.
- 4
Check History, Settings.xml and the rest
History keeps one M3U per session named by date, which is your tracklist archive. Settings.xml holds every option, key mapping and skin choice. Cache stores waveform and cover data and rebuilds itself. Skins, Plugins, Sampler and Mappers hold add-ons you installed. Recordings usually live in Documents by default and are audio, not library data.
- 5
Find the per-drive databases
Plug in each external drive and look for a VirtualDJ folder at its root. It contains a database.xml with the entries for tracks on that drive, written with drive-relative paths so the drive keeps its cues on another computer. On macOS the same folder appears at /Volumes/<drive>/VirtualDJ. MixGoat writes POIs into these per-drive files as well as the main one when it saves cues for tracks on that drive.
- 6
Decide what to back up
database.xml, MyLists, Folders and each drive's VirtualDJ folder are the library. Add Settings.xml if you care about mappings, and History if you keep tracklists. Everything else regenerates. The step-by-step, including MixGoat Cloud Backup which watches this folder and uploads database.xml on change, is at mixgoat.com/guides/how-to-back-up-virtualdj-library.
One XML file instead of a database engine
Rekordbox uses an encrypted SQLite file (master.db), Serato a binary database V2 or master.sqlite, Traktor an XML collection.nml. VirtualDJ sits closest to Traktor: a single readable XML file that the app loads at launch, keeps in memory and rewrites on the way out and periodically while running. That makes it easy to inspect, copy and search-and-replace, and it is why so many VirtualDJ fixes are "quit, edit the file, relaunch". It also means a crash mid-write can leave a truncated file; VirtualDJ is good at recovering, but a copy of your own is cheap insurance.
Because VirtualDJ writes the file while running, always quit before copying or editing it, and never let two machines write to a shared database.xml over a cloud-synced folder at the same time. The layouts of the other apps are compared at mixgoat.com/guides/rekordbox-library-files-explained, mixgoat.com/guides/serato-library-files-explained and mixgoat.com/guides/traktor-library-files-explained.
What MixGoat reads and writes here
MixGoat reads database.xml and the .vdjfolder files in MyLists to import your VirtualDJ library, cues, loops and playlists; the import is read-only and free. It writes to VirtualDJ in two situations: the Cues & Loops save (GOAT) and the free migration into VirtualDJ from Rekordbox, Serato or Traktor. Both copy database.xml to database.xml.bak first, then inject Poi elements into the Song entries that match by FilePath, adding a new Song only for a track VirtualDJ has never seen. Migrated playlists are written as .vdjfolder files into MyLists. The Version attribute on the root is preserved from your file; only a database created from nothing is stamped with the current year.
MixGoat Cloud Backup treats database.xml as the VirtualDJ snapshot: it is gzipped and uploaded when the file changes, skipped while VirtualDJ is running, and restored by renaming the existing file to database.xml.mixgoat-restore-bak-<timestamp> rather than overwriting it.
- Read: database.xml, MyLists/*.vdjfolder (free).
- Written on cue save and migration: database.xml (with .bak), per-drive database.xml, MyLists/*.vdjfolder.
- Never touched: Settings.xml, History, Cache, Skins, Plugins.
Import your VirtualDJ library into MixGoat
Reads database.xml and MyLists as they are. Import and migration are free; cue saving and Cloud Backup are GOAT.
Import your VirtualDJ library into MixGoatFrequently asked questions
- Where is database.xml on Windows?
- Documents\VirtualDJ\database.xml for most installs. If it is not there, check %LOCALAPPDATA%\VirtualDJ and %APPDATA%\VirtualDJ. Settings → Options in VirtualDJ also shows the home folder path.
- Where is the VirtualDJ database on Mac?
- ~/Library/Application Support/VirtualDJ/database.xml. The Library folder is hidden by default; use Go → Go to Folder in Finder.
- Why is there a VirtualDJ folder on my USB drive?
- VirtualDJ creates one on every drive that holds tracks and stores a database.xml there with the entries for those tracks. It is what lets the drive keep its cues and tags on another computer. Do not delete it.
- Are VirtualDJ playlists stored in database.xml?
- No. Playlists are separate .vdjfolder files in MyLists, and virtual and filter folders are in Folders. database.xml only holds per-track data.
- Can I open database.xml in Excel or a text editor?
- In any text editor, yes; it is UTF-8 XML. A large library can be tens of megabytes, so use an editor that handles big files. Quit VirtualDJ before saving changes.
- What does the Version attribute in database.xml mean?
- The release that last wrote the file, for example 2023 or 2025. Older VirtualDJ 8 builds wrote a version number instead. Newer VirtualDJ reads older files and updates the attribute on its next write.