killinuxfloor – Killing Floor 2 Classic / Retail Server on Linux

Update: killinuxfloor has been updated to support both Killing Floor 2 Retail and 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 Fedora Server 35.


  • 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 (klf) 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!)


First, fire up a Fedora Server 35 instance at your favorite VPS provider. If in doubt, see Tested VPS Providers

Once up and running, log in via SSH, and grab the latest release of killinuxfloor:

sudo yum install -y git
git clone
cd killinuxfloor

Then there’s really not that much to do here. You can install the Retail version with:

sudo ./

And the Classic version with:

sudo ./ --classic

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 Fedora Server 35 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:

klf apply

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

klf 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:

klf stop
klf update
klf reset
klf apply

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

klf 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:

klf purge 1098009749

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

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

klf reset
klf apply

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 klf restart.

How do I back up my settings?

Just run klf 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 klf apply command to have your settings applied to the internal config files.

Further Reading

For step-by-step guides please refer to:

Deprecated Docs