How to Add Workshop Maps to a CS2 Dedicated Server
Run Counter-Strike 2 Workshop maps on a dedicated server with host_workshop_map and host_workshop_collection. Includes SteamCMD setup, GSLT, and troubleshooting.
Counter-Strike 2 servers do not browse the Workshop and they do not read maps you copy into a folder. They fetch content by ID at runtime, through two console variables. Once you know which one you need and the one ordering rule that trips everyone up, the setup is short.
How CS2 servers load Workshop maps
There are two mechanisms, and picking the right one saves a lot of trial and error:
-
host_workshop_map <id>β downloads one map by its Workshop ID and switches to it. Right for a server that exists to run a single map: an aim trainer, a retake setup, a practice range. -
host_workshop_collection <id>β downloads every map in a collection and builds a rotation from it, which enables end-of-match voting. Right for a community server offering a pool of maps.
Both take numeric IDs from Workshop URLs β the ?id= value on a map page or a
collection page.
You cannot boot straight onto a Workshop map
+map is processed before Workshop content is downloaded, so at that moment the
community map does not exist and the server fails to start. Always set +map to an
official map such as de_dust2, and let host_workshop_map switch over
afterwards. This is the single most common setup failure.
Step 1: install the server with SteamCMD
Install SteamCMD if you do not have it. On Linux:
# Linux
mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf - On Windows, download the SteamCMD zip from Valve and extract to C:\steamcmd.
Then install Counter-Strike 2. The server uses app ID 730, the same as the game:
./steamcmd.sh +force_install_dir ../cs2-server \
+login anonymous \
+app_update 730 validate \
+quit
Two things worth noting. +force_install_dir must come before +login, since SteamCMD processes arguments in order. And validate is
worth the extra time on a first install β a partially downloaded server produces errors that look
like configuration problems.
This is a large download. Expect tens of gigabytes and plan disk space accordingly.
Step 2: get a game server login token
A public CS2 server needs a Game Server Login Token, which links it to a Steam account so it can be
listed in the server browser. Create one on Steam's game server account management page using app
ID 730.
You pass it with +sv_setsteamaccount. A local or LAN server used purely for testing
can run without a token, but it will not appear publicly.
Tokens can be revoked
Step 3: run a single Workshop map
Save this as start.sh in your server directory:
#!/usr/bin/env bash
# start.sh β CS2 server booting straight into a Workshop map
GSLT="YOUR_GAME_SERVER_LOGIN_TOKEN"
WORKSHOP_MAP="3070288532"
./game/bin/linuxsteamrt64/cs2 -dedicated \
-console \
-usercon \
-port 27015 \
+sv_setsteamaccount "$GSLT" \
+game_type 0 \
+game_mode 0 \
+map de_dust2 \
+host_workshop_map "$WORKSHOP_MAP" On Windows:
@echo off
REM start.bat β CS2 server on Windows
set GSLT=YOUR_GAME_SERVER_LOGIN_TOKEN
set WORKSHOP_MAP=3070288532
game\bin\win64\cs2.exe -dedicated -console -usercon -port 27015 ^
+sv_setsteamaccount %GSLT% ^
+game_type 0 +game_mode 0 ^
+map de_dust2 ^
+host_workshop_map %WORKSHOP_MAP% What the parameters do:
-dedicatedβ run headless rather than launching the game client.-consoleβ enable the server console.-userconβ allow RCON connections for remote administration.-portβ the game port;27015is the convention.+sv_setsteamaccountβ your GSLT.+game_type/+game_modeβ the mode pair (see below).+map de_dust2β the stock boot map. Required.+host_workshop_mapβ the Workshop map to download and switch to.
The mode pair controls ruleset. Common combinations:
// Competitive
+game_type 0 +game_mode 1
// Casual
+game_type 0 +game_mode 0
// Deathmatch
+game_type 1 +game_mode 2
// Custom / Workshop game modes
+game_type 3 +game_mode 0 Step 4: run a collection with map voting
For a rotation, build a Workshop collection containing the maps you want, copy its ID, and swap the parameter:
#!/usr/bin/env bash
# start.sh β CS2 server with a Workshop collection
GSLT="YOUR_GAME_SERVER_LOGIN_TOKEN"
COLLECTION="2753947063"
./game/bin/linuxsteamrt64/cs2 -dedicated \
-console \
-usercon \
-port 27015 \
+sv_setsteamaccount "$GSLT" \
+game_type 0 \
+game_mode 0 \
+map de_dust2 \
+host_workshop_collection "$COLLECTION"
The server downloads everything in the collection at startup and generates the rotation itself.
Unlike CS:GO, there is no need to hand-edit mapgroup or mapcycle files β
CS2 derives them from the collection.
Make the collection public or unlisted. A private collection cannot be read by the server and the fetch silently produces nothing.
Start with a small collection
Useful console commands
ds_workshop_listmaps // list Workshop maps the server can see
host_workshop_map <id> // download and switch to a Workshop map
host_workshop_collection <id> // load a whole collection
changelevel <mapname> // switch to an already-loaded map
status // current map, players, server state ds_workshop_listmaps is the one to reach for first when something is not working. It
reports what the server can actually see, which immediately separates a failed download from a
wrong map name.
You can also call host_workshop_map live from the console to pull in and switch to a
new map without restarting β handy when testing several candidates.
A practice server config
If the server exists for utility practice, most of the value is in the config rather than the map.
Save this as game/csgo/cfg/practice.cfg and load it with exec practice:
// game/csgo/cfg/practice.cfg
// Run with: exec practice
sv_cheats 1
mp_limitteams 0
mp_autoteambalance 0
mp_maxmoney 60000
mp_startmoney 60000
mp_buytime 9999
mp_buy_anywhere 1
mp_freezetime 0
mp_roundtime 60
mp_roundtime_defuse 60
mp_respawn_on_death_ct 1
mp_respawn_on_death_t 1
sv_infinite_ammo 1
ammo_grenade_limit_total 5
sv_grenade_trajectory_enable 1
sv_showimpacts 1
mp_warmup_end
mp_restartgame 1
The notable entries: sv_grenade_trajectory_enable draws grenade arcs,
sv_showimpacts shows bullet impact points, mp_buy_anywhere plus a large
mp_maxmoney lets you rebuy anywhere on the map, and the respawn variables keep you
moving instead of sitting out rounds.
sv_cheats 1 is required for the trajectory and impact visualisations. That is normal
for a practice server and has no bearing on your account β it only affects the server you are
running.
Troubleshooting
The server exits immediately on startup
Most often +map is pointing at a Workshop map. Set it to an official map and use
host_workshop_map for the community one. Failing that, run SteamCMD again with
validate to repair an incomplete install.
The Workshop map never loads
Check the ID is the map's own ?id= value and not a collection ID β they are
interchangeable-looking numbers used by different variables. Then run
ds_workshop_listmaps to see whether the download actually landed.
The collection loads no maps
Verify the collection is public or unlisted, and that it contains Counter-Strike 2 items. A collection can hold items for other games, and those are skipped without an obvious error.
The server does not show up in the browser
Almost always the GSLT: missing, expired, or registered against the wrong app ID. Also confirm the
game port is reachable from outside β both UDP and TCP on 27015 by default β and that
no firewall or NAT rule is dropping it.
Players cannot download the map
CS2 clients pull Workshop maps from Steam directly, so this is usually a client-side Workshop problem rather than a server one. Have the player check they can reach the Workshop at all. Unlike Source 1 games, no FastDL host is involved.
The map works but the mode is wrong
Revisit the game_type and game_mode pair. A Workshop map built for a
custom mode will behave oddly under competitive rules, and vice versa.
Frequently Asked Questions
Why canβt I start the server directly on a Workshop map?
The +map parameter runs before Workshop content has been downloaded, so the map does not exist yet at that point. Start on an official map like de_dust2, then let host_workshop_map switch to the community map once it has been fetched.
What is the CS2 dedicated server app ID?
App 730 β the same ID as the game. Unlike Garryβs Mod, which has a separate server app, CS2 uses one ID for both, and SteamCMD installs the server binaries from it.
Do I need a GSLT?
For a public, listed server, yes. A Game Server Login Token ties the server to a Steam account so it can appear in the browser. A purely local or LAN server for testing can run without one.
What is the difference between host_workshop_map and host_workshop_collection?
host_workshop_map loads one specific map by ID. host_workshop_collection downloads every map in a collection and builds a rotation, which enables end-of-match map voting. Use the first for a dedicated practice server, the second for a community server.
Do I need to edit mapcycle or mapgroup files?
Not for Workshop collections. CS2 generates the rotation from the collection contents itself, which is a change from the manual mapgroup editing CS:GO required.
Will players need to download the map before joining?
Yes, and CS2 handles it β clients pull the map from the Workshop when they connect. Because the transfer goes through Steam rather than the game server, it is fast and needs no FastDL host, unlike Source 1 games.
How do I check which Workshop maps the server has?
Run ds_workshop_listmaps in the server console. It reports the Workshop maps currently available, which is the quickest way to confirm a download actually succeeded.
Summary
Install app 730 with SteamCMD, register a GSLT, and start the server on an
official map. Add +host_workshop_map <id> for a single community map, or
+host_workshop_collection <id> for a voted rotation. CS2 builds the map cycle
itself, and clients fetch maps from Steam without any FastDL setup.
If you also want local copies of the maps you are hosting β for version pinning or offline testing β see downloading CS2 Workshop maps without Steam.
Ready to download a Workshop item?
Paste any public Steam Workshop URL and get the item details in seconds. Free, no account, no Steam client needed.
Open the Downloader