How to Install a CS 1.6 Dedicated Server on Linux

Table of Contents

In this guide I will try to explain and show how to install a Counter-Strike 1.6 dedicated server on a rented VPS. I will go over how to pick a suitable configuration and connect to the machine, how to install the game server and run it so that it stays up around the clock.

First we connect to the machine over SSH, prepare the system and create a separate user. Then we sort out how HLDS differs from ReHLDS and why we are going to install the old build from the steam_legacy branch instead of the current one. After that we install SteamCMD, download the server, do a test run and bring it up inside screen so it keeps running after the SSH session is closed.

Next I will show how to replace the engine with ReHLDS and install the remaining server components: Metamod-r, AMX Mod X, ReGameDLL_CS, and much more. Then I show how to set them up to work together and do the initial configuration of the game server.

This guide is for people with no server administration experience. All commands are given in the right order, with an explanation of which user to run them from and what output should appear. By the end of part one you will have a clean working CS 1.6 server that anyone can connect to by IP.

Where to Host a CS 1.6 Server: Home PC vs VPS

Before installing anything it is worth deciding where the server is going to live. That affects both the setup and who will be able to connect to you at all.

CS 1.6 Server on a Home PC

The quickest way is to run the server right on your own machine. Nothing to pay for, everything is at hand, and settings can be changed on the fly. But it is not really a sensible option if you want a proper server. The computer has to stay on 24/7 under constant load, you need a dedicated IP and network configuration, DDoS protection, and so on. This method will not be covered in the guide.

Renting a VPS for a CS 1.6 Server

Hosting is a convenient way to create a Counter-Strike game server. Providers offer a wide choice of plans with stable connectivity and ping, automatic setup, and DDoS protection. The machine runs around the clock, it has its own static IP and a decent channel.

Picking a host is your job. There are plenty of providers, differing in price, hardware, location and terms. You can even find something free for a trial period, and that may well be enough to figure out how a CS 1.6 server is set up and how it runs.

CS 1.6 Dedicated Server Requirements

CPU. In Counter-Strike 1.6 the most important component is the processor. The GoldSrc engine is single-threaded, so the whole load lands on a single core and its frequency is what decides everything. Minimum is 2.5 GHz, three and above is better. One core is enough for that. If you plan to run more than one CS 1.6 server, use this as a reference point: 1 core - 1 server.

RAM. One gigabyte is perfectly enough for a CS 1.6 server. But if you want a full-featured game server with an http server for fast downloads of maps and resources, plus a database, then you need 2 GB.

SSD. 20+ GB per server, and that is with a lot of room to spare. The server files themselves take under a gigabyte, the rest goes to the system, maps, models and logs.

Operating system. Ubuntu is fine, but if there are no special requirements (an admin panel or something else), I would go with a clean Debian 13 x64. Less clutter in the system, less that can break.

Recommended VPS Configuration for CS 1.6

  • CPU: 3+ GHz, 1 core
  • RAM: 2 GB
  • SSD: 20+ GB
  • OS: Debian 13 x64

The screenshots below show an example of picking such a machine at one of the providers. Pay attention to the High Frequency line: that is what CS 1.6 needs, processors clocked above 3 GHz.

Selecting a Shared CPU server location in the Vultr control panel
Choose a Shared CPU server and the nearest available location
Selecting a High Frequency VPS plan for a CS 1.6 Linux server
Select the High Frequency plan with 1 vCPU, 2 GB RAM, and 64 GB NVMe storage

Connecting to Your Linux VPS via SSH

The machine is rented and running. Now you need to connect to it to do anything on it.

PuTTY and WinSCP

For managing and configuring the server I would recommend two programs: PuTTY for connecting over SSH and WinSCP for working with files through a familiar file manager. PuTTY is a terminal, you type commands into it. WinSCP will come in handy later, when you need to drop maps, configs or mods onto the server: drag them with the mouse from one window into the other and that is it.

First SSH Connection

Open your hosting control panel and go to the server settings. You will need the following details to connect:

  • Server IP address
  • Username, usually root
  • Password
Entering a Linux server IP address and SSH port in PuTTY
Enter the server IP address, keep port 22, select SSH, and click Open

Open PuTTY, type the IP address into the Host Name field, leave the port at 22, create a session and connect. On the first login the program will ask about the host key, agree to it. Then enter the login and password. The password is not shown in the terminal in any way, not even as asterisks, this is normal, just type it and press Enter. If everything went through, you will see the command prompt. You are on the server.

Preparing Debian or Ubuntu for a CS 1.6 Server

A fresh system is almost ready to go, but a couple of things need finishing: update the packages and add what CS 1.6 will not start without.

Updating the System

The first thing to do after logging in is update the system. Type two commands in one line:

apt update && apt full-upgrade -y
Updating and upgrading Debian packages in PuTTY
Run apt update && apt full-upgrade -y to update all installed packages

Here apt update refreshes the list of available packages, full-upgrade installs fresh versions of everything already in the system, and the -y key automatically answers "yes" to every question so you do not have to confirm each step by hand. This takes anywhere from a few seconds to a couple of minutes.

32-bit Architecture Support

CS 1.6 is a 32-bit server, so on a 64-bit system you need i386 libraries.

First we allow the system to work with 32-bit architecture:

dpkg --add-architecture i386

After that the package list has to be updated once more so the system can see the 32-bit versions:

apt update
Enabling 32-bit architecture on a Debian server
Add i386 architecture support and update the package lists

Installing Dependencies

Now we install the libraries themselves and a couple of useful utilities:

apt install -y lib32gcc-s1 lib32stdc++6 libc6:i386 wget tar
Installing 32-bit libraries required for a CS 1.6 server
Install the required 32-bit libraries, also Wget, and Tar packages

Here:

  • lib32gcc-s1, lib32stdc++6, libc6:i386 - 32-bit libraries the server needs to run
  • wget - a tool for downloading files from the network
  • tar - an archiver

Creating a Dedicated Linux User for the CS 1.6 Server

For security reasons working under root on Linux systems is not recommended. The root user can do anything, including wiping the system by accident with a single typo. So I create a separate user, and that is who our server will live under.

Adding the User

Create a user, let us call it cs16:

adduser cs16

The system will ask you to set a password, then it will ask for a name, phone number and other nonsense, those fields can be skipped by just pressing Enter. Confirm at the end.

Creating a new cs16 user account on Debian
Create the cs16 user and set its password

Sudo Rights and Switching Over

Add the new user to the sudo group so it can run commands with administrator rights:

usermod -aG sudo cs16

Switch over to it:

su - cs16
Switching from root to the cs16 user on Debian
Add cs16 to the sudo group and switch to the new account

And just in case we refresh the package list under its name:

sudo apt update

HLDS vs ReHLDS: Which Server Engine to Use

A CS 1.6 server can be run on two different engines. One is official, from Valve, the other one is maintained by the community. Below, I sort out how they differ and why the choice in the end falls on the second one.

HLDS

Half-Life Dedicated Server is the official program from Valve for running dedicated servers of games on the GoldSrc engine: Counter-Strike 1.6, Half-Life, Day of Defeat, Team Fortress and others.

Essentially, it is the server side of the game engine. If the client handles graphics, sound, and character control, then HLDS accepts player connections, calculates physics, processes actions, synchronises the state of the game world between all participants, and manages maps, entities, and game rules.

It has no game graphical interface. It is usually run on a separate machine or a VPS so the server works around the clock.

The architecture was developed in the late 1990s and for many years was the only official server solution for GoldSrc. After Valve wound down active development, bugs, limitations, and outdated technical decisions stayed in it. Even so, thanks to its stability and compatibility, HLDS remained the standard for Counter-Strike 1.6 servers for many years.

ReHLDS

Reverse Engineered Half-Life Dedicated Server is an alternative implementation of the GoldSrc server side, restored from the original HLDS. It is not a new engine written from scratch based on observing how the original HLDS behaves. Its foundation was the decompiled HLDS binary, whose source code was restored to a state that allows building a functionally identical server. Only after that did fixes, optimisations and new features start going into this restored codebase.

ReHLDS is tied to the specific engine version it was restored from. The restoration was done on the basis of builds 6152/6153, and the supported base for installation is HLDS up to build 8684.

HLDS vs ReHLDS

Below is a table showing that this is one and the same server side, but in the second case with fixes and living support.

HLDS ReHLDS
Original Valve binary, closed source Engine restored from HLDS, open source
Bugs Valve no longer fixes Dozens of fixes in network code, packet handling, memory management and server logic
Limited by its internal architecture Added APIs for modifications, hooks, extended settings and raised limits
Can behave unstably under heavy load Handles large numbers of players, bots and plugins better
Updated only when Valve decides to Regularly updated and developed by the ReHLDS community

Installing the CS 1.6 Server with SteamCMD

SteamCMD is Valve's official tool for downloading Steam game servers. This is what we install the CS 1.6 server through. You need to create a folder, download the server archive and unpack it.

Running SteamCMD

  1. Creating the working folder. Right now, you are in the home folder of the user you created, /home/cs16/ (e.g, cs16@xxx:~$). Here I create a separate folder with the mkdir command, where the SteamCMD client itself and its download cache will sit, and go straight into it using the cd command:
    mkdir ~/steamcmd && cd ~/steamcmd
    Creating a SteamCMD directory for the CS 1.6 Linux server user
    Update the package list, then create and open the steamcmd directory
  2. Download and unpack.
    • Download the SteamCMD archive:
      wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
    • And unpack it:
      tar -xvzf steamcmd_linux.tar.gz
  3. Running the installer. From the unpacked archive launch the Steam console script:
    ./steamcmd.sh
    Downloading, extracting, and starting SteamCMD on Debian Linux
    Download the SteamCMD archive, extract it, and run steamcmd.sh

On first launch SteamCMD will download the missing files and update itself. Wait until the Steam> prompt appears in the console, that means you can start entering commands to install the server.

SteamCMD installation completed with the Steam console prompt on Linux
SteamCMD finishes updating and displays the console prompt

Installing the CS 1.6 Server

We are in the SteamCMD console. From here four commands install the server itself.

  1. First we specify the path where the server goes. I will install into the /cs16srv/ folder (you can use your own name), there is no need to create it in advance, SteamCMD will do that itself:
    force_install_dir /home/cs16/cs16srv
  2. Log in to Steam. No account is needed for this, the CS 1.6 server is available anonymously:
    login anonymous
  3. Specify the mod that should be installed, since HLDS AppID 90 holds four mods of the Half-Life series:
    app_set_config 90 mod cstrike
  4. Starting the installation of the build we need:
    app_update 90 -beta steam_legacy validate
    Here, 90 is the AppID of the Half-Life server, -beta steam_legacy points at the classic branch (without it you get the wrong build), and validate checks the integrity of the downloaded files. The download will take a few minutes. If at the end you see this output, everything is ready: Success! App '90' fully installed.
  5. Exit SteamCMD:
    quit
    Installing a Counter-Strike 1.6 dedicated server through SteamCMD
    Set the installation directory, log in anonymously, and install App ID 90

At this point your account should have this structure:

  • /home/cs16/steamcmd/ - SteamCMD installer files
  • /home/cs16/cs16srv/ - Game server files

Why ReHLDS Requires HLDS Build 8684

As of late 2026 the app_update 90 validate command installs build 10211 October 8, 2024. The app_update 90 -beta steam_legacy validate command installs build 8684 August 3, 2020 - the last build ReHLDS is compatible with. That is the whole reason for the older branch.

Comparison of CS 1.6 server builds installed with standard and steam_legacy SteamCMD commands
Comparison of CS 1.6 server builds

ReHLDS Build 8684 vs Valve HLDS Build 10211

Comparison ReHLDS 3.15.0.896 (May 2026) Valve HLDS 10211 (Oct 2024)
Developer ReHLDS community, open source Valve, closed source
Base Engine restored from builds 6152/6153 Official engine after the Anniversary Update
Date/version Current ReHLDS version Oct 8, 2024 (10211)
Installation Installed on top of steam_legacy, replaces engine files Downloaded with a plain app_update 90
Compatibility Designed for HLDS 8684 and below Not a compatible base for ReHLDS
ReGameDLL_CS / ReAPI Full integration and extended APIs No ReHLDS API
Settings Extra sv_rehlds_* cvars, hooks, raised limits Standard Valve settings
Modules/plugins Metamod-R, ReAPI, Reunion, ReVoice, ReGameDLL_CS Needs plugins built for the new HL25 engine
Steam Uses the steam_legacy base Current official Steam Auth Server
Sources Can be studied, edited and built yourself Only Valve controls the changes

Why There Is No ReHLDS Compatibility Patch for the Anniversary Update

Since 8684 is the last compatible build, it makes sense to ask why ReHLDS cannot be adapted to the new engine.

The Anniversary Update changed part of the engine and the way its binary components interact. Hence the incompatibility. ReHLDS is not a patch on top of HLDS, it is a separate engine restored from its code, so "just patching it" will not work. It would take decompiling the new engine, reworking functions, physics, compatibility with Metamod, AMX Mod X, ReGameDLL_CS, Reunion, hundreds of plugins, and so on.

No public work is being done in that direction right now, and nobody has announced any plans. Technically the task is solvable, but given the amount of work involved, in my opinion there is no point in it.

ReHLDS vs HLDS Security Considerations

Claiming that ReHLDS is "safer than HLDS" would be an oversimplification. We do not see the full list of vulnerabilities closed in 10211, and we cannot compare it line by line with ReHLDS. But a few things are known clearly enough.

Old HLDS was broken by public exploits for years, crashes, DoS, overflows in packet handling. ReHLDS over all those years has barely shown up in stories like that. Its code is open, changes are visible, bugs are fixed by the community. HLDS has no such process: what Valve fixed and when is known only once a build comes out, and even then only in general terms.

On top of that ReHLDS ships with basic checks like speedhack detection and lets you install serious anticheat modules, anti-VPN and the rest of that stack. HLDS has none of this.

There is a flip side too, and it is worth admitting. Before the Anniversary Update the client would happily load third-party DLLs, with everything that follows in the form of WH and aim bots. How effective VAC was in CS 1.6 is an open question, nobody heard about mass bans. Now the client starts complaining when something tries to load a DLL, and that does look like a real hole closed on Valve's side. Although ReHLDS, when set up properly, could and still can keep such clients off the server.

There is no clear winner here.

First Run of the CS 1.6 Server

The server is installed. Let us check that it works at all, go into the server folder:

cd /home/cs16/cs16srv
Counter-Strike 1.6 dedicated server files listed in the Linux terminal
Open the server directory and use ls to confirm that the files were installed

And run the ./hlds_run script together with the keys (launch parameters):

./hlds_run -game cstrike +map de_dust2 +maxplayers 16 +port 27015

On the first launch, you may run into a fatal error: FATAL ERROR (shutting down): Unable to initialize Steam.

CS 1.6 Linux server failing to start with an Unable to initialize Steam error
The first server launch fails because Steam cannot be initialized

In the log, there is a hint about what caused it:

dlopen failed trying to load: /home/cs16/.steam/sdk32/steamclient.so
with error: cannot open shared object file: No such file or directory

The server needs the steamclient.so library to talk to Steam. It looks for it in the ~/.steam/sdk32/ folder, but right after installing through SteamCMD, that folder does not exist yet - the file sits in the SteamCMD directory. The link to it is created on the first start, so just press Ctrl+C to break the session and run the server again. The second time it will come up fine. Also, you can create it manually.

Let us go over the parameters:

  • -game cstrike - specifies the mod;
  • +map de_dust2 - the map the server starts on;
  • +maxplayers 16 - the number of slots;
  • +port 27015 - the port the server will accept connections on;

If everything is in order, the console will show:

Connection to Steam servers successful.
   VAC secure mode is activated.

Now let us check the server version with the command: version. In response we will see something like:

Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
Exe build: 19:52:19 Aug  3 2020 (8684)
Successfully running a Counter-Strike 1.6 dedicated server on Linux
The server connects to Steam, enables VAC secure mode, and displays its version

Running the CS 1.6 Server in Screen

Right now the server lives exactly as long as your SSH connection is open. Close PuTTY or just lose the connection and the server dies along with the session. This is solved with the terminal session manager Screen. It starts a window that lives on the server on its own, not tied to your SSH connection. Inside it the server keeps running even after you disconnect. You can also come back to that window at any moment to look at the server console, type commands, detach again and leave.

To install it:

sudo apt install screen

Basic Screen terminal commands

Action Command
Create a new named session screen -S server_name
List all sessions screen -ls
Attach to a session screen -r server_name
Force attach screen -r -d server_name
Detach, leaving the session running Ctrl + A + D
Kill the session (stop the server) screen -S server_name -X quit

I create a session named cs16 and start the server in it right away:

screen -S cs16 ./hlds_run -game cstrike +map de_dust2 +maxplayers 16 +port 27015
Installing Screen and starting a CS 1.6 dedicated server session on Linux
Install Screen and launch HLDS inside a named cs16 session

You will end up in the server console, same as with a normal launch. But now you can "leave" from here, Ctrl + A + D, and you are back in the ordinary terminal while the server keeps running. Let us check the session is alive: screen -ls

The output should look roughly like this:

    6398.cs16    (07/21/2029 11:59:57 PM)    (Detached)
1 Socket in /run/screen/S-cs16.
Detached CS 1.6 server session displayed by the screen list command
The screen -ls command confirms that the cs16 session is running and detached

Now you can safely close PuTTY, the server will stay up. To get back into its console, connect over SSH and type screen -r cs16.

CS 1.6 Server Modules and Plugins

One last stage is left - the layer on top of plain HLDS. I will go over which modules you need, what each one does, in what order they go in and how to check that everything landed. Plus a couple of plugins as an example, so you get the mechanics.

What I Install and Why

Below is a table of the components and a diagram of how a CS 1.6 server works. High-priority modules are mandatory, nothing to discuss there. Medium priority is the admin's call, but that call is a small one.

For example, the server will run perfectly fine without Reunion, only non-Steam clients will not be able to connect. And once you let them in, without ReVoice they will not be able to talk by voice to Steam players. So one module pulls in another, and at the same time they are genuinely useful, even if they are not critical.

Same story with anticheat. The best anticheat is the Admin, but he is a living person: he makes mistakes, he sleeps, he cannot dig into the client's files. ReChecker can - it checks dll, models, skins and maps by name and MD5 hash.

Module Purpose Priority
ReHLDS Server core High
Metamod-R Module manager High
AMX Mod X Plugin manager High
ReGameDLL_CS CS 1.6 game library Medium
ReAPI Extended API for AMXX plugins Medium
Reunion Client compatibility and authentication Medium
ReVoice Voice chat compatibility Medium
ReSemiclip Players passing through each other Medium
ReChecker Checking clients for cheats and mods Low
AMXX Plugins Plugins =) Optional

Server Diagram

ReHLDS is the engine, everything else lives on top of it. Metamod-R attaches to the engine and acts as a loader: on its own it does nothing, but without it not a single module will start. Next comes AMX Mod X, which is technically also a Metamod module, but already with its own platform for plugins. And right at the bottom sit the .amxx plugins themselves.

CS 1.6 server module stack Layer diagram of a CS 1.6 server: ReHLDS engine, Metamod-R loader, ReGameDLL_CS, AMX Mod X with ReAPI, additional modules and AMXX plugins. Counter-Strike 1.6 server ReHLDS Server engine Metamod-R Module loader ReGameDLL_CS Game library AMX Mod X Plugin platform ReAPI Reunion ReVoice ReSemiclip and so on... AMXX plugins .amxx files

Installing ReHLDS and the Server Modules

Now the interesting part begins - I put the modules onto the server. Almost every step comes down to the same thing: download an archive, unpack it on your computer and drop the right files onto the server into the correct folder. And this is where WinSCP comes in handy, the one I talked about at the start.

WinSCP is a file manager with two panels. On the left is your computer, on the right is the server. Drag a file from one window into the other and it uploads. No commands, all by mouse, just like an ordinary file explorer.

You connect the same way as in PuTTY. Open WinSCP, press New Site and fill in:

  • Host name - your server's IP
  • Port - 22
  • User name - cs16
  • Password - the password of the cs16 user
WinSCP login window configured for an SFTP connection to the CS 1.6 Linux server
Enter the server IP address, SSH port, username, and password in WinSCP

Log in and you land in the home folder. The server files sit in /home/cs16/cs16srv/, and the game files specifically in /home/cs16/cs16srv/cstrike/. This is the place where I will install the modules.

WinSCP displaying the home directory of the CS 1.6 server user
After connecting, open /home/cs16/ and locate the cs16srv directory

ReHLDS - the Server Core

ReHLDS is an improved server engine.

Installing ReHLDS

Follow the links below and download the latest release. Unpack the ReHLDS archive and upload the files from the /bin/linux32/ folder into the server's root folder, /home/cs16/cs16srv/, replacing the current ones.

Copying ReHLDS Linux files into the CS 1.6 server directory with WinSCP
Copy the ReHLDS files from the linux32 folder into /home/cs16/cs16srv/

After that start the server and type the version command in the console.

Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.15.0.896-dev
Build date: 13:37:29 May 18 2026 (4419)
Build from: https://github.com/rehlds/ReHLDS/commit/1963001
Linux terminal showing the installed ReHLDS version for the CS 1.6 server
Run the server and use the version command to confirm that ReHLDS is active

If you see that the Valve build Aug 3 2020 (8684) has been replaced with ReHLDS May 18 2026 (4419), the module was installed successfully. The version number and build date may differ depending on the ReHLDS build you installed.

Creating the ReHLDS Configuration

ReHLDS does not create a separate config file on its own. Its cvars can be added straight into server.cfg, but for convenience it is better to keep them in a separate file, for example rehlds.cfg. To load the ReHLDS configuration:

  1. Go to the folder: /home/cs16/cs16srv/cstrike/
  2. Create the file: rehlds.cfg
  3. Add the ReHLDS cvars, setting the parameters to your own liking
    listipcfgfile listip.cfg
    syserror_logfile sys_error.log
    
    sv_auto_precache_sounds_in_models
    //[0/1] Automatically precache sounds attached to models. Deault: 0
    
    sv_delayed_spray_upload
    //[0/1] Upload custom sprays after entering the game instead of when connecting. It increases upload speed. Default: 0
    
    sv_echo_unknown_cmd
    //[0/1] Echo in the console when trying execute an unknown command. Default: 0
    
    sv_rcon_condebug
    //[0/1] Print rcon debug in the console. Default: 1
    
    sv_force_ent_intersection
    //[0/1] In a 3-rd party plugins used to force colliding of SOLID_SLIDEBOX entities. Default: 0
    
    sv_rehlds_force_dlmax
    //[0/1] Force a client's cl_dlmax cvar to 1024. It avoids an excessive packets fragmentation. Default: 0
    
    sv_rehlds_hull_centering
    //[0/1] Use center of hull instead of corner. Default: 0
    
    sv_rehlds_movecmdrate_max_avg
    // Max average level of 'move' cmds for ban. Default: 1800
    
    sv_rehlds_movecmdrate_avg_punish
    // Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick). Default: 5
    
    sv_rehlds_movecmdrate_max_burst
    // Max burst level of 'move' cmds for ban. Default: 5500
    
    sv_rehlds_movecmdrate_burst_punish
    // Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick). Default: 5
    
    sv_rehlds_send_mapcycle
    //[0/1] Send mapcycle.txt in serverinfo message (HLDS behavior, but it is unused on the client). Default: 0
    
    sv_rehlds_stringcmdrate_max_avg
    // Max average level of 'string' cmds for ban. Default: 250
    
    sv_rehlds_stringcmdrate_avg_punish
    // Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick). Default: 5
    
    sv_rehlds_stringcmdrate_max_burst
    // Max burst level of 'string' cmds for ban. Default: 500
    
    sv_rehlds_stringcmdrate_burst_punish
    // Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick). Default: 5
    
    sv_rehlds_userinfo_transmitted_fields
    // Userinfo fields only with these keys will be transmitted to clients via network. If not set then all fields will be transmitted (except prefixed with underscore). Each key must be prefixed by backslash, for example "\name\model\*sid\*hltv\bottomcolor\topcolor". See [wiki](https://github.com/rehlds/ReHLDS/wiki/Userinfo-keys) to collect sufficient set of keys for your server. Default: ""
    
    sv_rehlds_attachedentities_playeranimationspeed_fix
    // Fixes bug with gait animation speed increase when player has some attached entities (aiments). Can cause animation lags when cl_updaterate is low. Default: 0
    
    sv_rehlds_maxclients_from_single_ip
    // Limit number of connections at the same time from single IP address, not confuse to already connected players. Default: 5
    
    sv_rehlds_local_gametime
    //[0/1] A feature of local gametime which decrease "lags" if you run same map for a long time. Default: 0
    
    sv_rehlds_allow_large_sprays
    //[0/1] Allow larger custom logos than 64x64. Default: 1
    
    sv_use_entity_file
    // Use custom entity file for a map. Path to an entity file will be "maps/[map name].ent". 0 - use original entities. 1 - use .ent files from maps directory. 2 - use .ent files from maps directory and create new .ent file if not exist.
    
    sv_usercmd_custom_random_seed
    // When enabled server will populate an additional random seed independent of the client. Default: 0
    
    sv_net_incoming_decompression
    //[0/1] When enabled server will decompress of incoming compressed file transfer payloads. Default: 1
    
    sv_net_incoming_decompression_max_ratio
    //[0-100] Sets the max allowed ratio between compressed and uncompressed data for file transfer. (A ratio close to 90 indicates large uncompressed data with low entropy) Default: 80.0
    
    sv_net_incoming_decompression_max_size
    // [16-65536] Sets the max allowed size for decompressed file transfer data. Default: 65536 bytes
    
    sv_net_incoming_decompression_min_failures
    //[0-10] Sets the min number of decompression failures required before a player's connection is flagged for potential punishment. Default: 4
    
    sv_net_incoming_decompression_max_failures
    //[0-10] Sets the max number of decompression failures allowed within a specified time window before action is taken against the player. Default: 10
    
    sv_net_incoming_decompression_min_failuretime
    //[0.1-10.0] Sets the min time in secs within which decompression failures are tracked to determine if the player exceeds the failure thresholds. Default: 0.1
    
    sv_net_incoming_decompression_punish
    // Time in minutes for which the player will be banned for malformed/abnormal bzip2 fragments (0 - Permanent, use a negative number for a kick). Default: -1
    
    sv_tags
    // [comma-delimited string list of tags] Sets a string defining the "gametags" for this server, this is optional, but if it is set it allows users/scripts to filter in the matchmaking/server-browser interfaces based on the value. Default: ""
    
    sv_filterban
    // [-1/0/1] Set packet filtering by IP mode. -1 - All players will be rejected without any exceptions. 0 - No checks will happen. 1 - All incoming players will be checked if they're IP banned (if they have an IP filter entry), if they are, they will be kicked. Default: 1
    
    sv_rehlds_movecmd_max_ticks
    // Set maximum amount of movement commands the server is able to process from a single player in a single frame. This includes the commands itself, not packets. Default: 24
    
    sv_rehlds_movecmd_max_null_streak
    // Defines the maximum allowed consecutive movement commands with zero time duration (empty commands). 0 - disables the check. Default: 0
    
    sv_rehlds_movecmd_clamp_interp
    // [0/1] Defines whether should the server block movement commands with invalid (out of range) "ex_interp" value. Default: 1
    
    sv_rehlds_movecmdtime_samples
    // Defines the number of frames the server takes to average the client's movement speed. Higher - more accurate but slower detection, lower - vice versa. Default: 120
    
    sv_rehlds_movecmdtime_max_error
    // Defines how far a client's internal game clock can go ahead of or behind the server's clock in milliseconds. If this limit is exceeded, the server evaluates the client's game speed. Penalties are ONLY applied if the client also violates the "sv_rehlds_movecmdtime_max_scale" or "sv_rehlds_movecmdtime_min_scale" limits. Default: 300
    
    sv_rehlds_movecmdtime_max_scale
    // Defines the max client's base game speed ratio. Clients speeding the game up beyond this multiplier will receive warnings. Default: 3.0
    
    sv_rehlds_movecmdtime_min_scale
    // Defines the min client's base game speed ratio. Clients slowing the game down below this multiplier will receive warnings. Default: 0.5
    
    sv_rehlds_movecmdtime_max_warnings
    // Maximum allowed speedhack/slowmo warnings before the punishment is applied. -1 - disable detection. Default: -1
    
    sv_rehlds_movecmdtime_punish
    // Time in minutes for which the player will be banned for speedhacking/slowing (-1 - Kick, 0 - Permanent, use a negative number for a kick). Default: -1
    
    echo The ReHLDS configuration has been loaded!
  4. Save and close the rehlds.cfg file
  5. In the same place open the file /home/cs16/cs16srv/cstrike/server.cfg and add a line at the end: exec rehlds.cfg
  6. Save and close the server.cfg file
    Editing server.cfg to execute rehlds.cfg on a CS 1.6 Linux server
    Add exec rehlds.cfg at the end of server.cfg to load the ReHLDS settings

The server.cfg file is a service config file, optional but loaded automatically when the map starts. Now the ReHLDS configuration will run together with it. Restart the server and check for the following line in the console:

The ReHLDS configuration has been loaded!

Metamod-R - the Module Manager

Metamod-R is an intermediate module loader for GoldSrc engine servers. It plugs in between the server engine and the game modification, letting you load extra modules without touching the game's server library.

Installing Metamod-R

Follow the links below and download the latest release. Unpack the /addons/ folder from the archive and upload it into the server's /cstrike/ folder.

Then open /cstrike/addons/metamod/ folder, delete the metamod.dll file, since it is meant for Windows, and create a plugins.ini file. This is where the extra modules loaded through Metamod-R will be listed.

Metamod files inside the CS 1.6 server addons directory in WinSCP
Confirm that metamod_i386.so is located in cstrike/addons/metamod/

Now Metamod-R needs to be hooked in. Go to the /cstrike/ folder and open the liblist.gam file. Replace the line:

gamedll_linux "dlls/cs.so"

with

gamedll_linux "addons/metamod/metamod_i386.so"
Editing liblist.gam to load Metamod on a CS 1.6 Linux server
Set gamedll_linux to the path of the Metamod Linux library

That finishes the Metamod-R install. Restart the server and type the command in its console: meta version. After a successful install, you'll see something like this:

Metamod-r v1.3.0.149, API (5:13)
Metamod-r build: 11:31:17 Apr 23 2024
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/603a257
Linux terminal showing the installed Metamod-r version on a CS 1.6 server
Use the meta version command to confirm that Metamod-r is running

The version number and build date may differ depending on the release you installed.

AMX Mod X - the Plugin Manager

AMX Mod X is a platform for creating and running server-side plugins in Counter-Strike 1.6 and other GoldSrc games. The latest version is 1.10.0, but it still carries a Pre-release status, so it is better to install the latest stable version, AMX Mod X 1.9.0 build 5303.

Installing AMX Mod X

Follow the links below and download the two packages you need: Base Package and Counter-Strike.

AMX Mod X download page showing the Linux base package and Counter-Strike addon
Download the Linux Base Package first, followed by the Counter-Strike addon

Then upload the /addons/ folder from each archive into the server's /cstrike/ folder: FIRST from Base Package, then from Counter-Strike, agreeing to replace files. The packages have to be installed in exactly this order, as stated on the AMX Mod X download page.

Uploading the AMX Mod X addons folder to the CS 1.6 server with WinSCP
Copy the AMX Mod X addons folder into the server’s cstrike directory

Now AMX Mod X needs to be hooked into Metamod-R. Open the module list file you created earlier: /cstrike/addons/metamod/plugins.ini. Add the following line to it:

linux addons/amxmodx/dlls/amxmodx_mm_i386.so

Save the file and restart the server.

Editing Metamod plugins.ini to load AMX Mod X on Linux
Add the AMX Mod X Linux library path to Metamod’s plugins.ini file

To make sure AMX Mod X is working, type the meta list command in the server console. Expected output:

[ 1] AMX Mod X     RUN   -    amxmodx_mm_i386.so        v1.9.0.5303  ini  Start ANY
[ 2] Ham Sandwich  RUN   -    hamsandwich_amxx_i386.so  v1.9.0.5303  pl1  ANY   ANY
[ 3] CSX           RUN   -    csx_amxx_i386.so          v1.9.0.5303  pl1  ANY   ANY
Metamod plugin list showing AMX Mod X running on a CS 1.6 Linux server
Run meta list to confirm that AMX Mod X and its modules are active

The sign of a successful install is that the AMX Mod X module has the RUN status. The version number and the list of extra modules may differ.

ReGameDLL_CS - the CS 1.6 Game Library

ReGameDLL_CS is a reworked version of the original Counter-Strike 1.6 game library, which handles the game logic, the mp_* cvars and part of the sv_* ones. It improves server stability, fixes bugs, and adds new settings and options for plugins and modifications.

Installing ReGameDLL_CS

Follow the links below and download the latest release.

Copy the contents of the /cstrike/ folder from the archive into the server's /cstrike/ folder, confirming the file replacement.

Copying the ReGameDLL cstrike folder to the CS 1.6 server with WinSCP
Copy the ReGameDLL cstrike folder into /home/cs16/cs16srv/

A file named game.cfg will appear in the /cstrike/ folder; this is the game server's primary configuration file. It defines the values for console variables (cvars) that affect gameplay, game rules, and server behavior. Each cvar comes with a description, so you can set them up to your own liking.

Be careful with duplicate commands: a command repeated in server.cfg will override the ReGameDLL_CS setting, because game.cfg is loaded earlier. The current config loading order is: game.cfg -> amxx.cfg -> server.cfg -> rehlds.cfg.

Restart the server and type the command in its console: game version. A successful install looks like this:

ReGameDLL version: 5.30.0.814-dev
Build date: 13:48:16 May 18 2026
Build from: https://github.com/rehlds/ReGameDLL_CS/commit/781a68a
Linux terminal showing the installed ReGameDLL version on a CS 1.6 server
Run game version to confirm that ReGameDLL is installed and active

ReAPI - Extended API for AMXX Plugins

ReAPI is a module for AMX Mod X that provides an extended API for interacting with the Counter-Strike 1.6 server. It works together with ReHLDS and ReGameDLL_CS, letting plugins use extra functions, hooks and events that are not available in plain AMX Mod X.

Installing ReAPI

Follow the links below and download the latest release.

Then copy the /addons/ folder from the archive into the server's /cstrike/ folder, merging it with the existing folder.

Copying the ReAPI addons folder to the CS 1.6 server with WinSCP
Copy the ReAPI addons folder into the server’s cstrike directory

Open the file: /cstrike/addons/amxmodx/configs/modules.ini and add on a new line: reapi.

Editing AMX Mod X modules.ini to enable ReAPI on a CS 1.6 server
Add reapi to modules.ini to load the ReAPI module

Restart the server and type the command in its console: amxx modules. On success, you'll see output like this:

ReAPI   5.29.0.358   Asmodai & s1lent   running
AMX Mod X module list showing ReAPI running on a CS 1.6 Linux server
Run amxx modules and confirm that ReAPI has the running status

Optional: in the /cstrike/addons/amxmodx/modules/ folder you can delete the reapi_amxx.dll file, since it is meant for Windows.

ReUnion - Connecting non-Steam Clients

ReUnion is a module for Metamod-R that lets non-Steam clients on protocols 47 and 48 connect to a ReHLDS-based server.

Installing ReUnion

Follow the links below and download the release you need.

Then copy the /addons/ folder and the reunion.cfg file from the archive into the server's /cstrike/ folder, merging them with the existing files.

Copying the Reunion addons folder and configuration file to the CS 1.6 server with WinSCP
Copy the addons folder and reunion.cfg into the server’s cstrike directory.

Open the Metamod-R module list file: addons/metamod/plugins.ini. Add the following line right at the top and save the file:

linux addons/reunion/reunion_mm_i386.so
Editing Metamod plugins.ini to load Reunion on a CS 1.6 Linux server
Add the Reunion Linux library path to Metamod’s plugins.ini file.

Mandatory! Open the /cstrike/reunion.cfg file, find the SteamIdHashSalt parameter and set a random string at least 32 characters long, using only latin letters and digits. For example:

SteamIdHashSalt = "7Qm9X25PkL5vN8pR4tY6cD1fH3jS0wB7zA"

If the parameter is not set or the string is too short, ReUnion will not load and will get a fail load status.

Optional: in the /cstrike/addons/reunion/ folder you can delete the reunion_mm.dll file, since it is meant for Windows.

Restart the server and type the command in its console: meta list. The output should look like this:

Reunion   RUN   reunion_mm_i386.so   v0.2.0.34	ini  Start Never
Metamod plugin list showing Reunion running on a CS 1.6 Linux server
Run meta list and confirm that Reunion has the RUN status.

Your version number may differ.

ReVoice - Voice Chat

ReVoice is a module for Metamod-R that provides voice communication between Steam and non-Steam clients.

Installing ReVoice

Follow the links below and download the latest release.

In the server's /cstrike/addons/ folder create a /revoice/ folder and upload the revoice_mm_i386.so and revoice.cfg files from the downloaded archive into it.

Copying ReVoice files to the CS 1.6 server addons directory with WinSCP
Upload the ReVoice library and configuration file into cstrike/addons/revoice/.

Then open the Metamod-R module list: /cstrike/addons/metamod/plugins.ini. Add ReVoice right after ReUnion, since it needs the ReUnion API to work:

linux addons/revoice/revoice_mm_i386.so
Editing Metamod plugins.ini to load ReVoice on a CS 1.6 Linux server
Add the ReVoice Linux library path to Metamod’s plugins.ini file.

Save the file, restart the server and type the command in its console: meta list.You'll see something like this:

Revoice   RUN   -    revoice_mm_i386.so   v0.1.0.34   ini   Start Never
Metamod plugin list showing ReVoice running on a CS 1.6 Linux server
Run meta list and confirm that ReVoice has the RUN status.

Your version number may differ.

ReSemiclip - Passing Through Each Other

ReSemiclip is a module for Metamod-R that lets players pass through each other.

Installing ReSemiclip

Follow the links below and download the latest release.

Copy the /addons/ folder from the archive into the server's /cstrike/ folder.

Then open the Metamod-R module list: /cstrike/addons/metamod/plugins.ini and add the following line to the end of the list:

linux addons/resemiclip/resemiclip_mm_i386.so
Editing Metamod plugins.ini to load ReSemiclip on a CS 1.6 Linux server
Add the ReSemiclip Linux library path to Metamod’s plugins.ini file.

Save the file, restart the server and type the command in its console: meta list. The result should look like this:

ReSemiclip   RUN   resemiclip_mm_i386.so   v2.4.3   ini   Chlvl   ANY
Metamod plugin list showing ReSemiclip running on a CS 1.6 Linux server
Run meta list and confirm that ReSemiclip has the RUN status.

The plugin's settings are in the file: /cstrike/addons/resemiclip/config.ini. The resemiclip_mm.dll file can be deleted, since it is meant for Windows.

Installing AMX Mod X Plugins

I have put the server's main stack in place - the modules. But they are more about the technical side, for players there is almost no visible change in them. All the interesting stuff - the admin menu, the ban system, statistics, sounds, any HUD, any feature, and a lot more - that is AMX Mod X plugins.

For plugins to work, the server must have Metamod-R/P and AMX Mod X installed. Some plugins also need extra modules, libraries and even other plugins.

What Is an AMX Mod X Plugin?

An AMXX plugin is a script written in the Pawn language and compiled into the .amxx format, which is run by the AMX Mod X platform. The plugin's source code is stored in a file with the .sma extension, where you can study or edit it, but the server cannot run those files directly. On top of that, plugins can have extra files for settings and features, for example sounds, sprites, models and so on, which need to be uploaded into the matching server folders. Such files are called dependencies, and the info about them is usually given by the plugin's author in the description or the install instructions.

How to Install an AMX Mod X Plugin?

The spoiler version is three steps: download, upload to the server and add to the load list.

  1. Download the plugin archive and look at what is inside. At the very least the archive should contain one file, the .sma source, most often it will be two files, the source and the .amxx plugin itself, less often the source with extra files.
  2. Here is where the main possible plugin files go:
    • The compiled .amxx file goes into /cstrike/addons/amxmodx/plugins/ folder
    • The .sma source file goes into /cstrike/addons/amxmodx/scripting/ folder
    • The .txt language pack goes into /cstrike/addons/amxmodx/data/lang/ folder
    • The .ini init file goes into /cstrike/addons/amxmodx/configs/ folder
    • The .wav sound file goes into /cstrike/sound/ folder
    • The .mdl model file goes into /cstrike/models/ folder
    There can be plugins with folders of sounds or models, which should also go into the right server folders. As a rule such "heavy" plugins come with install instructions.
  3. The third step is to add the plugin to the load list, which is in the file: addons/amxmodx/configs/plugins.ini. Open the file and add at the end the full name of the file you uploaded into the folder: /cstrike/addons/amxmodx/plugins/, for example:
    test_plugin.amxx
    Save the file and restart the server, or you can just change the map, that is enough to activate the plugin. Then in the server console call the list of loaded plugins with the command: amxx plugins. On a successful load the plugin will show up in the list with the running status.
    Adding a custom AMX Mod X plugin to the plugins.ini file
    Add the plugin filename at the end of plugins.ini to enable it.

If you need to remove a plugin, you do it all in reverse, and if you just need to disable it, it is enough to put a semicolon in front of the name, then the plugin stays on disk but will not load. Handy when something needs to be switched off for a while without deleting it.

Installing the Ping Faker Plugin

Let us go through a real example and install a popular, simple plugin - Ping Faker. It lets you fake the ping value a player shows in the scoreboard. You can set it up so everyone shows the same ping, or so the fake only kicks in for players with a certain flag.

The plugin has three files that go into place:

  • The fakepings.ini init file goes into /cstrike/addons/amxmodx/configs/ folder
  • The pingfaker.amxx file goes into /cstrike/addons/amxmodx/plugins/ folder
  • The pingfaker.sma source file goes into /cstrike/addons/amxmodx/scripting/ folder

Open the file: /cstrike/addons/amxmodx/configs/plugins.ini and add the full plugin file name at the bottom:

pingfaker.amxx

Restart the server and type the command in its console: amx_plugins. The output tells you the plugin is working.

Ping Faker   1.3   MeRcyLeZZ   pingfaker.amxx   running
AMX Mod X plugin list showing Ping Faker running on a CS 1.6 server
Run amx_plugins to confirm that the installed plugin is running.

Every other plugin installs the same way: drop the files into their folders, add one line to plugins.ini, restart the server or map and check the console. At first you will probably get the names mixed up - the plugins folder and the plugins.ini file, the configs folder and the config file, metamod and amxmodx, and so on. That is normal. Poke around for a bit, install a couple of plugins by hand, and it all falls into place.

Why It Is Better to Compile AMX Mod X Plugins Yourself

A ready-made .amxx - you download it, drop it in the folder, nothing to compile, all simple and at the same time it can hurt a lot. Let me tell a story from experience.

Sometimes the server crashes with no logic to it. For a couple of days it holds 32/32 without a single failure, then it starts going down ten times a day. The only clue is that it crashes more often on a full server, but even that is not a rule: sometimes it drops on a full one, sometimes it runs a whole day under the same load. You turn the plugins off one by one and the picture does not change, sometimes it works, sometimes it does not. No statistics, no pattern.

It was solved the hard way: I wiped all the ready-made plugins and rebuilt them from source, with my own compiler. Since then, silence.

The reason, of course, is versions. A ready-made .amxx from the net is built with who-knows-what compiler, for an unknown version or build of AMX Mod X and an unknown ReAPI. A plugin built for one combination may load on another, seem to work, and then drop the server under load or on some specific event. Such crashes are floating and almost impossible to catch - that is exactly why they are so hard to track down by turning plugins off.

Never install ready-made .amxx from the net. Take the .sma source and compile it yourself - with your version of AMX Mod X, your include files. Downloaded an archive and there is a single .amxx file inside - delete it and forget it.

How to Compile SMA to AMXX Plugins

There are two ways to compile a .sma file: online or locally.

Online Compilation

For online compilation you can use the official AMX Mod X service: https://www.amxmodx.org/webcompiler.cgi

For me personally this way does not look like the best one. The page has only a form to upload the source, a compile button and an empty area for the result. Meanwhile there is no information about the compiler itself: you do not know which version of AMX Mod X is used, which libraries are linked in, and for which version the plugin will be built.

For example, if the server runs on AMX Mod X 1.8 while the compiler builds plugins for AMX Mod X 1.9 or some other version, this can lead to the plugin failing to load, working incorrectly or crashing the server outright. Maybe I missed something, but I did not find the needed info on the page.

Local Compilation

To compile plugins locally (.sma -> .amxx) on Windows, the compile.exe script is used; it is included with AMX Mod X alongside associated files (such as amxxpc.exe and the include folder). In classic versions, it is located in the /cstrike/addons/amxmodx/scripting/ directory.

Compilation works by Drag & Drop:

  1. Take the .sma file.
  2. Drag and drop it onto compile.exe.
  3. Wait for the compilation to finish.

After that a command-line window opens with a report on the compilation process, and next to compile.exe a /compiled/ folder appears automatically, with the ready .amxx file inside.

The same can be done by hand through the command line. Copy the source into the folder where compile.exe is, then open CMD in that folder and run the command: compile file.sma. When the compilation finishes, the ready .amxx file appears in the compiled folder.

Possible Compilation Errors

  • Cannot read from file. Usually means one or more .inc files needed for compilation are missing.
  • Undefined symbol. Most often comes up if a function from a third-party API is used, a needed #include is missing or library versions do not match.
  • Symbol already defined. The same variable, constant or function is declared more than once.
  • Tag mismatch. A Pawn data-type mismatch error. Usually comes up from wrong handling of Float types, enums or tags used in third-party APIs.

Conclusion

We have a working CS 1.6 server: a rented VPS, the ReHLDS engine instead of the outdated HLDS, a set of modules and a live example with a plugin. The server comes up inside screen and stays online around the clock, you can connect to it by IP and play.

If you went through the guide from start to finish, what you have on your hands is not just a "bare server" but an understanding of how it is put together: what each module does, in what order everything loads, where to put the files and how to check that a component landed.

A lot was left outside the scope of the guide, and two things are worth mentioning separately, because sooner or later you will run into them.

FastDL. The moment you install plugins with custom sounds, models or sprites, players start downloading those files when they join the server - through the game port, slowly, at a few dozen kilobytes per second. On heavy content a person may simply not wait for the download and leave. This is solved with FastDL - a separate http server that files download from many times faster. Remember how at the very start I set aside 2 GB of RAM and mentioned an http server? This is what that was for.

Administration and access rights. In the guide I set up the infrastructure but never touched the question of "how to make yourself an admin and manage the server". The classic route is the users.ini file and the AMX Mod X access flags. It works, but by today's standards it is a manual and clunky way. These days almost everyone goes through web admin panels: the ban system, statistics, managing players and settings - all through a browser instead of editing configs over SSH. This is a big topic with its own install process and its own pitfalls, and it deserves a separate write-up.

CS 1.6 Server FAQ

A glowing 'FAQ' displayed on a futuristic holographic panel, surrounded by floating question marks and digital circuitry within a cosmic, sci-fi environment
Do I need a Steam account or a paid license to run a CS 1.6 server?

No. The server files are downloaded through SteamCMD anonymously, with login anonymous. You do not need to own the game or log in with a real account to host a server.

Can players with a non-Steam (pirated) client connect to my server?

Not by default. A clean ReHLDS server only accepts Steam clients. To let non-Steam clients in you install the ReUnion module, and for them to talk by voice with Steam players you also need ReVoice.

Why build 8684 and not the latest one?

Because ReHLDS is only compatible with build 8684 and below. The current build 10211, released after the Anniversary Update, changed the engine internals and is not a valid base for ReHLDS. That is why I pull the older build from the steam_legacy branch.

My plugin does not load or crashes the server. What is the first thing to check?

Two things. First, dependencies: many modern plugins need ReAPI (and through it ReGameDLL_CS) or specific modules - check the plugin's page. Second, and most important, do not use ready-made .amxx files from the net. Compile the .sma source yourself with your own version of AMX Mod X. Version mismatches are the number one cause of random, hard-to-catch crashes.

How many players and how much hardware do I really need?

One CPU core per server, since GoldSrc is single-threaded and only cares about the clock speed of a single core (3+ GHz is comfortable). 1 GB of RAM is enough for a plain server, 2 GB if you add an http server for FastDL and a database. That easily covers a full 32-slot server.

Continue Reading

FPS performance meter showing 100 FPS, 120 FPS, and 200+ FPS in Counter-Strike 1.6, symbolizing different frame rate levels and smooth gameplay
CS 1.6 FPS Boost – Best Settings for Stable FPS

CS 1.6 FPS Boost – Best Settings for Stable FPS How to achieve the smoothest and most consistent FPS in CS 1.6 – without falling for outdated myths Table of Contents Introduction Many players search for ways to increase FPS in Counter-Strike 1.6 or look for a CS 1.6 FPS

Read More
Leave a Reply

Your email address will not be published. Required fields are marked *