Skip to content
FLICKED Docs

CS2 servers

Running the CS2 server

Keeping the game side alive: the plugin chain, what breaks when Valve ships an update, and how to tell which link failed.

This is the part FLICKED does not own. It coordinates servers, it does not install or provision them, so when a match will not start the cause is usually here rather than in the backend. Everything below has been hit in practice on a real server.

The chain#

Four things have to load, in order, and each one fails differently:

1 · Search path

gameinfo.gi

Restored to stock by every validate

2 · VDF loader

Metamod

Removed if its folder is gone

3 · .NET runtime

CounterStrikeSharp

Breaks on CS2 updates (offsets)

4 · Match plugin

MatchZy

Refuses a second match per process

Learning this chain is most of the job: the symptom tells you which link broke, and each has a different fix.

What the console saysWhich linkMeaning
Unknown command 'meta'gameinfo.giMetamod never loaded at all
meta list works, lists nothing usefulMetamod → CSSThe CSS loader is missing or failed
Unknown command 'css_plugins'CounterStrikeSharpCSS did not load, usually after a CS2 update
css_plugins list works, no MatchZyMatchZyPlugin missing, or failed to load
MatchZy listed as LOADEDNoneThe stack is healthy

Health check#

Three commands in the server console, in this order. Stop at the first one that fails: that is your link.

server console
meta list              // is Metamod there, and does it list CounterStrikeSharp?
css_plugins list       // is MatchZy LOADED?
status                 // which map, how many players, is the port right

Updating after a CS2 patch#

CS2 updates itself for players. A dedicated server never does, and the symptom is "Your client is out of date" when someone tries to connect.

  1. Finish or cancel any live match

    FLICKED needs nothing from you here. After about ninety seconds of failed RCON pings the pool marks the server Offline and stops handing it matches; it returns to Idle by itself once the server answers again.

  2. Update with SteamCMD

    Windows
    & C:\steamcmd\steamcmd.exe +force_install_dir C:\cs2-server +login anonymous +app_update 730 validate +quit
    Linux
    /opt/steamcmd/steamcmd.sh +force_install_dir /opt/cs2 +login anonymous +app_update 730 validate +quit
  3. Put the Metamod search path back

    validate restores gameinfo.gi to stock, every time, which removes the line that loads Metamod. This is the single most common reason a server comes back with no plugins. Check before starting; nothing printed means the line is gone:

    PowerShell
    Select-String -Path C:\cs2-server\game\csgo\gameinfo.gi -Pattern metamod

    Add it above Game csgo. Below it, Metamod will not load.

    game/csgo/gameinfo.gi
    SearchPaths
    {
        Game    csgo/addons/metamod
        Game    csgo
        Game    core
  4. Check the stack came back

    meta list, then css_plugins list. If meta works but css_plugins does not, read on.

CounterStrikeSharp and CS2 updates#

Expect CSS to break after a significant CS2 update. It reads game memory through offsets and schema definitions that shift whenever Valve changes the binaries, so a CSS build is tied to a game build. When that happens:

  1. Check CounterStrikeSharp's releases for a build naming the current CS2 version.
  2. If there is none yet, the schema fix usually lands in its repository before a release is cut. Building from source is a legitimate option and has been necessary before.
  3. Until CSS loads, no match can run. The backend will keep trying, failing and releasing the server, which is correct behaviour but looks alarming.

There is normally a lag of hours to days after a major update. Nothing to fix on the FLICKED side; wait for the plugin ecosystem.

What FLICKED needs from a server#

Less than you would expect. server.cfg needs no FLICKED-specific lines.

  • RCON working, with the password you gave the dashboard. It is the only channel FLICKED uses to control the server.
  • MatchZy loaded, nothing more. FLICKED sends the match config URL, the authentication header and the event-reporting settings over RCON when it starts a match.

Two behaviours worth knowing, both verified against the plugin's source and recorded in MatchZy integration:

  • MatchZy accepts one match per process. FLICKED therefore sends css_plugins reload MatchZy before every match. That is deliberate, not a workaround to remove.
  • Events are never retried or deduplicated. series_end can arrive twice or not at all, which is why finishing a match is a claim on a row.

If you change the RCON password#

Update it in the dashboard as well. The stored copy is encrypted and cannot be read back for comparison, so the only symptom of a mismatch is the server dropping to Offline while being perfectly healthy.

Errors seen in practice#

ErrorWhere to look
Your client is out of date on connectThe server is behind; update it
Unknown command 'meta'The gameinfo.gi search path
Unknown command 'css_plugins'CSS not loaded, usually after a CS2 update
FATAL ERROR: CAppSystemDict: Unable to create interface Source2ServerConfig001An invalid gameinfo.gi edit, or launching from the wrong directory. Compare against a stock copy first
Failed to initialize Steamworks SDK for gameserverThe server cannot find its Steam client files. Reinstall through SteamCMD into the same folder and launch from the server's own directory
Server window opens and closes instantlyRun it from a console so the error survives; on Windows check the Visual C++ redistributable is installed
MatchZy says a match is already runningThe per-process flag; reload the plugin or restart the server
Match loads the wrong mapThe server fetched a config it could not reach, or MatchZy was never reloaded. Check Api:PublicUrl is an address the server can resolve

Read both logs. FLICKED's log says what it sent and whether RCON answered; the game console says what the server did with it. Most confusion comes from looking at only one of them.

Keep it running#

A console window dies when you log out. On Windows, register it as a service with NSSM, or create a Task Scheduler task set to Run whether user is logged on or not with the trigger At startup. On Linux, use a systemd unit shaped like the ones in Deploy on Linux. It will reboot eventually, and you will not be watching.

Worth keeping a copy of#

  • The gameinfo.gi search path line, restored to stock by every validate
  • server.cfg and any other config you have edited
  • The addons folder, or a note of which Metamod and CSS versions are installed
  • Your launch command, including the GSLT token

Routine after every CS2 update#

  1. Update with SteamCMD
  2. Re-add the Metamod line to gameinfo.gi
  3. Start the server
  4. meta list, then css_plugins list
  5. If CSS is broken, get a matching build before expecting matches
  6. Confirm the dashboard shows the server Idle, then run one match and watch it load the map

    Step 6 is the only one that proves the whole path. The first five prove the server starts.

Esc
↑↓ navigate ↵ open