What a VPK is and which one Dota loads
Everything Dota ships sits inside VPK archives. A mod is another one of those, slotted in ahead of the game's own. The number in its name decides who wins an argument.
Checked
The archive
VPK stands for Valve Pak. One archive holds thousands of files with their paths intact, so models/heroes/juggernaut/juggernaut.vmdl_c inside the archive answers to that path in the game. Big archives split in two parts: a _dir.vpk index that lists what is where, and numbered _000.vpk, _001.vpk data files holding the bytes. Move the index without its parts and you get an archive that points at nothing.
A Dota mod is a small VPK carrying a handful of replacement files under exactly the paths the originals use. The engine never compares them. It takes the first copy it finds.
Where "first" comes from
Inside a mounted folder, Dota walks the pak archives in numeric order and stops at the first hit. pak02 is read before pak30, so a file present in both comes from pak02. That is the whole rule, and it is why installing a mod means renaming it to a free number rather than dropping it in with the name its author gave it.
pak01_*
Valve's own. In a language folder it holds localized voice. Renaming or deleting it breaks the game.
pak02 to pak09
Where a mod goes when you want it to beat the others. The app puts anything you mark as priority here.
pak10 to pak99
Ordinary mods, first free number wins. Ninety-eight slots is more than anybody fills.
pak00
Never mounted. The app parks an archive here for a moment while swapping two mods, so a crash mid-swap leaves nothing half-installed.
Two mods that touch different heroes never meet, and you can run a hundred of them. Two Juggernaut sets in the same slot range will collide over the same model file, and only one of them shows up. Nothing warns you: the hero simply looks like the other mod.
Which folder gets mounted
Dota mounts game\dota, game\core, and one folder named after your audio language, such as game\dota_russian. Until July 2026 you could invent that suffix with a -language launch argument, which is where the old advice to make a dota_mods folder comes from. Since then the suffix comes from AudioLanguage in game\dota\cfg\boot.vcfg. The argument still exists and still works, but it writes that setting instead of the search path, so it can only ever name a language the game already knows.
"boot"
{
"UILanguage" "english"
"AudioLanguage" "russian"
}Read AudioLanguage, not UILanguage. The engine substitutes the audio one into the search path, which is also why changing your voice language asks for a restart while changing menu text does not.
The one file a language folder cannot touch
The list of every cosmetic in the game, scripts/items/items_game.txt, is read through a search path called MOD, and MOD resolves to game\dota and nothing else. Drop a modified copy into a language folder and the game reads straight past it.
Getting a file in there means editing game\dota\gameinfo_branchspecific.gi to register another content folder, then adding that file's SHA1 and CRC to game\bin\win64\dota.signatures, because the client checks the file against that list before it loads. Both files belong to Valve and both get overwritten by updates. What people do with it.
Questions
- Can I open a VPK and see what is inside?
- Yes. Dota 2 Mod Manager lists the paths in any mod you install and names the heroes and slots it touches. Outside the app, ValveResourceFormat reads Source 2 archives.
- Why did my mod stop working when I installed another one?
- They carry the same file and the lower pak number won. Give the one you want the lower number, or drop the other.
- What is the !pak51 prefix on files I downloaded?
- A merge hint for VPKMerge, not a name the game understands. Dota never mounts a file starting with an exclamation mark; rename it to a plain
pakNN_dir.vpk.