CS2 server plugins: Metamod:Source and CounterStrikeSharp
CS2 plugins run on Metamod:Source 2.x and CounterStrikeSharp, not SourceMod. How to install the stack, vet a plugin, and recover after each game update.
The next CS2 update will probably switch your plugins off. When a patch touches game/csgo/gameinfo.gi, SteamCMD writes Valve's new copy over yours, and the line that loads Metamod:Source is gone, taking every plugin with it. That line, a Metamod:Source 2.x development build and CounterStrikeSharp, the C# framework most CS2 plugins are written for, make up the plugin stack in 2026. SourceMod does not run on CS2.
What sits where
Metamod:Source is the loader. CS2 needs a 2.x build from the development branch on metamodsource.net, and CounterStrikeSharp's install guide currently asks for build 1467 or newer. Once it loads, meta version in the server console reports a 2.x version.
CounterStrikeSharp loads as a Metamod plugin and hosts plugins written in C# against .NET 8. Its "with-runtime" download bundles the .NET runtime, which is why the install guide insists on that build for a first install. It is actively maintained: v1.0.375 and v1.0.376 both came out in the last week of September 2026.
CS2Fixes is a native Metamod plugin rather than a CounterStrikeSharp one. Its fixes and features are aimed mainly at zombie escape servers, and it carries its own admin system and map votes, with many features off until you enable them in cfg/cs2fixes/cs2fixes.cfg.
SourceMod has no CS2 build. AlliedModders' own FAQ still says no decision has been made about Source 2, and the current stable release, 1.12, is for the older engine. SourcePawn plugins from CS:GO or CS:S do not carry over; how SourceMod compares with AMX Mod X and Oxide describes what you leave behind, and the CS2 community server guide covers the server itself.
Installing, in order
Stop the server first. Paths are relative to the folder SteamCMD installed into.
- Extract the Metamod:Source 2.x package and copy its
addonsfolder intogame/csgo. - Open
game/csgo/gameinfo.giand find theSearchPathsblock. AddGame csgo/addons/metamodon a new line underGame_LowViolence csgo_lv, so that it sits above every otherGameentry. The rest of the block stays as it is:
Game_LowViolence csgo_lv
Game csgo/addons/metamod
Game csgo
- Start the server and run
meta listin the console. "Unknown command" means Metamod did not load, so check the line and the folders. - Stop the server, extract the CounterStrikeSharp with-runtime build and copy its
addonsfolder intogame/csgo. Windows servers need the Visual C++ Redistributable, and some Linux systems need thelibicupackage for .NET. - Start again.
meta listshould now show CounterStrikeSharp, andcss_plugins listshows the plugins it has loaded.
Each CounterStrikeSharp plugin goes in a folder named exactly like its DLL, as in addons/counterstrikesharp/plugins/MyPlugin/MyPlugin.dll. On first load it writes its settings to addons/counterstrikesharp/configs/plugins/MyPlugin/MyPlugin.json, and replacing the DLL reloads the plugin without a restart. If you have installed Metamod and SourceMod on the older Source games, the folder layout will look familiar, though the plugin language is different.
Admins
CounterStrikeSharp has its own admin framework. Admins go in addons/counterstrikesharp/configs/admins.json, each with a SteamID64 identity and flags such as @css/kick, @css/ban, @css/changemap or @css/root. Groups live in admin_groups.json, and an immunity value works as it does in SourceMod: an admin with a lower value cannot target one with a higher value. The reasoning in SourceMod admins and immunity carries over unchanged.
For day-to-day admin commands, CS2-SimpleAdmin is a maintained CounterStrikeSharp plugin (its last release was in June 2026) that keeps its settings in configs/plugins/CS2-SimpleAdmin/CS2-SimpleAdmin.json. CS2Fixes has a separate admin list in addons/cs2fixes/configs/admins.jsonc. Nothing stops you running both, but pick one as the record of who is an admin, or someone you removed from one list keeps their powers through the other.
Judging a plugin you did not write
Many CS2 plugins are one-person GitHub projects. Before one goes on a live server, look at four things.
- The date of its last release against the date of the last CS2 update. Plugins that hook game functions rely on signatures that patches move.
- Whether its notes name the CounterStrikeSharp or Metamod build it needs. A plugin that declares a newer CounterStrikeSharp API version than yours refuses to load, and the console says it "requires a newer version of CounterStrikeSharp".
- Whether it touches weapon skins or inventories. Valve's server operation guidelines, written for CS:GO and still the page CounterStrikeSharp points to, forbid giving players items they do not own, and in January 2016 Valve permanently disabled the Game Server Login Tokens of operators who did. CounterStrikeSharp ships with
FollowCS2ServerGuidelinesset to true inconfigs/core.jsonto block functionality known to cause bans. Its documentation says this does not guarantee you will not be banned, and a plugin that asks you to switch it off is asking you to carry that risk. - Whether the source is public and anyone answers issues. Plan for the day a plugin's author stops answering.
Test on a second instance with a copy of your configs before anything reaches players. When two plugins disagree, narrowing down a plugin conflict is the method.
After the next game update
Update the game, then check the chain from the bottom up. First the loader line. One check in the start script saves the guesswork:
grep -q "csgo/addons/metamod" game/csgo/gameinfo.gi || echo "Metamod line missing from gameinfo.gi"
Community scripts exist that re-add the line on every start. Whichever you use, do not rely on remembering. Treat SteamCMD's validate option with care as well: it exists to make files match Steam's copies, and LinuxGSM's documentation warns that validation overwrites any files you have changed.
Then the plugins. CounterStrikeSharp keeps signatures and offsets in addons/counterstrikesharp/gamedata/gamedata.json, and with AutoUpdateEnabled on, as it is by default, it fetches a new copy when one is published. When a patch needs code changes, you wait for a release. Lately that wait has been short: CounterStrikeSharp v1.0.373 came out the day after the 24 August 2026 patch with a single change, an update for the latest game update, and CS2Fixes 1.20.1 followed the 9 September patch by a day to refresh its signatures. Until your plugins have caught up, leave any you are unsure of unloaded rather than find out mid-match. When an update changes more than signatures, what a Valve update breaks on CS2 servers covers the wider damage.
Last, Metamod itself. Its 2026 development builds added KHook as an alternative to SourceHook and raised the minimum plugin API version. CounterStrikeSharp's guide asks for build 1467 or newer, while the CS2Fixes 1.20.1 release notes said it needs 2.0-1411 or earlier. Two plugins can want incompatible loaders, so read the release notes before updating Metamod and keep the previous build to hand. Update one layer at a time, and restart between each.
Published · 5 min read