How to set up a CS2 server from scratch
Full setup walkthrough for a Counter-Strike 2 dedicated server: deploy via SteamCMD with a Game Server Login Token (GSLT), configure server.cfg and gamemode configs, set launch options for Competitive / Premier / Deathmatch / Retakes, install Metamod:Source and CounterStrikeSharp plugins, add Get5 for match play, and fix the common CS2 errors.
- What you need first
- Get a Game Server Login Token (GSLT)
- Deploy the server (1-click)
- File layout & where things go
- Launch options
- Core
server.cfgsettings - Gamemodes โ Competitive, Premier, DM, Retakes
- Install Metamod:Source + CounterStrikeSharp
- Get5 for match play (optional)
- Connect and test
- Common errors and fixes
What you need first
Get these in order before deploying:
- An active CS2 plan on Fatality Servers. See our CS2 hosting plans if you haven't signed up yet.
- A Steam account with CS2 purchased and in good standing โ Valve issues GSLT tokens only to accounts that own the game and have no recent bans.
- A GSLT (Game Server Login Token) โ required to show on the server browser. See the next section.
- A basic SFTP client (FileZilla, WinSCP) โ CS2 configs are plain text.
- Realistic expectations on per-player perf: CS2 is much heavier than CS:GO. A 10-slot competitive server wants a current-gen Ryzen or Intel core and 4+ GB RAM โ we provision accordingly on all CS2 plans.
Sizing note: CS2's sub-tick netcode and Source 2 physics eat more CPU than CS:GO's 128-tick ever did. A 10-slot competitive server runs comfortably on our Community plan; a 32-slot surf or DM server wants the Flagship tier. If a plan can handle CS:GO, assume ~1.5ร the resources for the equivalent CS2 load.
Get a Game Server Login Token (GSLT)
Without a GSLT, your CS2 server will not appear in the public server browser and will disconnect players after ~5 minutes. One-time setup:
-
Go to the Steam GSLT page
Visit steamcommunity.com/dev/managegameservers while signed in to a Steam account that owns CS2.
-
Create a new token
In the App ID field enter
730(CS2's Steam App ID). The Memo is a label for you โ something like "Fatality CS2 - EU competitive". -
Copy the token
Steam generates a 32-character alphanumeric token. Copy it somewhere safe โ you can't see it again later without regenerating, and regenerating invalidates the old one.
One GSLT per server. Don't reuse the same token across multiple servers. Valve will invalidate tokens it catches being used concurrently on different IPs, and your whole fleet drops off the browser at once. Generate one per server instance.
Deploy the server (1-click)
Our CS2 template runs SteamCMD to pull the latest dedicated server (App ID 730), writes a starter server.cfg, asks you for your GSLT on first boot, and opens UDP port 27015 on your plan's IP.
-
Pick the CS2 template at checkout
On the CS2 hosting page, pick a plan sized for your slot count and gamemode (10-slot competitive, 16-slot wingman, 20-32 slot DM/surf). Pick the location closest to your playerbase โ latency matters more here than on any game we host.
-
Paste your GSLT into the Startup tab
On first deploy, the panel prompts for your GSLT. It gets injected into the launch line as
+sv_setsteamaccount <token>on every boot. -
Wait for SteamCMD to finish
CS2 dedicated server is ~35 GB. First install takes 10-20 minutes depending on source speed. Console shows
Success! App '730' fully installedwhen done. -
Confirm the server is listening
Console should show something like:
Host activate: Loading (de_dust2) Server is hibernating [Networking] SDR provisioning reported OK VAC secure mode is activated Connection to Steam servers successful. Public IP is YOUR-IP. Assigned identity steamid:90123456789012345 Network: IP YOUR-IP, mode MP, dedicated Yes, ports 27015 SV / 27005 CLVAC secure mode is activated + Assigned identity means your GSLT registered and the server is live.
File layout & where things go
CS2 uses Source 2's new filesystem. Key paths, relative to the server root:
game/
โโโ core/ โ engine core (don't touch)
โโโ csgo/ โ main game content (kept as "csgo" for compat)
โ โโโ cfg/ โ all .cfg files live here
โ โ โโโ server.cfg โ main server config
โ โ โโโ autoexec.cfg โ runs once at server start
โ โ โโโ gamemode_competitive.cfg โ competitive-mode overrides
โ โ โโโ gamemode_casual.cfg
โ โ โโโ gamemode_deathmatch.cfg
โ โ โโโ ...
โ โโโ addons/ โ Metamod / CSS plugins (created manually)
โ โ โโโ metamod/
โ โ โโโ counterstrikesharp/
โ โโโ maps/ โ .vpk map files (Workshop maps land here)
โ โโโ sounds/, models/, etc. โ usually untouched on vanilla
โโโ bin/ โ server binaries
Yes, the folder is still called csgo. Valve kept the directory name for backwards compatibility with tools and paths. You're running CS2 โ the folder just hasn't been renamed.
Launch options
CS2 reads settings from two places: the launch command line (+cvar value) and server.cfg. Launch line wins on conflict.
A typical competitive server launch line looks like this:
./cs2.sh -dedicated -console
+game_type 0 +game_mode 1
+map de_dust2
+hostport 27015
+sv_setsteamaccount YOUR-32-CHAR-GSLT
+maxplayers 10
+exec server.cfg
-usercon
-tickrate 64
Options you should know about:
-dedicated/-consoleโ required. Runs headless.+game_type N +game_mode Nโ selects the gamemode (see table in the Gamemodes section).+map <mapname>โ starting map.de_dust2,de_mirage,de_inferno,de_nuke,de_anubis,de_ancient,de_vertigo,de_overpassare the stock competitive pool.+hostportโ game port. Leave at 27015 unless you know why you're changing it.+sv_setsteamaccountโ your GSLT. Required.+maxplayersโ slot count. Must match your plan.-userconโ enables RCON over the game port. Required for external admin tools.-tickrate 64โ fixed server tick. CS2 is sub-tick for hit-reg, but movement and other sim still tick. 64 is Valve's default and what most plugins expect.
Core server.cfg settings
server.cfg sits at game/csgo/cfg/server.cfg. Everything is cvar "value" format. Hostname, rcon password, and network rates are the big ones:
// --- Server identity ---
hostname "My CS2 Server [EU] - Competitive"
sv_tags "competitive,europe,fatalityservers"
sv_region 3 // 0=US-East 1=US-West 2=SA 3=EU 4=Asia 5=AU 6=ME 7=Africa
// --- Passwords / auth ---
sv_password "" // leave empty for public; set for private
rcon_password "change-me-to-something-very-strong"
sv_cheats 0
sv_lan 0
// --- Match / round defaults ---
mp_maxrounds 24 // MR12 (Valve's competitive format since 2023)
mp_overtime_enable 1
mp_overtime_maxrounds 6
mp_overtime_startmoney 10000
mp_roundtime 1.92
mp_roundtime_defuse 1.92
mp_roundtime_hostage 1.92
mp_freezetime 15
mp_buytime 20
mp_c4timer 40
mp_startmoney 800
mp_maxmoney 16000
mp_friendlyfire 1
mp_teamname_1 ""
mp_teamname_2 ""
// --- Warmup ---
mp_warmuptime 60
mp_warmup_pausetimer 0
mp_warmup_start
// --- Tech / net ---
sv_maxrate 786432
sv_minrate 196608
sv_mincmdrate 64
sv_maxcmdrate 128
sv_timeout 60
sv_voiceenable 1
sv_alltalk 0
sv_deadtalk 1
sv_full_alltalk 0
// --- Logs ---
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 0
sv_logflush 0
// --- Convenience ---
mp_autokick 0 // don't auto-kick idle players
mp_match_end_restart 1
mp_match_end_changelevel 0
mp_endmatch_votenextmap 1
The values most people want to tweak:
hostnameโ 64 chars max. Valve strips tags and emoji.sv_tagsโ comma-separated, used by the server browser for filtering. Always include your region.mp_maxroundsโ24for MR12 (current competitive default),30for old MR15.mp_overtime_startmoneyโ Valve uses10000; some leagues want12500.sv_maxcmdrate 128โ CS2's sub-tick lets clients send higher cmdrate. 128 is safe on modern hardware.
Gamemodes โ Competitive, Premier, DM, Retakes
CS2 uses a game_type + game_mode pair to pick modes. Set both on the launch line:
| Mode | game_type |
game_mode |
Config file loaded |
|---|---|---|---|
| Casual | 0 | 0 | gamemode_casual.cfg |
| Competitive | 0 | 1 | gamemode_competitive.cfg |
| Wingman (2v2 short) | 0 | 2 | gamemode_competitive2v2.cfg |
| Premier (rating matches) | 0 | 3 | gamemode_premier.cfg |
| Arms Race | 1 | 0 | gamemode_armsrace.cfg |
| Demolition | 1 | 1 | gamemode_demolition.cfg |
| Deathmatch | 1 | 2 | gamemode_deathmatch.cfg |
| Custom / Workshop | 3 | 0 | gamemode_custom.cfg |
Competitive (MR12)
+game_type 0 +game_mode 1 +map de_dust2
# server.cfg defaults to MR12 if you set mp_maxrounds 24
Premier
Same as competitive mechanically but with Premier-specific timing. Use +game_mode 3. Premier requires a GSLT on a VAC-clean account.
Deathmatch
+game_type 1 +game_mode 2 +map de_dust2
+mp_respawn_on_death_ct 1 +mp_respawn_on_death_t 1
Retakes
Retakes isn't a built-in Valve gamemode โ it's a plugin. Install B3none's CS2 Retakes via CounterStrikeSharp (see next section). Set:
+game_type 0 +game_mode 1 +map de_mirage
# plugin takes over round logic once loaded
Gamemode .cfg files run on top of server.cfg. They set mode-specific cvars (round time, respawn, buy time). If you want a setting to apply to ALL modes on your server, put it in server.cfg; if it should only apply in one mode, edit that mode's gamemode_*.cfg.
Install Metamod:Source + CounterStrikeSharp
Vanilla CS2 has no plugin support. You add it with two layers:
- Metamod:Source โ the engine hook layer. Loads before the game DLL.
- CounterStrikeSharp (CSS) โ the .NET / C# scripting layer for CS2 plugins. What 90% of modern CS2 plugins target.
-
Download the latest builds
- Metamod:Source (1.12+ dev, CS2-compatible): sourcemm.net/downloads.php
- CounterStrikeSharp: github.com/roflmuffin/CounterStrikeSharp/releases โ pick the
with-runtimebuild for Linux if you don't already have .NET 8 on the server.
-
Extract Metamod into
game/csgo/The ZIP contains an
addons/folder. Drop it intogame/csgo/โ final pathgame/csgo/addons/metamod/. -
Register Metamod with the engine
Open
game/csgo/gameinfo.gi, find theSearchPathsblock, and add a line inside it:Game_LowViolence csgo_lv Game csgo Game csgo/addons/metamod // <-- add this line Game csgo_importedIndent with tabs, not spaces. Save, restart. Console should show
Metamod:Source version 2.0.X Loaded. -
Drop CounterStrikeSharp alongside Metamod
CSS also ships an
addons/folder โ merge it intogame/csgo/addons/. Final structure:game/csgo/addons/ โโโ metamod/ โ โโโ metaplugins.ini โ โโโ bin/... โโโ counterstrikesharp/ โ โโโ api/ โ โโโ plugins/ โ your CSS plugins go here โ โโโ configs/ โ โโโ dotnet/ โ bundled .NET runtime (with-runtime build) โโโ ... -
Register CSS in Metamod
Edit
game/csgo/addons/metamod/metaplugins.iniand add:addons/counterstrikesharp/api/counterstrikesharpRestart. In console:
meta listshould show both Metamod and CounterStrikeSharp loaded. -
Install your first CSS plugin
Plugins are folders dropped into
game/csgo/addons/counterstrikesharp/plugins/. Each plugin has its own subfolder containing a.dlland optionalconfig.json. Restart after adding new plugins.css_plugins listin console shows load status.
Plugins break on CS2 updates โ regularly. Valve's Source 2 engine updates often change internal signatures that Metamod / CSS rely on. After every CS2 update, expect a window (usually 24-72 hours) where your plugins may not load until Metamod and CSS ship patched builds. Subscribe to the Metamod and CSS GitHub release feeds to know when a fix lands.
Get5 for match play (optional)
Get5 is the standard plugin for running tournament-style matches (BO1/BO3/BO5, map vetoes, warmups, pause/resume). The CS2 port lives at github.com/splewis/get5.
-
Install via CounterStrikeSharp
Drop the Get5 plugin folder into
game/csgo/addons/counterstrikesharp/plugins/just like any other CSS plugin. Restart. -
Start a match from a JSON
Get5 loads a match config from a JSON file or URL:
get5_loadmatch matches/my-match.json // or: get5_loadmatch_url https://your-league.com/match/123/configThe JSON defines teams, player SteamIDs, map veto pool, series format, and spectator slots. See Get5's docs for the schema.
-
Set spectator slots
Matches with spectators/casters need enough slots for players + casters. 10-slot default = 5v5 with zero spec room. Bump
maxplayersto 12 or 14 if you cast.
Connect and test
-
Launch CS2 on your PC
From the main menu, open the Play screen.
-
Find it in Community Servers
Community Servers browser โ filter by your server name or map. First registration takes 2-5 minutes after the GSLT connects.
-
Or use direct connect
Open the developer console (must be enabled in CS2 settings: Game โ Enable Developer Console = Yes) and type:
connect YOUR-SERVER-IP:27015 -
Authenticate as admin in-game
Press
~in-game and run:rcon_password <your-rcon-password> rcon status // confirm RCON works rcon changelevel de_mirage // smoke test css_plugins list // if CounterStrikeSharp is loaded
Common errors and fixes
"Your session has been invalidated" / server drops off browser
- GSLT expired or was revoked โ regenerate at steamcommunity.com/dev/managegameservers, paste the new one into Startup, restart
- GSLT is being used on two servers at once โ Valve invalidates on detection. Use one token per server.
- The Steam account behind the GSLT got a VAC or game ban โ you'll need a different account to generate a new token
"VAC secure mode is NOT activated"
GSLT didn't register. Check the launch line has +sv_setsteamaccount YOUR-TOKEN exactly (no quotes, no spaces in the token). Token is 32 hex chars.
Server in browser but players can't connect
- UDP 27015 blocked โ check the panel firewall is green
- Player doesn't have Developer Console enabled, so
connectdoesn't work โ Community Servers browser should still work sv_lan 1is set accidentally โ flip tosv_lan 0
Plugins not loading after a CS2 update
- Check Metamod:Source GitHub for a patched dev snapshot
- Check CounterStrikeSharp GitHub for a matching release
- Update both, restart
- If a specific plugin still fails, check its GitHub issues โ the signature change may affect individual plugins too
"Steam connection failed" at startup
- Server can't reach Steam's auth servers โ check the VPS's outbound firewall allows TCP/UDP to Steam's IP ranges
- Rare but possible: Steam-side outage. Check steamstat.us before debugging further.
High CPU / choking under 10 players
- Heavy CSS plugin loaded โ try
meta unload <id>plugins one-at-a-time to isolate the offender - Workshop map with unoptimized geometry โ pro test maps are fine, amateur community maps can tank perf
- Check your plan's CPU budget in the panel graph โ if you're cap'd, upgrade or trim plugins
RCON commands echo but do nothing
-userconis missing from the launch line โ RCON needs it on CS2- Wrong RCON password โ
rcon_passwordon the client must exactly match the server's - Firewall is blocking TCP on the game port (RCON uses TCP, not UDP, on the same port number)
Workshop maps โ how do I add them?
Three ways:
- In-game:
host_workshop_map <workshopid>downloads and loads the map immediately - Launch line:
+host_workshop_collection <collectionid>pre-downloads a whole collection - SFTP: drop
.vpkfiles intogame/csgo/maps/workshop/<workshopid>/(requires panel restart)
World saves / backups
CS2 is stateless โ no world save. Back up:
game/csgo/cfg/(all your .cfg files)game/csgo/addons/(Metamod, CSS, plugins, plugin configs)- Your stats/ranks database if you run one
All managed CS2 plans ship with daily auto-snapshots of the full game/csgo/ tree + 30-day retention.
Stuck on something specific? Email support with your server IP, the last 100 lines of console (esp. the Metamod and CSS load block), and your launch line โ we'll usually have an answer within the hour. For broader CS2 questions, see the FAQ's Games section.