How to install CounterStrikeSharp plugins on a CS2 server

Plain Counter-Strike 2 servers have no plugin support. If you want features like map votes, admin menus, rank systems or custom game modes, you add a plugin framework. For CS2, that framework is CounterStrikeSharp, which sits on top of Metamod:Source. Installing it takes a few careful steps, and one of them has to be repeated after game updates.

What each piece does

  • Metamod:Source is the base layer. It lets other programs hook into the game.
  • CounterStrikeSharp runs on Metamod and lets plugins be written in C#.
  • Plugins are the extra features, each a small set of files.

You need both of the first two. Each has its own download, and versions matter, so use the latest builds for the current game.

Install Metamod

  1. Stop the server and take a backup.
  2. Download the Metamod:Source build for CS2 from its official site.
  3. Upload it so that its addons folder merges into game/csgo/ on the server. Use the file manager or SFTP. After this, you should have game/csgo/addons/metamod.
  4. Open game/csgo/gameinfo.gi, find the SearchPaths block and add a new line directly below the Game_LowViolence line and above the line that begins Game followed by csgo:
Game	csgo/addons/metamod

Keep the tab spacing the same as the lines around it. The order of lines in this block matters, so follow the Metamod instructions for the exact place.

  1. Start the server. In the console, type meta list. If Metamod answers, it is loaded.

Install CounterStrikeSharp

  1. Download the CounterStrikeSharp release that includes the runtime, which is the version that bundles everything it needs.
  2. Extract it into game/csgo/ so that you get addons/counterstrikesharp.
  3. Restart the server and run meta list again. CounterStrikeSharp should now appear in the list.
  4. Run css_plugins list to see the plugins it has loaded. It is empty until you add some.

Add a plugin

  1. Download a plugin from its author's page, usually a zip.
  2. Extract it so that its folder lands inside addons/counterstrikesharp/plugins/.
  3. The plugin folder contains a .dll named like the folder. Restart or run css_plugins load FolderName in the console.

Plugin settings are stored in addons/counterstrikesharp/configs/plugins/, created the first time the plugin runs. Edit them while the server is stopped, or reload the plugin.

The step people forget: gameinfo.gi after updates

When CS2 updates, the game can replace gameinfo.gi with its own version, and your Metamod line disappears. The server then starts without any plugins, with no error message. After every game update:

  1. Open gameinfo.gi.
  2. Check the Metamod line is still there.
  3. Add it again if not, then restart.

It is the first thing to check whenever plugins "stop working" after an update. Also update Metamod and CounterStrikeSharp themselves, since a game update can break old builds.

Admins

CounterStrikeSharp keeps its admin list in addons/counterstrikesharp/configs/admins.json, where you list players by SteamID64 and give them flags. Do not make everyone an admin. Give only what each person needs. How to find a SteamID64 is described in Rust admin commands, and it is the same long number for any Steam game.

Staying safe

  • Download plugins from their official project pages, not from re-upload sites.
  • Check what permissions a plugin asks for.
  • Test new plugins on a quiet server before putting them on a busy one.
  • Remove plugins you stop using.

A bad plugin can run code on your server, so treat each install as a trust decision.

Troubleshooting

ProblemLikely causeWhat to try
meta list says unknown commandgameinfo.gi change missingRe-add the Metamod line
CounterStrikeSharp not listedWrong folder or old versionCheck the path and update
A plugin does not loadBuilt for an older game versionUpdate it or remove it
Server crashes at startA plugin conflictsRemove plugins one at a time

The console tells you most of this. How to read your server logs shows how to find the first error.


Still stuck? Open a ticket on Discord - run /ticket in any channel, pick a department, and include your Server ID or Invoice ID so we can jump straight in.