Skip to content

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.

Updated August 07, 2026
Counter-Strike 2

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?

  1. Download the latest 2.x dev build for your platform from metamodsource.net/downloads.php?branch=dev.

  2. Extract it and copy the addons/ directory into game/csgo/ on your server.

  3. Open game/csgo/gameinfo.gi in a text editor.

  4. Find the line Game_LowViolence csgo_lv and add a new line directly underneath it:

			Game_LowViolence	csgo_lv
			Game	csgo/addons/metamod
gameinfo.gi
  1. Restart the server.

  2. Type meta list in the server console. If Metamod loaded, it answers. If it says Unknown 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?

  1. Download the latest release from github.com/roflmuffin/CounterStrikeSharp/releases. On a first install you must take the with-runtime build — it bundles the .NET runtime that CounterStrikeSharp needs. The release published on 10 July 2026 was v1.0.371, shipping counterstrikesharp-with-runtime-linux-1.0.371.zip and a matching Windows archive.

  2. Extract it and copy the addons/ directory into game/csgo/, merging with the Metamod folder already there.

  3. Restart the server.

  4. Run meta list. CounterStrikeSharp should now appear as a loaded Metamod plugin:

Listing 1 plugin:
  [01] CounterStrikeSharp (0.1.0) by Roflmuffin
meta list

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
game/csgo/addons

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
Plugin layout

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"]
  }
}
configs/admins.json

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 !kick or !ban

This 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, !kick and !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.json grants 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
  }
}
configs/admin_groups.json

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"]
  }
}
configs/admins.json

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:

  1. Metamod's gameinfo.gi line may be gone — the update can overwrite the file. Re-add it.
  2. Metamod:Source itself may need the newer dev build before it loads at all.
  3. CounterStrikeSharp needs current gamedata.json, which is what AutoUpdateEnabled handles.
  4. 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.

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