Skip to content
Server Setup 10 min read

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

A GSLT is tied to your Steam account, and Valve can revoke it if the server misbehaves β€” which can also affect your account standing. Keep the token private, and do not paste it into public logs or screenshots.

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; 27015 is 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

Every map in the collection is downloaded at boot, so a fifty-map collection makes for very slow restarts and a lot of disk use. Test the pipeline with three maps first.

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