Dota 2 Mod ManagerDownloadCatalog

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 pak29

The categories that have to load before the rest: trees, river, shaders, hero effects, ranged attacks, hero items, optimization. The app puts them here by their category.

pak30 to pak99

Every other mod, first free number wins. pak64 holds the app's own notice text, and pak65 to pak67 are left to Minify.

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. Dota does not warn you: the hero simply looks like the other mod. My mods does: the mod that loses is marked overruled, with the files it lost named.

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.

Ctrl K or / opens this box from any page.