---
title: "How to install plugins on a Counter-Strike 2 server"
description: "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."
url: "https://www.gameserverkings.com/knowledge-base/counter-strike-2/how-to-install-plugins/"
category: "Counter-Strike 2"
category_url: "https://www.gameserverkings.com/knowledge-base/counter-strike-2/"
published: "2026-08-07T08:27:15.308Z"
updated: "2026-08-07T08:27:58.562Z"
source_format: "markdown"
site: "GameServerKings"
---

# How to install plugins on a Counter-Strike 2 server

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](/knowledge-base/counter-strike-2/how-to-add-admins-and-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.

> [!IMPORTANT] 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:

```text title="gameinfo.gi"
			Game_LowViolence	csgo_lv
			Game	csgo/addons/metamod
```

5. Restart the server.

6. 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:

```text title="meta list"
Listing 1 plugin:
  [01] CounterStrikeSharp (0.1.0) by Roflmuffin
```

When both layers are in place, `game/csgo/addons/` looks like this:

```text title="game/csgo/addons"
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:

```text title="Plugin layout"
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:

```json title="configs/admins.json"
{
  "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.

> [!WARNING] 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 `#`.**

```json title="configs/admin_groups.json"
{
  "#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.

```json title="configs/admins.json"
{
  "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.

> [!NOTE] 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](/knowledge-base/counter-strike-2/how-to-add-admins-and-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](/knowledge-base/counter-strike-2/how-to-add-admins-and-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](/knowledge-base/counter-strike-2/how-to-run-competitive-matches/) — MatchZy, the most common reason people install this stack
- [Counter-Strike 2 server commands](/knowledge-base/counter-strike-2/how-to-add-admins-and-commands/) — RCON, native kick and ban commands, and the full convar reference
- [Getting started with your Counter-Strike 2 server](/knowledge-base/counter-strike-2/getting-started-with-your-server/) — first boot, ports and connecting
- [Counter-Strike 2 configuration](/knowledge-base/counter-strike-2/configuration-overview/) — which config file executes when
- [How to add Steam Workshop maps for Counter-Strike 2](/knowledge-base/counter-strike-2/how-to-add-workshop-maps/) — Workshop IDs and collections

Every server on our [Counter-Strike 2 server hosting](/games/counter-strike-2/) plans gives you direct file access and a console tab, which is all this guide needs.

---

Made with 💜 by GameServerKings
