How to install plugins on a Counter-Strike 2 server
Install Metamod:Source and CounterStrikeSharp on a CS2 server, add admins in admins.json, verify the stack with meta list, and avoid the plugins that get GSLTs banned.
Counter-Strike 2 runs on Source 2, and SourceMod does not run on it — SourceMod is a Source 1 platform. Nothing from the CS:GO plugin era loads on a CS2 server. Every admin menu, chat command, persistent ban list, retake mode and match plugin you have seen on a CS2 community server sits on a stack the server owner installed by hand.
That stack is two layers. Metamod:Source is the loader that gets code into the game process. CounterStrikeSharp runs on Metamod and is the framework almost every current CS2 plugin is written against. Actual features — kick, ban, RTV, retakes — are separate plugins on top of those two.
This guide installs the stack on a stock CS2 server, makes you an admin, and covers the two things that catch people out afterwards: plugins that silently do not load, and plugins that can get your Game Server Login Token permanently disabled.
For what a stock server can already do before you install anything, see Counter-Strike 2 server commands — RCON, kicks, bans and the full convar list are all native.
What you need before you start
| Piece | Which build | Where it goes |
|---|---|---|
| Metamod:Source | 2.x dev build — the 1.12 stable branch is Source 1 only | game/csgo/addons/metamod |
| CounterStrikeSharp | The with-runtime build on a first install | game/csgo/addons/counterstrikesharp |
| A feature plugin | Whatever you actually want (admin mod, retakes, match plugin) | addons/counterstrikesharp/plugins/ |
| File access | SFTP or a file manager, plus the server console | — |
Metamod:Source publishes on rolling releases, so build numbers move constantly. Checked on 7 August 2026, the dev branch was version 2.0 build 1410 and the stable branch was 1.12 build 1225. Take the newest 2.x dev build rather than the number printed here.
Stop the server before you copy files in
Both layers load at process start. Copying
addons/into a running server does nothing until it restarts, and on some panels a running server will hold file locks that make the copy fail silently.
Why doesn't SourceMod work on Counter-Strike 2?
SourceMod targets Source 1. CS2 is Source 2, and the two are not binary compatible — a SourceMod install has nothing to attach to. The split runs right through Metamod as well: Metamod:Source keeps a 1.12 stable branch for Source 1 games and a separate 2.x development branch for Source 2 titles including CS2. If you download the stable build because "stable" sounds safer, it will not load.
CounterStrikeSharp exists to fill the gap SourceMod left. It is not a port of SourceMod and its plugins are not SourceMod plugins — they are .NET assemblies written in C#.
How do I install Metamod:Source on a CS2 server?
Download the latest 2.x dev build for your platform from
metamodsource.net/downloads.php?branch=dev.Extract it and copy the
addons/directory intogame/csgo/on your server.Open
game/csgo/gameinfo.giin a text editor.Find the line
Game_LowViolence csgo_lvand add a new line directly underneath it:
Game_LowViolence csgo_lv
Game csgo/addons/metamod Restart the server.
Type
meta listin the server console. If Metamod loaded, it answers. If it saysUnknown Command, Metamod is not loaded — go back to step 3.
That gameinfo.gi edit is the single most common failure point, and it is worth knowing why: CS2 game updates can overwrite gameinfo.gi and quietly remove the line. A server that ran plugins yesterday and loads none today is nearly always this.
How do I install CounterStrikeSharp?
Download the latest release from
github.com/roflmuffin/CounterStrikeSharp/releases. On a first install you must take thewith-runtimebuild — it bundles the .NET runtime that CounterStrikeSharp needs. The release published on 10 July 2026 was v1.0.371, shippingcounterstrikesharp-with-runtime-linux-1.0.371.zipand a matching Windows archive.Extract it and copy the
addons/directory intogame/csgo/, merging with the Metamod folder already there.Restart the server.
Run
meta list. CounterStrikeSharp should now appear as a loaded Metamod plugin:
Listing 1 plugin:
[01] CounterStrikeSharp (0.1.0) by Roflmuffin When both layers are in place, game/csgo/addons/ looks like this:
addons
├── counterstrikesharp
│ ├── api
│ ├── bin
│ ├── dotnet
│ ├── plugins
│ └── gamedata
├── metamod
│ ├── bin
│ ├── counterstrikesharp.vdf
│ ├── metaplugins.ini
│ └── README.txt
├── metamod.vdf
└── metamod_x64.vdf Two platform-specific requirements are easy to miss. On Windows, the Visual Studio 2017+ x64 redistributable must be installed or CounterStrikeSharp will not work. On Linux, .NET may need libicu (packaged as libicu, icu-libs or libicu-dev depending on the distribution).
How do I install a plugin?
CounterStrikeSharp plugins are .NET assemblies, and it expects one folder per plugin with the DLL named after the folder:
addons/counterstrikesharp/plugins/MyPlugin/MyPlugin.dll Drop the folder in and restart, or load it live from the server console with css_plugins load MyPlugin. Plugin auto-loading on startup is on by default. Confirm what actually loaded with css_plugins list.
There is also a plugins/disabled/ folder in a stock install — moving a plugin folder there is the clean way to take one out of rotation without deleting it.
How do I make myself an admin?
Admins live in game/csgo/addons/counterstrikesharp/configs/admins.json. Each entry is a name, a SteamID as identity, and a list of permission flags:
{
"YourName": {
"identity": "76561198808392634",
"flags": ["@css/generic", "@css/kick", "@css/ban", "@css/changemap"]
},
"Second Admin": {
"identity": "STEAM_0:1:1",
"flags": ["@css/generic"]
}
} Both SteamID64 and the older STEAM_0:1:1 form are accepted — CounterStrikeSharp works out which you used. Every flag must start with @ or it is not recognised.
Installing CounterStrikeSharp does not give you
!kickor!banThis is the single biggest misunderstanding for anyone arriving from SourceMod. CounterStrikeSharp's own documentation states that it does not implement traditional admin commands such as
!slay,!kickand!ban— it supplies the permission model and the API, and leaves the commands to individual plugins. You must install an admin plugin on top. Until you do,admins.jsongrants permissions that nothing is checking.
Standard admin permission flags
The flag system is just a list of strings, so plugin authors can invent their own (@myplugin/guns). These are the conventional ones, modelled on the old SourceMod flags, and the set most plugins check against.
| Flag | Grants |
|---|---|
@css/reservation |
Reserved slot access |
@css/generic |
Generic admin |
@css/kick |
Kick other players |
@css/ban |
Ban other players |
@css/unban |
Remove bans |
@css/vip |
General VIP status |
@css/slay |
Slay or harm other players |
@css/changemap |
Change the map or major gameplay features |
@css/cvar |
Change most convars |
@css/config |
Execute config files |
@css/chat |
Special chat privileges |
@css/vote |
Start or create votes |
@css/password |
Set a password on the server |
@css/rcon |
Use RCON commands |
@css/cheats |
Change sv_cheats or use cheat commands |
@css/root |
Enables all flags and ignores immunity |
Admin groups
Once you have more than two or three admins, put the flags in a group in configs/admin_groups.json and hand out the group instead. Group names must start with #.
{
"#css/moderator": {
"flags": ["@css/generic", "@css/kick", "@css/ban", "@css/slay"],
"immunity": 50
}
} Then reference it from admins.json with a groups array. An admin can be in several groups and inherits the flags of all of them.
{
"YourName": {
"identity": "76561198808392634",
"flags": [],
"groups": ["#css/moderator"]
}
} Admin immunity
Add an immunity value to an admin or a group and a lower-immunity admin cannot target a higher one. If an admin's own value is lower than their group's, the group value is used.
Immunity has the same caveat as everything else here: CounterStrikeSharp does not enforce it automatically. Its documentation is explicit that immunity checking is left to individual plugins. A plugin that never calls the check will happily let a moderator slay the owner.
How do I manage plugins from the console?
CounterStrikeSharp console commands
| Command | What it does |
|---|---|
css_plugins list |
List every plugin currently loaded, with its ID, state and version |
css_plugins load <name> |
Load a plugin that is not currently loaded (alias start) |
css_plugins unload <name|#id> |
Unload a loaded plugin (alias stop) |
css_plugins reload <name|#id> |
Unload and load a plugin again (alias restart) |
css_lang <code> |
Set the language for CounterStrikeSharp messages, e.g. de, pl, en |
meta list |
Metamod's own list — use this to confirm the loader itself is alive |
css_plugins list also prints a termination reason for anything that failed, which is usually the fastest way to find out why a plugin is not running.
Core settings worth knowing
These live in addons/counterstrikesharp/configs/core.json. A stock install ships them at these values.
| Setting | Default | What it controls |
|---|---|---|
PublicChatTrigger |
["!"] |
Prefix for chat commands everyone can see |
SilentChatTrigger |
["/"] |
Prefix for chat commands hidden from chat |
FollowCS2ServerGuidelines |
true |
Blocks plugin functionality known to cause GSLT bans |
PluginHotReloadEnabled |
true |
Reload a plugin automatically when its .dll changes |
PluginAutoLoadEnabled |
true |
Load plugins from the plugins directory at startup |
AutoUpdateEnabled |
true |
Keep gamedata.json updated automatically |
ServerLanguage |
"en" |
Default language for server commands and messages |
UnlockConCommands |
true |
Strip hidden and development-only flags from console commands |
AutoUpdateEnabled matters more than it looks. CounterStrikeSharp finds game structures through gamedata.json, and a CS2 update shifts them. Leaving auto-update on is what lets the framework recover from a game patch without you reinstalling it.
Which plugins can get my GSLT banned?
Valve's Game Server Operation Guidelines ask operators to remove any mod or plugin that falsifies the contents of a player's profile or inventory. Specifically named:
- Letting players claim temporary ownership of items that are not in their inventory — weapon skins, knives and so on.
- Providing a falsified competitive skill group, profile rank or scoreboard coin.
- Interfering with systems that let players access their own inventories, items or profile.
- Custom models or weapon skins that do not exist in the game's ecosystem.
Valve also answered the obvious follow-ups directly. Custom knives are covered even if only the holding player can see them. Granting stock weapons and grenades through a gun menu is fine. Remove-weapons, hide-knife and knife-drop functions are fine. Mods that change scores or player names on the scoreboard were, at the time of writing, not an issue.
The consequence is not a warning. In January 2016 Valve permanently disabled the Game Server Login Tokens belonging to operators offering these services, and permanently restricted the Steam accounts that generated them from creating new tokens — recovery required a new Steam account with a new qualifying phone number.
This is why CounterStrikeSharp ships FollowCS2ServerGuidelines set to true, which blocks plugin functionality known to trigger these bans. Its documentation notes the option does not guarantee you cannot receive a ban. Leave it on unless you have a specific reason not to, and be sceptical of any plugin whose install instructions tell you to turn it off.
The guidelines page is CS:GO-era
Valve's published guidelines date from 2015 and 2016 and are written for CS:GO. We could not find a CS2-specific replacement published by Valve. CounterStrikeSharp's current documentation still cites this page as the CS2 server guidelines, and it remains the only first-party statement on the subject, so treat it as live.
Why do my plugins break after a CS2 update?
Because they hook into the game binary, and a game update moves what they hook. Expect this order of events after a CS2 patch:
- Metamod's
gameinfo.giline may be gone — the update can overwrite the file. Re-add it. - Metamod:Source itself may need the newer dev build before it loads at all.
- CounterStrikeSharp needs current
gamedata.json, which is whatAutoUpdateEnabledhandles. - Individual plugins update last, on their authors' schedules.
The practical consequence is that plugins are the thing most likely to keep a CS2 server from booting after an update. If a server will not start and it ran fine before the patch, move addons/ aside and boot it stock — that separates a game problem from a plugin problem in about a minute.
Which admin plugin should I install on top?
Two different answers, because they install differently.
CounterStrikeSharp plugins go in addons/counterstrikesharp/plugins/ and need the stack above. CS2-SimpleAdmin is a widely used one: it needs CounterStrikeSharp plus the PlayerSettings, AnyBaseLibCS2 and MenuManagerCS2 libraries, and a MySQL database (SQLite support is marked experimental). Its config generates itself at addons/counterstrikesharp/configs/plugins/CS2-SimpleAdmin/CS2-SimpleAdmin.json on first launch.
CS2Fixes is a Metamod plugin and does not need CounterStrikeSharp at all — it is a parallel branch of the ecosystem. Extract its release into game/csgo, set its convars in cfg/cs2fixes/cs2fixes.cfg (many features ship disabled), and enable admins by renaming admins.jsonc.example to admins.jsonc in addons/cs2fixes/configs. It was built for zombie escape but is widely run for its admin system. Its command list is covered in Counter-Strike 2 server commands.
Check dependencies before you commit to a plugin. A plugin that needs three libraries and a database is three more things to fix after every CS2 update.
FAQ
Does CounterStrikeSharp give me !kick and !ban?
No. CounterStrikeSharp is a framework — its documentation states it does not implement traditional admin commands like !slay, !kick and !ban, and leaves them to individual plugins. It gives you the permission system in admins.json and the API plugins are written against. Install an admin plugin on top, or use the native kick, kickid and banid commands over RCON.
Why does meta list say Unknown Command?
Metamod is not loaded. Either the addons/ folder is not in game/csgo/, or the Game csgo/addons/metamod line is missing from game/csgo/gameinfo.gi. Check the file first — a CS2 update can overwrite gameinfo.gi and take the line with it.
Do I need the with-runtime build of CounterStrikeSharp?
On a first install, yes — it is required, because it bundles the .NET runtime. When upgrading later you can use the plain build, but then keeping the .NET runtime current is your job. If you are unsure, take with-runtime again; it is not harmful.
Will updating CounterStrikeSharp overwrite my admins.json?
No. CounterStrikeSharp is designed so that copying a newer release over an existing install leaves your configuration files alone. Back them up anyway before a major version jump.
Where does the SteamID for admins.json come from?
Any SteamID64 lookup works, and the native status command prints connected players' IDs directly in the server console. Both SteamID64 and STEAM_0:1:1 formats are accepted in admins.json.
Can I run CS2Fixes and CounterStrikeSharp at the same time?
They are separate Metamod plugins and both load through Metamod, so they can coexist as installs. They do not share an admin list — CS2Fixes reads addons/cs2fixes/configs/admins.jsonc and CounterStrikeSharp reads addons/counterstrikesharp/configs/admins.json, so you would be maintaining two. We have not tested them together on the same server; if you only need one admin system, pick one.
Do I need plugins to moderate my server at all?
No. Kicks, bans, map changes and every gameplay convar are native and work over RCON on a completely stock server — that is what Counter-Strike 2 server commands covers. Plugins buy you per-person permissions, chat commands, an in-game menu and ban reasons. That is real quality-of-life, not a requirement.
What to read next
- How to run 5v5 competitive matches on a Counter-Strike 2 server — MatchZy, the most common reason people install this stack
- Counter-Strike 2 server commands — RCON, native kick and ban commands, and the full convar reference
- Getting started with your Counter-Strike 2 Server — first boot, ports and connecting
- Counter-Strike 2 configuration — which config file executes when
- How to add Steam Workshop maps for Counter-Strike 2 — Workshop IDs and collections
Every server on our Counter-Strike 2 server hosting plans gives you direct file access and a console tab, which is all this guide needs.
Made with 💜 by GameServerKings
Need a Counter-Strike 2 server?
Deploy an instantly-provisioned Counter-Strike 2 server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $11.50 /month