killinuxfloor – Killing Floor 2 Classic Server on Linux

Update: killinuxfloor has been updated to install Killing Floor 2 Classic. Please read Playing Killing Floor 2 Classic for more info.


Why, it’s the easiest way to install and manage Killing Floor 2 on Linux. All you need is a fresh, up-to-date install of CentOS 7.


  • One-command installation of the Killing Floor 2 Linux Server
  • One-command uninstallation as well
  • Automatic backup of previous config during install and uninstall
  • Full support for firewalld and Security-Enhanced Linux
  • systemd integration to manage your server as a standard Linux service
  • sudo integration for proper rights delegation
  • Separated config for settings you actually change, getting thousands of unchanged defaults out of the way
  • Support for installing workshop maps and mutators
  • Automatically generated and updated map cycle for workshop maps
  • User-defined map cycles, too
  • Bundled, integrated auto-kick bot (thanks Sinewyk!)
  • killinuxfloor command to manage all aspects of your KF2 server
  • Corrected mutator management on webadmin, offering your previous parameters during manual map change
  • Wave counter instead of time counter in webadmin during Endless games (thanks zachjd!)


Just grab the latest release:

sudo yum install -y git
git clone
cd killinuxfloor

Then there’s really not that much to do here:

sudo ./

Have doubts? Well, see it for youself.

Then you can manage your installation of killinuxfloor wih the steam user:

sudo -iu steam

Once finished, simply exit from this user’s session with exit.


How about uninstall?

sudo ./

No, I mean it.

Tested VPS Providers

These providers have been tested with their default CentOS 7 images, and are known to work flawlessly with killinuxfloor out of the box. You should be up and running within 15 minutes, of which 13 minutes will be Steam downloading KF2.

DigitalOcean $5 25 GB 1 GB 1
Vultr $5 25 GB 1 GB 1

If you find my work helpful, please use my affiliate links in the table above for signing up, thank you 🙂

Tips & Tricks


Let’s walk you through the most important options:

  • Current game / Change map: use this to switch between maps. Make sure to click on the Change game button on the bottom! As mentioned earlier, this triggers a webadmin restart, so be patient.
  • Access Policy / Passwords / Game password: here you can set a game password so that you can play privately with your teammates.
  • Settings / General / Game: change Game difficulty and Game length here. Note: after changing these, you also need to perform a Change map action for these to take effect.
  • Settings / Map cycles: select the active map cycle here (Make active button). Don’t edit map cycles here though, use My-Cycles.csv for permanent changes.



We’ll use KF-Minecraft_Defense_Day as an example. You need 2 things:

  • ID
  • Name

The ID can be found in the Workshop page URL, after the ?id= part. In this example, it’s 1098009749.

The name is a bit tricky, because often it’s the same as on the Workshop page. But sometimes it isn’t. The easiest way to find it out is by subscribing to the map, then checking out the downloaded file’s name. You can find them under %ProgramFiles(x86)\%Steam\steamapps\workshopcontent\232090. In this case, if you go to %ProgramFiles(x86)\%Steam\steamapps\workshopcontent\232090\1098009749\BrewedPC, you’ll see the filename: KF-Minecraft_Defense_Day_Fixed.kfm. So the actual name you need is KF-Minecraft_Defense_Day_Fixed.

Now all you need to do is add the following line to ~/Config/My-Maps.csv:


Then stop, regenerate the config, and start:

killinuxfloor stop && killinuxfloor config && killinuxfloor start

The server will soon start to download the maps you added. You can check the status, too:

killinuxfloor status workshop

It’s going to take a few minutes if you added several big maps. Once all downloads finish, the server restarts automatically once more, then you’re ready to go.

Once started up, open webadmin and open the Change game menu, select KF-Minecraft_Defense_Day, then click the Change game button on the bottom. This actually restarts the webadmin, but after a minute or so the KF2 server should be running on your shiny new map. When players who don’t have the map connect, they should see a screen similar to this:

Then you’re ready to play!


Mutators are pretty similar, but even simpler. All you need is the ID. Enter that on a new line in ~/Config/My-Mutators.csv, apply the config, done.

Then you can load mutators the usual way, by adding URL variables. Separate multiple mutators with commas.

If you want these parameters to be loaded automatically when the server starts, add them to ~/Config/My-Startup.conf.


Updating the KF2 server should be as simple as:

killinuxfloor stop
killinuxfloor update
killinuxfloor reset
killinuxfloor config
killinuxfloor start

If you want to update to a preview update, replace killinuxfloor update with:

killinuxfloor update preview

Where preview is the branch name. It may change, but AFAIK it’s been always preview in the past.



In case something gets messed up, like most players can download and play the map but one just can’t, instruct the problematic player to close the game and delete the %HOMEPATH%\Documents\My Games\KillingFloor2\KFGame\Cache folder to make KF2 download the map again.

They can also try to subscribe manually, or if already subscribed, unsubscribe, delete the map file under %ProgramFiles(x86)%\Steam\steamapps\workshopcontent\232090\<map id>, then retry.


If you have a broken map, you can try to nuke it. In the case of KF-Minecraft_Defense_Day:

killinuxfloor purge 1098009749

Now you can try to add it back to ~/Config/My-Maps.csv, re-apply with killinuxfloor config, restart the server, and see if it helps.

The nuclear option is, of course, to do a reset:

killinuxfloor stop
killinuxfloor reset
killinuxfloor config
killinuxfloor start

Note: make sure you don’t use a workshop map in ~/Config/My-Startup.conf after this. reset, amongst other things, removes all downloaded Workshop maps, so if you have a workshop map set as a startup map, KF2 will be unable to find it, and will keep crashing infinitely.


How do I play on my fresh new server?

For guidance, please refer to: Playing on the Noobient Killing Floor 2 Servers. Substitute the addresses with your IP, and you’re all set.

Why is my server deranked when I load whitelisted mutators?

It’s a Killing Floor 2 bug. Please copy C:\Program Files (x86)\Steam\steamapps\common\killingfloor2\Binaries\Win64\balance_tweaks.bin from your desktop PC to /home/steam/Steam/KF2Server/Binaries/Win64/balance_tweaks.bin on the server, and it should be ranked again.

Where’s webadmin?

Webadmin is accessible via http://YOUR_IP:8080/. Make sure you set AdminPassword in My-LinuxServer-KFGame.ini, otherwise it won’t let you in.

Why isn’t auto-kick working?

The auto-kick bot relies on webadmin, so if you don’t set AdminPassword, or block/disable webadmin in any other way, auto-kick won’t work either.

Webadmin still goes down randomly, what’s going on?

Webadmin restarts occasionally, particularly during map changes, be it initiated by the admin or by finishing a match. During this period, you may get timeouts, but it should come back live within a minute or so.

In the rare event of a webadmin crash, it won’t come back live. In this case, you can still play games on the server though. You decide if you wait until the next match for webadmin to restart on its own, or you can restart the KF2 server altogether manually with killinuxfloor restart.

I hate typing killinuxfloor all the time, why is it so long?

Don’t worry! For this very reason, there’s a nice, short alias: klf.

How do I back up my settings?

Just run killinuxfloor backup.

Should I edit the Config files, or the Config/Internal files? It’s confusing!

Yes, at first sight it really is. Thanks to Tripwire, and probably to Unreal Engine for exposing all friggin’ options to users, making it next to impossible to keep your changes in one place and well-organized.

Traditionally, you’re expected to find the options you want to change, among the thousands that are available. When you upgrade to a new KF2 patch, you either collect your changes scattered over in those huge files, then change them again in the new files (so much time), or just carry over your old files, risking the loss of any change in defaults, or the addition of new settings that Tripwire may have done. I find both options horrible.

With killinuxfloor it’s different. You only list the options you want to change from the defaults. Then killinuxfloor applies these settings to the internal config files. This way you always get the fresh internal config files after KF2 patches, and it’s extremely easy to carry over your config to a different server – you just copy your Config folder, and that’s it. All your customizations, workshop maps, map cycles, mutators, auto-kick settings are preserved.

TL;DR You should never edit Config/Internal files. Use the files under Config, then run the killinuxfloor config command to have your settings applied to the internal config files.

Further Reading

For step-by-step guides please refer to:

Deprecated Docs