CS2 ยท Server setup

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 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:

  1. Go to the Steam GSLT page

    Visit steamcommunity.com/dev/managegameservers while signed in to a Steam account that owns CS2.

  2. 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".

  3. 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.

  1. 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.

  2. 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.

  3. 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 installed when done.

  4. 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 CL

    VAC 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_overpass are 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 โ€” 24 for MR12 (current competitive default), 30 for old MR15.
  • mp_overtime_startmoney โ€” Valve uses 10000; some leagues want 12500.
  • 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
Casual00gamemode_casual.cfg
Competitive01gamemode_competitive.cfg
Wingman (2v2 short)02gamemode_competitive2v2.cfg
Premier (rating matches)03gamemode_premier.cfg
Arms Race10gamemode_armsrace.cfg
Demolition11gamemode_demolition.cfg
Deathmatch12gamemode_deathmatch.cfg
Custom / Workshop30gamemode_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.
  1. Download the latest builds

  2. Extract Metamod into game/csgo/

    The ZIP contains an addons/ folder. Drop it into game/csgo/ โ€” final path game/csgo/addons/metamod/.

  3. Register Metamod with the engine

    Open game/csgo/gameinfo.gi, find the SearchPaths block, and add a line inside it:

    Game_LowViolence csgo_lv
    Game            csgo
    Game            csgo/addons/metamod     // <-- add this line
    Game            csgo_imported

    Indent with tabs, not spaces. Save, restart. Console should show Metamod:Source version 2.0.X Loaded.

  4. Drop CounterStrikeSharp alongside Metamod

    CSS also ships an addons/ folder โ€” merge it into game/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)
    โ””โ”€โ”€ ...
  5. Register CSS in Metamod

    Edit game/csgo/addons/metamod/metaplugins.ini and add:

    addons/counterstrikesharp/api/counterstrikesharp

    Restart. In console: meta list should show both Metamod and CounterStrikeSharp loaded.

  6. Install your first CSS plugin

    Plugins are folders dropped into game/csgo/addons/counterstrikesharp/plugins/. Each plugin has its own subfolder containing a .dll and optional config.json. Restart after adding new plugins. css_plugins list in 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.

  1. Install via CounterStrikeSharp

    Drop the Get5 plugin folder into game/csgo/addons/counterstrikesharp/plugins/ just like any other CSS plugin. Restart.

  2. 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/config

    The JSON defines teams, player SteamIDs, map veto pool, series format, and spectator slots. See Get5's docs for the schema.

  3. Set spectator slots

    Matches with spectators/casters need enough slots for players + casters. 10-slot default = 5v5 with zero spec room. Bump maxplayers to 12 or 14 if you cast.

Connect and test

  1. Launch CS2 on your PC

    From the main menu, open the Play screen.

  2. 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.

  3. 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
  4. 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 connect doesn't work โ€” Community Servers browser should still work
  • sv_lan 1 is set accidentally โ€” flip to sv_lan 0

Plugins not loading after a CS2 update

  1. Check Metamod:Source GitHub for a patched dev snapshot
  2. Check CounterStrikeSharp GitHub for a matching release
  3. Update both, restart
  4. 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

  • -usercon is missing from the launch line โ€” RCON needs it on CS2
  • Wrong RCON password โ€” rcon_password on 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 .vpk files into game/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.