1 Read this first — you may not need to mount anything
In July 2025 Facepunch shipped most of Counter-Strike: Source and Half-Life 2 Episodic content inside Garry's Mod itself, with Valve's permission. Players no longer need to own CS:S to see those textures and models on community maps. If you are following a hosting guide written before that update, it is telling you to do work that is probably already done for you.
What is included: the bulk of the CS:S materials and models that community maps and addons reference.
What is still missing:
- Maps. CS:S map files (
de_dust2,cs_office, and the rest) are not bundled. Running one on your server still needs the real map files. - Voice-over files and music, held back for licensing reasons.
- Facepunch is explicit that this does not remove every instance of missing content — a badly packaged addon can still throw ERROR models.
Mount CS:S on your server if…
- you want to run actual CS:S maps (
de_/cs_) on the server - a map or addon still references content outside the bundled set
- you compile maps in Hammer and want CS:S assets available
- your server is pinned to an older Garry's Mod build
2 What mounting actually does — and what it doesn't
Mounting is server-side. It lets the server process read CS:S files, so it can load a CS:S map, resolve model and material paths, and stop filling your console with missing-content errors.
It does not push content to your players. There is no mechanism where a server-side mount streams CS:S assets down to clients. Players get that content from their own copy of Garry's Mod (since July 2025) or from owning CS:S. So if one player sees ERROR models and everyone else is fine, the fix is on their end or in your addon packaging — not in mount.cfg.
3 Get the CS:S files — free, straight from Valve
Valve distributes the Counter-Strike: Source Dedicated Server package free through SteamCMD, using an anonymous login. That package contains the cstrike content folder, so you do not need to buy the game to mount it on a server.
The app ID is 232330.
Windows
steamcmd +force_install_dir C:\csscontent +login anonymous +app_update 232330 validate +quit
Linux
./steamcmd.sh +force_install_dir ~/csscontent +login anonymous +app_update 232330 validate +quit
That leaves you a cstrike folder inside the install directory. Budget a few GB of free disk for it — check your plan's disk allowance before you start a transfer, not halfway through one.
cstrike folder from your own install works identically — it's at steamapps/common/Counter-Strike Source/cstrike.4 Get the files onto your server
Most game panels give you a file manager and SFTP rather than a shell, so the reliable route is:
- Zip the
cstrikefolder on your PC (7-Zip, or right-click → Compress). - Upload the zip to your server's root folder — on Pterodactyl that's
/home/container, the same level as thegarrysmodfolder. - Unzip it with the file manager's extract button.
Zip-then-unzip beats uploading thousands of loose files over SFTP: it's dramatically faster and you don't end up chasing half-transferred files later.
Put the folder beside garrysmod, not inside it. Dumping CS:S files straight into garrysmod/ appears to work and then quietly makes a mess you'll be untangling at the next update.
/home/container/
├── garrysmod/
│ ├── addons/
│ ├── cfg/
│ │ └── mount.cfg ← the file you'll edit
│ └── maps/
└── cstrike/ ← the folder you just uploaded
├── cstrike_pak_000.vpk
├── cstrike_pak_dir.vpk
├── maps/
└── ...
Tight on disk? The cstrike_pak_*.vpk files and maps/ carry the actual content — but keep gameinfo.txt, and re-test in game after trimming anything.
5 The one line in mount.cfg
Open garrysmod/cfg/mount.cfg. It ships with every example commented out using //. Edit it so it reads:
"mountcfg"
{
"cstrike" "/home/container/cstrike"
}
On a Windows box the same file looks like:
"mountcfg"
{
"cstrike" "C:\csscontent\cstrike"
}
The rules people trip over
- The path points at the folder that contains the
.vpkfiles — not at a.vpk, and not at its parent folder. - Linux paths are case-sensitive. Lowercase
cstrike, in the key and the path. - Keep the KeyValues format exactly: quoted key, whitespace, quoted path, all inside the
"mountcfg" { }block. //starts a comment. A stray//left in front of your line is the single most common reason this "doesn't work."- Fully restart the server. Mounting happens at startup — a
changelevelwill not pick it up.
6 Verify it actually mounted
In your server console:
lua_run print(IsMounted("cstrike"))
true means you're done. false means one of three things, in order of likelihood: the path is wrong, the letter case is wrong, or the server didn't fully restart.
Two more checks worth doing:
changelevel de_dust2— the map only loads if CS:S map files are actually readable by the server.- Read the startup console output: mounted games are listed there, and the missing-content spam should be gone.
7 mountdepots.txt — the other file
garrysmod/cfg/mountdepots.txt tells Garry's Mod which game depots to attempt to mount. It is usually not the problem on a dedicated server, but if addons still report missing content after a clean mount, make sure the file exists and matches the default:
"gamedepotsystem"
{
"cstrike" "1"
"hl1" "1"
"hl1_hd" "1"
"hl2" "1"
"hl2mp" "1"
"episodic" "1"
"ep2" "1"
"lostcoast" "1"
}
Create it if it's missing. The games don't have to be installed for the entries to sit there — a disabled or missing entry is what breaks things, not an unused one.
8 Mounting other Source games
Same file, same pattern, one extra line per game. The free dedicated-server packages give you the content for each:
| Game | Mount key | SteamCMD app ID |
|---|---|---|
| Counter-Strike: Source | cstrike | 232330 |
| Team Fortress 2 | tf | 232250 |
| Day of Defeat: Source | dod | 232290 |
| Half-Life 2: Deathmatch | hl2mp | 232370 |
"mountcfg"
{
"cstrike" "/home/container/cstrike"
"tf" "/home/container/tf"
}
For anything else, look up "<game> Dedicated Server" on SteamDB to get the app ID — the mount key is simply the game's folder name.
9 When it still doesn't work
IsMountedreturns false → path, then case, then restart. Check all three in that order before changing anything else.- Server starts but the CS:S map won't load → the map file isn't inside the mounted
cstrike/maps/. Maps are the one thing Garry's Mod does not bundle. - Players see ERROR models, you don't → client-side. Have them verify Garry's Mod files through Steam, check the addon actually ships its own content, and confirm your Workshop collection is complete.
- Pink-and-black checkerboard on one map → a material that map needs is missing somewhere in the chain. Nine times out of ten that's a badly packaged custom map, not CS:S.
- Everything mounted, some errors remain → a few addons reference content Valve didn't license into the bundle (voice lines, music). Mount the real files, or drop the addon.
- Upload fails partway → out of disk, or SFTP choking on file count. Zip first, and check your disk allowance.
Garry's Mod hosting that doesn't fight you
Full file manager and SFTP access, Workshop and FastDL support, and high-clock CPUs with NVMe storage in RAID — because GMod's Lua leans on single-thread speed more than core count. DDoS protection and instant setup included.
10 Quick recap
- Since July 2025, most CS:S content ships with Garry's Mod — update your server build and re-test before mounting anything.
- Maps, voice lines and music are still not bundled. Those are the real reasons to mount.
- Get the files free with SteamCMD: app
232330, anonymous login. - Zip → upload → unzip so
cstrike/sits besidegarrysmod/. - Add one line to
garrysmod/cfg/mount.cfg, watch the case, drop the//. - Restart fully, then confirm with
lua_run print(IsMounted("cstrike")). - Mounting is server-side only — it never sends content to players, and CS:S does not belong on FastDL.
11 FAQ
Do I still need to mount CS:S on a Garry's Mod server?
Usually not. Most CS:S materials and models ship with Garry's Mod since July 2025. You still need to mount it to run actual CS:S maps, to cover addons that need the unbundled voice or music files, or to have the assets available when compiling maps in Hammer.
Do players need to own Counter-Strike: Source to join my server?
No. The bundled content covers players who don't own CS:S on most community maps. CS:S map files are the exception — those aren't included with Garry's Mod.
Is downloading CS:S through SteamCMD free and legal?
Yes. Valve publishes the Counter-Strike: Source Dedicated Server package under app ID 232330 for anonymous download. It contains the cstrike content folder, so you don't need to buy the game to mount it on a server.
Does mounting CS:S on the server give the content to players?
No — mounting is server-side only. Players get the content from their own Garry's Mod install. Putting CS:S files on FastDL isn't a workaround: it redistributes Valve's content, adds gigabytes to every join, and is redundant now.
How do I check whether it mounted?
Run lua_run print(IsMounted("cstrike")) in the server console. true means it worked; false means a wrong path, wrong letter case on Linux, or no full restart after the edit.
Why do I still see ERROR models after mounting?
If the server mounted cleanly and only some players are affected, it's client-side or an addon packaging problem, not mount.cfg. Have them verify Garry's Mod files through Steam and check your Workshop collection is complete.