How to Install Plugins on Your CS2 Server with Metamod and CounterStrikeSharp

From an empty server to working plugins: Metamod:Source, the mandatory gameinfo.gi line, CounterStrikeSharp and admin setup - plus why it all breaks after every CS2 update.


How it fits together

CS2 has no server plugin interface of its own. You need two things, installed in this order:

  1. Metamod:Source - the plugin loader itself. It does nothing on its own, but everything else depends on it.
  2. CounterStrikeSharp - a framework that runs on top of Metamod and lets you run plugins written in C#.

SourceMod does not work on CS2. SourceMod was never ported to Source 2, and .smx plugins cannot run. If you are coming from CS:GO, your plugins have to be replaced with CounterStrikeSharp equivalents. CounterStrikeSharp deliberately uses the same flag names as SourceMod (@css/ban, @css/kick), so it is easy to find your way around.

Note also that Metamod for CS2 only exists in the 2.x development branch. The older 1.x stable release is for Source 1 and will not work.


Step 1 - Install Metamod:Source

  1. Stop your server in the Potionhost control panel.
  2. Download the latest 2.x dev build of Metamod:Source for Linux from metamodsource.net.
  3. Open Files and extract the archive's addons folder into game/csgo/.

The result should look like this:

game/csgo/addons/
├── metamod/
├── metamod.vdf
└── metamod_x64.vdf

Step 2 - Edit gameinfo.gi

This step is mandatory. Without it, Metamod is never loaded.

Open game/csgo/gameinfo.gi and find the GameInfo → FileSystem → SearchPaths block. Add this line immediately after the Game_LowViolence csgo_lv line and before the first Game csgo:

			Game	csgo/addons/metamod

Three rules:

  • The keyword is Game - not GameBin.
  • Keep the file's existing tab indentation. Wrong indentation is a documented cause of failure.
  • The line must come before the other Game paths.

Important: every single CS2 update overwrites gameinfo.gi and removes your line. The server starts fine afterwards, but Metamod and all your plugins are gone without an error message. This is by far the most common cause of "my plugins stopped working". Check the file after every update.


Step 3 - Install CounterStrikeSharp

  1. Download the latest release from CounterStrikeSharp on GitHub.
  2. Pick the release whose name contains with-runtime. On a first install it is the only one that works - the other assumes you maintain a .NET runtime on the server yourself.
  3. Extract its addons folder into game/csgo/ so it merges with the one Metamod already created.

The folder should now contain:

game/csgo/addons/
├── counterstrikesharp/
│   ├── bin/
│   ├── dotnet/
│   ├── plugins/
│   ├── configs/
│   └── gamedata/
├── metamod/
│   └── counterstrikesharp.vdf
└── metamod.vdf

The file metamod/counterstrikesharp.vdf is what makes Metamod load CounterStrikeSharp. If it is missing, nothing happens.

  1. Start the server.

Step 4 - Verify the installation

Type this in Console:

meta version
meta list
css_plugins list
  • meta version should return a version number. If you get Unknown command: meta, Metamod was never loaded - go back to Step 2.
  • meta list should show CounterStrikeSharp with status RUN.
  • css_plugins list lists your C# plugins.

Step 5 - Install a plugin

Plugins go in game/csgo/addons/counterstrikesharp/plugins/ with one folder per plugin, where the folder name matches the DLL exactly:

plugins/
└── WeaponRestrict/
    └── WeaponRestrict.dll

Some plugins ship with an extra wrapper folder, leaving you with plugins/WeaponRestrict-v1.2/WeaponRestrict/WeaponRestrict.dll. That will not load. Remove the extra level.

Restart the server, or use:

Command What it does
css_plugins list Lists every loaded plugin
css_plugins load Name Loads a plugin
css_plugins unload Name Disables a plugin
css_plugins reload Name Reloads after a config change

Config files are generated automatically on first load at addons/counterstrikesharp/configs/plugins/PluginName/PluginName.json. Do not create them yourself in advance - let the plugin write its defaults first, then edit them.


Step 6 - Set up admins

Administrators are defined in addons/counterstrikesharp/configs/admins.json:

{
  "Your name": {
    "identity": "76561198000000000",
    "flags": ["@css/generic", "@css/kick", "@css/ban", "@css/changemap"]
  }
}

identity is the player's SteamID64 - the 17-digit number starting with 7656119. You can look it up from the profile URL at steamid.io.

If you have several admins with the same rights, groups are easier. In admin_groups.json:

{
  "#css/admin": {
    "flags": ["@css/generic", "@css/kick", "@css/ban", "@css/changemap", "@css/slay"],
    "immunity": 100
  }
}

And in admins.json:

{
  "Your name": {
    "identity": "76561198000000000",
    "groups": ["#css/admin"]
  }
}

Two rules that cannot be bent:

  • Every permission starts with @.
  • Every group name starts with #.

CounterStrikeSharp has no admin commands of its own. Kick, ban and slay come from a plugin - CS2-SimpleAdmin, for example. The framework only decides who is allowed.

The admin files are read at startup. Restart the server after editing them.


Troubleshooting

Symptom Likely cause Fix
Unknown command: meta The gameinfo.gi line is missing, misplaced or wrongly indented Go through Step 2
Everything stopped working after a CS2 update gameinfo.gi was overwritten Add the line again
Metamod does not load at all You installed the 1.x branch Download the 2.x dev build
undefined symbol errors on startup Metamod is older than the current CS2 build Update Metamod
CounterStrikeSharp shows NOFILE in meta list metamod/counterstrikesharp.vdf is missing Extract CounterStrikeSharp again
Failed to initialize .NET runtime You downloaded the build without the runtime Get the with-runtime release
css_plugins is unknown but meta list shows CSS The .NET runtime did not start See above, and check the console for errors
A plugin does not appear in the list Wrong folder depth, or folder name does not match the DLL Correct it to plugins/Name/Name.dll
The plugin ignores its config You edited the wrong file The config lives under configs/plugins/Name/
Admin permissions do not work Missing @ or #, or the server was not restarted Fix the syntax and restart

After every CS2 update

Valve updates CS2 regularly, and the server updates itself. After an update, expect that:

  1. gameinfo.gi has been reset - the line needs to be added again.
  2. Metamod may need updating if the engine changed.
  3. CounterStrikeSharp usually follows a few hours to a few days later.

A short outage after a Valve update is normal and affects every server running plugins. Tell your players in advance and save yourself the questions.

Stay away from plugins that falsify player inventories or ranks. Valve does not allow it, and the consequence lands on the Steam account your GSLT was issued to.

New to CS2 servers? Start with Game Server Login Token (GSLT) for CS2 and How to Run Workshop Maps on Your CS2 Server.

Counter-Strike 2Order now

Guide Information

Published
August 23, 2026
Last Updated
August 23, 2026
Views
12