From Valve Developer Community
Revision as of 11:51, 7 December 2013 by Lonaowna (talk | contribs) (Supported Servers: use template for the notes)
Jump to: navigation, search
Français Nederlands Polski Русский

The Steam Console Client or SteamCMD is a new tool to install and update dedicated servers using a command line interface. It only works with games that have switched over to the SteamPipe content system. Eventually all Steam games will switch from HLDSUpdateTool to this.

Downloading and Running SteamCMD

1. Download the SteamCMD Update Tool

If you are running a 64-bit Linux distro, you will probably have to install 32-bit libs. See here how to do this.

2. Extract the contents to a directory

Note.png Note: Do not extract the contents of the updater tool to the regular Steam Client folder or to the HLDSUpdateTool folder.
  • Linux: type tar -xvzf steamcmd_linux.tar.gz

3. Launch SteamCMD for the first time

Open a command prompt in that directory and start SteamCmd
  • Windows: type steamcmd
  • Linux: type ./

The program will automatically update and enter you in to a Steam> prompt. Type help for more information.

To download most game servers, you must login anonymously

login anonymous

If logging in anonymously doesn't work for that particular game, you will have to log in with a Steam Account

Note.png Note: You must log out of the regular Steam client in order to properly log in to SteamCMD Update Tool.
login <username>

Enter your password. Then check your e-mail for your Steam Guard access code and enter it (you'll only need to do this once per computer).

You should see a message stating that you have successfully logged in with your account.

Downloading an app

1. Start SteamCMD and set your app install directory. (note: use forward slashes for Linux and backslashes for Windows)

force_install_dir <path>
Example: cs_go directory in the current directory:
force_install_dir ./cs_go/

2. Install or update the app. <app_id> is the Steam Application ID. To also validate the app add validate to the command. To participate in HLDS beta testing add -beta beta to the command. To participate in SRCDS beta testing add -beta prerelease to the command.

app_update <app_id>
Example: install and validate CS:GO:
app_update 740 validate
Example: install and validate beta version of HLDS (Half-Life):
app_update 90 -beta beta validate
Example: install and validate beta version of CS:S:
app_update 232330 -beta prerelease validate
Example: install and validate a private beta version of NS2:
app_update 4940 -beta [beta name] -betapassword [beta code] validate
Where [beta name] is the name of the private beta branch and [beta code] is the password for the private beta branch (i.e. the code you would enter to get access to a private beta in the game properties).
Example: install and validate CS 1.6:
app_update 90 validate
Bug.png Bug: HLDS mods currently require multiple installs before the mod's files are installed.

3. Once finished, type quit to properly log off of the Steam servers.

Supported Servers

This is the known list of servers that require steamcmd to install. Any listed extra command line options need to be before the app_update line.

Bug.png Bug: HLDS (appid 90) currently require multiple installs before the game's files are installed. Possible workaround for this problem available. [link]
Note.png Note: The + and quotes in the extra command line options aren't needed when using automation as detailed in a later section.
Note.png Note: Items marked as Beta below may require -beta beta as part of their app_update argument... ex. +app_update "90 -beta beta"
Note.png Note: Some apps can only be downloaded when logged in as anonymous. (e.g. CS:S will not work with a normal Steam account)
Server ID Extra Command Line options
HLDS for Half-Life and Counter-Strike 1.6 90
Counter-Strike: Condition Zero dedicated server 90 +app_set_config "90 mod czero"
Deathmatch Classic dedicated server 90 +app_set_config "90 mod dmc"
Day of Defeat dedicated server 90 +app_set_config "90 mod dod"
Half-Life: Opposing Force dedicated server 90 +app_set_config "90 mod gearbox"
Ricochet dedicated server 90 +app_set_config "90 mod ricochet"
Team Fortress Classic dedicated server 90 +app_set_config "90 mod tfc"
Counter-Strike: Global Offensive dedicated server 740
The Ship dedicated server 2403
Garry's Mod dedicated server 4020
Natural Selection 2 dedicated server 4940
Serious Sam 3 dedicated server 41080
Nuclear Dawn dedicated server 111710
Red Orchestra: Ostfront 41-45 Windows dedicated server 223240
Red Orchestra: Ostfront 41-45 Linux dedicated server 223250
Red Orchestra 2: Heroes of Stalingrad and Rising Storm Windows dedicated server 212542
Killing Floor Windows dedicated server 215350
Killing Floor Linux dedicated server 215360
Left 4 Dead 2 dedicated server 222860
Team Fortress 2 dedicated server 232250
Day of Defeat: Source dedicated server 232290
Counter-Strike: Source dedicated server 232330
Half-Life 2: Deathmatch dedicated server 232370
Blade Symphony Beta dedicated server 228780
Source SDK Base 2006 MP dedicated server (i.e. Fortress Forever) 205
Source SDK Base 2013 MP dedicated server 244310
Half-Life Deathmatch: Source dedicated server 255470
Pirates, Vikings, and Knights II dedicated server 17575
Tip.png Tip: To install multiple mods, separate their names with commas, e.g. +app_set_config 90 mod czero,dod.

Automating SteamCMD

There are two ways to automate SteamCMD. (replace steamcmd with ./ on Linux)

Note.png Note: When using beta on the command line, it must be quoted in a special way, such as +app_update "90 -beta beta"

1. Add commands to the command line. Examples:

steamcmd +login anonymous +force_install_dir ../csgo_ds +app_update 740 validate +quit

To install a specific game mod for HL1, such as Counter-Strike: Condition Zero:

steamcmd +login anonymous +force_install_dir ../czero +app_set_config 90 mod czero +app_update 90 validate +quit

For a game that requires logins, like Killing Floor

steamcmd +login <username> <password> +force_install_dir c:\KFServer\ +app_update 215350 validate +quit

2. Create a script.

a. Put your SteamCMD commands in a text file. Example:
// update_csgo_ds.txt
@ShutdownOnFailedCommand 1 //set to 0 if updating multiple servers at once
@NoPromptForPassword 1
login <username> <password>
//for servers which don't need a login
//login anonymous 
force_install_dir ../csgo_ds
app_update 740 validate
b. Run SteamCMD with the +runscript option. Example:
steamcmd +runscript csgo_ds.txt

Cross-Platform Installation

It is possible to choose the platform for which SteamCMD should download files, even if it isn't the platform it is currently running on. This is done using the @sSteamCmdForcePlatformType variable. (Yes, those are two "s"es at the beginning of the variable name.) For example, to download the Windows CSGO dedicated server on Linux, you can run the following command:

./ [email protected] windows +login anonymous +force_install_dir ../csgo_ds +app_update 740 validate +quit

or use the following script:

@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
@sSteamCmdForcePlatformType windows
login anonymous
force_install_dir ../csgo_ds
app_update 740 validate

The supported values are windows, macos and linux.

Windows Scripts

SteamCMD Guardian 1.2

View and download here:

Linux Scripts

Linux Game Server Managers

by Daniel Gibbs

The Linux Game Server Managers are command line tools for quick, simple deployment and management of various dedicated game servers using SteamCMD.

Various Server are supported including:

  • Half-Life 2: Deathmatch
  • Counter Strike
  • Counter Strike: Source
  • Counter Strike: Global Offensive
  • Team Fortress 2
  • Left 4 Dead 2
  • Day of Defeat: Source
  • Red Orchestra: Ostfront 41-45
  • Killing Floor

Full list of servers and instructions:

GitHub Repo:

SteamCMD Guardian 1.2

The following script was tested on Debian Wheezy.

View and download here:


To make this script work, we need a location. Preferrably you created a user (e.g. steam) with it's own home directory (/home/steam) and are logged in as it via SSH, tty or using su.

  1. Make the file.
  2. Paste in the code
  3. Modify the code, add at least 1 game to the DL_SV*= rows.
  4. Close the file with Ctrl+O, followed by Enter and concluding with Ctrl+X.
  5. Give the file execute rights for the user
    chmod u+x ./
  6. Run the file

The file will auto-download SteamCMD, update it and install all chosen games (up to 4). Run the file again to update the games.

Known issues

ERROR! Failed to install app 'xxxxxx' (No subscription)

Some servers require you to login (most don't). If you get the 'No subscription' error you will need to enter your steam username and password to allow authentication to the steamCMD system. It is a good idea to create a new Steam username just for the server as the username and password displays as clear text.

For example

steamcmd +login <username> <password>

32-bit libraries on 64-bit Linux systems

Since SteamCMD is a 32-bit binary, a few 32-bit libraries are required.

The following error may occur:

steamcmd: error while loading shared libraries: cannot open shared object file: No such file or directory

The remedies are distribution-specific:

Debian and derived distributions (Ubuntu, Mint, etc.)

apt-get install ia32-libs

Ubuntu 13.10 "Saucy"

As of Ubuntu 13.10 the ia32-libs package is deprecated. Use this instead

apt-get install lib32gcc1

Debian 7 "Wheezy"

The follow error may occur:

The following packages have unmet dependencies: ia32-libs : Depends: ia32-libs-multiarch but it is not installable
E: Unable to correct problems, you have held broken packages.

do the following:

 dpkg --add-architecture i386
 apt-get update
 apt-get install ia32-libs

you can also use:

 dpkg --add-architecture i386
 apt-get update
 apt-get install libc6-i386 lib32gcc1

to avoid installing unrequired 32bit packages.

Red Hat and derived distributions (RHEL, Fedora, CentOS, etc.)

yum install glibc.i686 libstdc++.i686

Arch Linux

Don't forget to first enable the multilib repository.

pacman -S lib32-gcc-libs

Login Failure: No Connection

On linux servers, you may experience a "Login Failure: No Connection". This is related to missing iptables rules. You will want something along these lines:

iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65355 -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65355 -j ACCEPT

The port list is found here:

On Windows servers, you may experience "SteamUpdater: Error: Download failed: http error 0" and "SteamUpdater: Error: Steam needs to be online to update. Please confirm your network connection and try again.". This is usually fixed by checking "Automatically detect settings" in IE (Internet Explorer) through the lan settings in the Internet option menu.

1. Open Internet Explorer (IE)

2. Click on Tools > Internet Options

3. Click on the "Connections Tab"

4. At the Bottom, you should see "Local Area Network (LAN) Settings".

5. Check the first box "Automatically detect settings"

6. Hit ok, and apply. Try running the SteamCMD again, if it still doesn't work. try lowering your "Internet Security level zone" to medium or lower. You can find that in the "Security" tab in "Internet Options".

SteamCmd startup errors

Ulimit linux startup error

Some users may get ulimit error (no permission/can not open file) while script is starting up. This error caused by low setting of -n-parameter of ulimit. SteamCmd uses standard command inside of shell-script to change ulimit automatically, but some servers may be protected from changing values to custom from different (set by root). It fixes only with changing ulimit parameter up to 2048: ulimit -n 2048. It may cause error (no permission), so you may need login as root to change the parameter. To check your setting: type ulimit -a, system will reply with many rows, you need to find one:

open files                      (-n) 1024

"1024" is the value of setting in system.

In most instances you will get a warning message however it will not stop SteamCMD from running.