Counter-Strike 1.6 Server Setup: SteamCMD, HLDS, server.cfg & AMX Mod X
How to stand up a Counter-Strike 1.6 dedicated server in the modern era: installing HLDS (free app 90) with SteamCMD and the mod cstrike config line, why modded servers need the steam_legacy branch since the 25th Anniversary update, the hlds_run launch line, the single-UDP-port firewall reality, server.cfg essentials, why GSLT tokens do not apply to GoldSrc, the ReHLDS + Metamod-R + AMX Mod X admin stack, and FastDL that actually works.
Counter-Strike 1.6 is the longest-running self-hosted multiplayer scene there is - the game is from 2000, the engine (GoldSrc) is older, and thousands of community servers still run today. The dedicated server is free, tiny by modern standards, and runs on hardware that would embarrass a Raspberry Pi budget. You do not need to own the game to host a server. What you do need is to know about a handful of traps that only apply to a 25-year-old engine - this guide covers all of them.
Installing HLDS with SteamCMD
The CS 1.6 server is not its own Steam app - it is a mod of the Half-Life Dedicated Server, app 90 (the game client is app 10, which you never install on a server). Two things follow from that:
You must tell SteamCMD which mod to install with +app_set_config 90 mod cstrike - app 90 alone has no default mod and installs nothing usable.
Anonymous login works - HLDS is free.
On a 64-bit Linux host, install the 32-bit libraries first (SteamCMD and HLDS have no 64-bit builds):
Known quirk, still current:+app_update 90 frequently stops before downloading everything. The long-standing fix is simply to run the same command again (sometimes several times) until it reports success with nothing left to download. This is not your setup being broken - it is a well-documented app-90 behavior that community projects exist solely to work around.
The 25th Anniversary update and steam_legacy
In November 2023 Valve shipped the Half-Life 25th Anniversary update, which rebuilt the GoldSrc engine binaries - and broke Metamod and AMX Mod X (crashes, most visibly in anything touching the hamsandwich module). Valve's answer is a steam_legacy beta branch carrying the pre-anniversary build (engine 8684).
The practical rule in 2026:
Vanilla server, no plugins: the default branch is fine.
Modded server (AMX Mod X, ReHLDS - i.e. almost every real CS 1.6 server): install the legacy branch. ReHLDS explicitly does not support the post-anniversary build.
+maxplayers caps at 32. This is an engine hard cap, not a config default - setting more does not work and attempts to force it crash the server.
-strictportbind is worth adding: if the requested port is taken, the server exits with an error instead of silently binding a different one (which otherwise leaves you debugging a "server not responding" that is actually a wrong-port problem).
-pingboost 2 is commonly used on Linux to select a lower-latency network loop; treat it as an optional tune, not a requirement.
Run it under screen, tmux, or a systemd unit so it survives your SSH session; hlds_run auto-restarts the process after a crash.
Ports: one UDP port, no TCP
GoldSrc is refreshingly simple here, and most port guides get it wrong by copying Source-engine tables:
Port
Protocol
Purpose
27015 (default)
UDP
Game traffic, server queries, and RCON
26900
UDP
VAC (optional to forward; commonly listed, rarely needed explicitly)
27020
UDP
HLTV spectator relay, only if you run HLTV
There is no TCP listener at all. Game, query, and RCON all share the single UDP port. Sites listing "27015 TCP (RCON)" for HLDS are describing the newer Source engine, not GoldSrc - forwarding 27015/UDP is the whole job.
server.cfg essentials
HLDS auto-executes cstrike/server.cfg on every map load. A minimal working one:
hostname "My CS 1.6 Server"
rcon_password "use-a-long-random-string"
sv_password "" // set to make the server private
mp_timelimit 30
mp_friendlyfire 0
sv_lan 0
mapcyclefile "mapcycle.txt"
sv_lan 0 matters: with sv_lan 1 the server is LAN-only - it will run fine, you can join it locally, and nobody on the internet will ever see it. This is the classic "my server doesn't show up" cause.
The map rotation lives in cstrike/mapcycle.txt, one map name per line (without .bsp).
GSLT tokens: not a GoldSrc thing
If you have hosted CS2, CS:S, or Team Fortress 2 you know the Game Server Login Token dance (sv_setsteamaccount). CS 1.6 does not use it - the cvar does not exist in GoldSrc, and the engine predates the whole Steam game-server-account system. Some hosting-provider guides instruct you to create a GSLT for "game 90" anyway; that is a Source-era template pasted onto a legacy game. Skip it.
RCON: the GoldSrc protocol, not Source
CS 1.6 RCON works over the same UDP port as the game, using a challenge-based protocol that predates (and is incompatible with) the TCP Source RCON used by CS2, CS:S, and TF2. A Source-RCON tool will not connect to a CS 1.6 server - use a GoldSrc-capable RCON client, the in-game console (rcon_password then rcon <command>), or admin mods.
Set a long random rcon_password - RCON rides plain UDP, and brute-force attempts against internet-visible HLDS servers are constant background noise.
The full admin command vocabulary - kick/ban and ban persistence, match cvars, AMX admin commands - is covered in our companion reference: Counter-Strike 1.6 RCON Commands.
The admin stack: ReHLDS, Metamod-R, AMX Mod X
Nearly every serious CS 1.6 server runs the same open-source stack, in this order:
ReHLDS (optional but common) - a reverse-engineered, bug-fixed drop-in replacement for the HLDS engine binary. Requires the steam_legacy build, as above.
Metamod-R - the plugin loader, installed into cstrike/addons/metamod/. Use the maintained Metamod-R fork rather than the original 2000s Metamod; it is the one kept compatible with current HLDS/ReHLDS builds.
AMX Mod X - the admin/scripting layer on top of Metamod: in-game admin menus, bans that persist, map votes, stats, and thousands of community plugins.
ReAPI (with ReHLDS) - exposes ReHLDS extras to AMXX plugins.
Install Metamod-R, register it in cstrike/liblist.gam (gamedll "addons/metamod/dlls/metamod.so" on Linux), then add AMX Mod X as a Metamod plugin. Each project's README covers its own current install steps - prefer those over years-old forum copies.
This guide deliberately covers only the standard Steam setup - not the "non-Steam client" server patches that circulate in parts of the 1.6 scene.
FastDL for custom maps
Clients download custom maps/sounds from the game server at painful in-engine speeds unless you host the files on a web server and point at it:
Mirror your maps/, sound/, etc. under that URL. One GoldSrc-specific catch: unlike Source, the engine does not understand .bz2 archives - it supports gzip at the HTTP level, so enable gzip compression on the web server itself rather than pre-compressing files.
Hardware: almost anything works
The engine is single-thread bound, so per-core clock speed is what matters - and barely. As rough figures, a full 32-slot vanilla server uses a few hundred MB of RAM and well under 1 Mbps of upstream per direction; a small VPS or a leftover home box is plenty. Heavy AMXX plugin stacks raise CPU and RAM somewhat, but CS 1.6 is one of the cheapest game servers you can run.
MantaScope tracks the live Counter-Strike 1.6 server list - population history and graphs, per-server rank against the other 3,600+ CS 1.6 servers, uptime and downtime incidents, and decoded server attributes - so once your server is up you can watch it from the browser and share an embeddable status banner with your community. For day-to-day admin, pair it with the GoldSrc RCON tooling above and our CS 1.6 RCON command reference.
ARK: Survival Evolved Server Setup: SteamCMD, GameUserSettings.ini, Ports & RCON