Metamod: metamod-fwgs
CSRetro uses a vendored, CSRetro-modified fork of metamod-fwgs as its plugin loader (3rdparty/metamod/). The full source tree is committed in-tree (no submodules).
Vendored tree revision in this build: see VENDOR.md and Vendor table (VENDOR.md).
Relationship to Metamod-R documentation
CSRetro uses metamod-fwgs on Xash3D. Older Metamod-R descriptions of the same plugin model and meta console commands often assume legacy HLDS paths — always use Server administrators and this page for CSRetro paths. Upstream project: metamod-fwgs (attribution in Credits).
What is Metamod-FWGS?
Metamod is a plugin loader that sits between the Xash3D engine and the game DLL (dlls/csr_cstrike_amd64.so). It enables server-side plugins (like NodeMod or YaPB) to be loaded at runtime without modifying the game DLL itself.
metamod-fwgs is a fork of Metamod-R specifically adapted for Xash3D FWGS and modern architectures and compilers. The original Metamod-R targeted x86 with JIT optimizations tightly coupled to ReHLDS binary compatibility; metamod-fwgs removes those constraints to support 64-bit Linux, arm64, and more.
How Metamod is loaded in CSRetro
gameinfo.txt points the engine to Metamod as the game DLL:
gamedll_linux "addons/metamod/dlls/csr_metamod.so"
(Xash3D appends _amd64 per platform; the on-disk name is csr_metamod_amd64.so on 64-bit Linux.)
Metamod then loads the actual game DLL (e.g. dlls/csr_cstrike_amd64.so) from its own addons/metamod/dlls/config.ini, and additionally loads all plugins listed in addons/metamod/dlls/plugins.ini.
Plugin chain
Xash3D Engine
└── addons/metamod/dlls/csr_metamod_amd64.so ← loaded via gameinfo.txt
├── config.ini → dlls/csr_cstrike_amd64.so ← actual game logic
└── plugins.ini:
linux addons/nodemod/dlls/libcsr_nodemod.so ← NodeMod (or libnodemod.so legacy)
linux dlls/csr_yapb_amd64.so ← YaPB (when installed)
meta console commands
With clientmeta yes (typical in CSRetro), use the meta prefix in the server or client console. Common commands:
| Command | Description |
|---|---|
meta version |
Metamod version |
meta list |
Loaded plugins and status |
meta game |
Game DLL / registered messages |
meta cmds |
Commands registered by plugins |
meta cvars |
CVars registered by plugins |
meta refresh |
Reload Metamod configuration |
meta config |
Metamod config.ini-related settings |
meta load <path> |
Load a plugin from path |
meta unload <name> |
Unload a plugin |
meta reload <name> |
Reload a plugin |
meta info <name> |
Plugin information |
meta pause <name> / meta unpause <name> |
Pause / resume plugin |
Other subcommands may exist in your build (meta retry, meta clear, …). Use cmdlist meta on the server for the authoritative list.
Common Metamod cvars
| CVar | Notes |
|---|---|
clientmeta |
Enables client-side meta commands (yes/no; default is typically yes in CSRetro). |
debuglevel |
Metamod verbosity (numeric; higher with -dev). |
gamedll |
Optional override for game DLL path. |
exec_cfg |
Script run after Metamod init (relative to gamedir). |
CSRetro uses metamod-fwgs on Xash3D — paths in Server administrators replace generic dedicated-server examples that assume different directory layouts.
Configuration files
| File | Description |
|---|---|
addons/metamod/dlls/config.ini |
Metamod settings; gamedll path to actual game DLL |
addons/metamod/dlls/plugins.ini |
List of Metamod plugins to load |
Building
Metamod is built and installed automatically as part of build:release and build:full:
./tools.sh build:release # Builds and installs Metamod alongside game DLLs
./tools.sh install:addons # Re-install Metamod without full rebuild
If Metamod is missing when run:game or run:debug is launched, it is built automatically (lazy install).
Attribution
metamod-fwgs is developed and maintained by the FWGS team. See credits.