Skip to main content

Directory layout

The folder the engine mounts is not the Steam folder name, so substitute yours in every path below:

GameSteam folderMod directory
Counter-Strike 2Counter-Strike Global Offensivecsgo
Dota 2dota 2 betadota
DeadlockDeadlockcitadel
Half-Life: AlyxHalf-Life Alyxhlvr
Aperture Desk JobAperture Desk Jobsteampal
Dota UnderlordsUnderlordsdac
Artifact ClassicArtifactdcg
Artifact FoundryArtifact 2.0dcg

Two of the older titles do not follow the game/ layout at all. The Lab keeps its Source 2 content in RobotRepair/vr/, and SteamVR Home nests it under tools/steamvr_environments/game/.

Why the paths matter

The engine and the tools find assets by path. A folder name is part of an asset's identity: materials/wall.vmat compiles to materials/wall.vmat_c, and that exact string is what every material, model and map referring to it stores. Nothing searches the disk for a file that is not where its path says it is.

The practical consequence is that folders are not free to rearrange. Renaming or moving one after assets reference it breaks every reference at once, because those paths are stored as plain strings inside the compiled files.

The content folders

The same folder names appear on both sides of the install: authored under content/, compiled under game/, at the same relative path. What each one is for:

FolderHoldsSourceCompiledPacked
agents/player models, laid out the same way as weapons/.vmdl, .dmx, .vmat.vmdl_c, .vmat_cno
animation/Animgraph 2 skeletons, clips and graphs.vnmskel, .vnmclip, .vnmgraph_c of eachno
cfg/maps/per map console configs, executed when that map loads.cfgnot compiledyes
items/economy items such as keychains and stickers, with their artwork.econitem, .tga.econitem_c, .vtex_cno
lighting/postprocessing/the post processing a map's lighting uses.vpost.vpost_cyes
maps/maps.vmapone .vpk per mapyes
materials/materials and the textures they reference.vmat, .vtex, and the .tga, .psd or .png a .vtex reads.vmat_c, .vtex_cyes
models/models, with the materials and textures that belong only to them.vmdl, and the .dmx or .fbx meshes it builds from.vmdl_cyes
panorama/the UI: layouts, styles, scripts and images.xml, .css, .js, .ts, images.vxml_c, .vcss_c, .vjs_c, .vts_c, .vtex_cno
panorama/images/map_icons/
panorama/images/overheadmaps/
panorama/layout/custom_game/
panorama/styles/custom_game/
the map's icon and overhead image, and the UI an addon adds for a custom gameimages, .xml, .css.vtex_c, .vxml_c, .vcss_cyes
particles/particle systems and the snapshots they sample.vpcf, .vsnap.vpcf_c, .vsnap_cyes
postprocess/post processing settings.vpost.vpost_cyes
pulse/Pulse graphs.vpulse.vpulse_cno
resource/localisation, subtitles, fonts and UI data.txt, .resmostly not compiledno
resource/overviews/a map's radar overview definition.txtnot compiledyes
scripts/data the game reads rather than renders: item and weapon definitions, response rules.kv3, .vdata, .vrr, .txt.vdata_c, .vrr_c, or nothingyes
smartprops/SmartProps, the rule driven props Hammer places.vsmart.vsmart_cno
soundevents/the soundevent scripts that name and configure playback.vsndevts.vsndevts_cyes
sounds/the audio files themselves.wav, .mp3.vsnd_cyes
soundstacks/mixing rules and operators applied to soundevents.vsndstck, .vmix.vsndstck_c, .vmix_cno
weapons/weapon models with the materials and sounds that belong to them, one folder per weapon.vmdl, and the .dmx or .fbx it builds from.vmdl_cno

Packed is whether the folder survives publishing to the workshop as the game ships. A folder marked no compiles and works locally, then is dropped from the uploaded item without a warning, unless the list that decides this is edited first. See Workshop packing.

Every extension in the table is listed with its compiler in Asset Types.

Addons

An addon is a mod directory of its own, using the same folder names, mounted on top of the main mod. Paths inside it are relative to the addon root, so content/csgo_addons/my_addon/materials/wall.vmat is referenced everywhere as materials/wall.vmat, exactly as if it shipped with the game. content/csgo_addons/addon_template/ is the layout Valve ships as a starting point, and the other tools games carry the same template under their own addon directories.

Which of an addon's folders the game mounts, and in what order against the base game, is on Content mounting. Not every folder survives publishing either: by default the workshop packer keeps only the directories the main mod's gameinfo.gi lists and drops the rest without a warning, though that list can be edited, see Workshop packing.