Skip to content

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.