How to Host a Core Keeper Dedicated Server on Linux
A Core Keeper dedicated server keeps one underground world available when the player who created it is offline. Pugstorm publishes a free native Linux server, so you do not need Wine or a copy of the game on the host. The awkward parts are less obvious: the headless build still expects a virtual display, direct connections use UDP, and saves belong in a data directory that SteamCMD must never replace.
Skip the command line with managed Core Keeper hosting, PC cross-play and save accessWhat you need
Use an x86-64 Linux machine with a stable connection and at least a few gigabytes of free memory. A small private world is comfortable with about 3 GB allocated to the game, while a busy eight-player world benefits from more room. Leave additional memory for Linux, SteamCMD and the virtual display.
The official server is Steam app 1963720. It supports up to eight players and can produce a Steam relay Game ID. Supplying a public port also enables direct connections, which lets the supported PC storefront versions share the server. This is PC cross-play between Steam, Epic Games Store, Microsoft Store and GOG, not cross-play between PC and consoles.
1. Install SteamCMD and the headless dependencies
Core Keeper ships a native 64-bit server, but SteamCMD itself still needs the i386 packages. The game also touches a graphical code path during world generation, so install Xvfb and libXi even on a machine with no desktop:
sudo dpkg --add-architecture i386
sudo add-apt-repository multiverse
sudo apt-get update
sudo apt-get install -y steamcmd xvfb libxi6
sudo adduser --disabled-password --gecos "" corekeeper
sudo install -d -o corekeeper -g corekeeper /srv/corekeeper/runtime /srv/corekeeper/data
Run the service as its own unprivileged user. That keeps the server files away from root's home directory and makes file ownership predictable when you later restore a world.
2. Download the official Linux server
Anonymous Steam login is enough. Force the 64-bit Linux platform so SteamCMD cannot choose an unsuitable depot:
sudo -u corekeeper /usr/games/steamcmd +@sSteamCmdForcePlatformType linux +@sSteamCmdForcePlatformBitness 64 +force_install_dir /srv/corekeeper/runtime +login anonymous +app_update 1963720 validate +quit
The package includes CoreKeeperServer and a Linux launch script. Keep everything SteamCMD downloads under runtime. Your world, server configuration and player-independent world state belong under data.
3. Start once with an explicit data path
The bundled Linux launcher handles the virtual X display. Start with a separate data directory and an explicit world index:
cd /srv/corekeeper/runtime
sudo -u corekeeper ./_launch.sh -datapath /srv/corekeeper/data -world 0 -worldname "Copper Camp" -worldmode Normal -maxplayers 8 -password pick-a-password
Without a port, the server uses Steam's relay path and writes a join code to GameID.txt. Steam players can use that code from Join Game. If everyone is on Steam and the relay works for your group, this is the simplest network mode.
Stop the first run cleanly before changing files. Pugstorm's own dedicated-server instructions use q to quit the interactive launcher. Under a service manager, send TERM to the launcher and give its child process time to finish writing the world.
4. Enable direct connections and PC cross-play
For direct address joins, add -ip 0.0.0.0 -port 27015 to the launch arguments and allow that port over UDP:
sudo ufw allow 27015/udp
ss -Hlun 'sport = :27015'
If the host is behind a home router, forward UDP 27015 to the Linux machine's current private address. Do not add a TCP rule just because many generic port checkers only understand TCP. Core Keeper's direct game traffic is UDP, so a green TCP test says nothing about whether players can join.
The port setting is a command-line-only switch in the server package. Putting it in ServerConfig.json does not enable direct connections. Keep it in the launch script or systemd unit, and keep the firewall and router on the same number.
5. Choose settings deliberately
The useful startup controls are the world index and name, player limit, password and season. Keep a password to one token without spaces and no more than 28 characters, since that is the most portable form across current clients. Core Keeper is designed around groups of up to eight players.
Season can follow the calendar or be pinned to a named event. World mode is different: Normal and Hard affect a world's creation, so do not treat a mode change like an ordinary restart setting after the world already exists. The same applies to the world seed. Make those choices before the first real session.
6. Move an existing Core Keeper world
Characters and worlds are separate in Core Keeper. You move the world to the server, while each player keeps their own character on their PC. On Windows, client worlds live below:
%USERPROFILE%AppDataLocalLowPugstormCore KeeperSteam<Steam ID>worlds
On Linux, the equivalent client path is:
~/.config/unity3d/Pugstorm/Core Keeper/Steam/<Steam ID>/worlds
The dedicated server writes worlds below /srv/corekeeper/data/worlds when launched with the data path above. Stop both the old host session and the dedicated server, back up both sides, then copy the complete files for the chosen world index. Do not copy a file while either game process is running, and do not mix files from two different snapshots of the same world.
Fix ownership after an upload, start the matching -world index, and verify the base, inventory chests, boss progress and map before deleting the source copy:
sudo chown -R corekeeper:corekeeper /srv/corekeeper/data
sudo systemctl start corekeeper.service
7. Run it under systemd
Put your tested command in /srv/corekeeper/run-server.sh, including the data path, world index, address and UDP port. Then use a small unit:
[Unit]
Description=Core Keeper dedicated server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=corekeeper
Group=corekeeper
WorkingDirectory=/srv/corekeeper/runtime
ExecStart=/srv/corekeeper/run-server.sh
Restart=on-failure
RestartSec=10
KillMode=control-group
TimeoutStopSec=45
[Install]
WantedBy=multi-user.target
KillMode=control-group matters because the Linux launcher manages Xvfb and the game as child processes. Stopping only the shell can leave one of them behind. Enable the unit and follow its log:
sudo systemctl daemon-reload
sudo systemctl enable --now corekeeper.service
sudo journalctl -u corekeeper.service -f
A generated Game ID proves the online session started. In direct mode, also confirm the UDP listener and make one real join from outside the host's network. A local listener alone cannot prove that the router or provider firewall accepts public traffic.
8. Update without risking the world
Stop the service before asking SteamCMD to validate the runtime. The data path stays outside the install directory, so an update can replace binaries without replacing your world:
sudo systemctl stop corekeeper.service
sudo -u corekeeper /usr/games/steamcmd +force_install_dir /srv/corekeeper/runtime +login anonymous +app_update 1963720 validate +quit
sudo systemctl start corekeeper.service
Update the players and server together. A version mismatch is one of the easiest ways to turn a healthy Game ID into a failed join. Read the fresh log and test one connection after every update rather than assuming a running process is ready.
9. Back up the part Steam cannot restore
Back up the complete /srv/corekeeper/data tree while the service is stopped, and keep at least one copy on another machine. SteamCMD can recreate runtime files. It cannot recreate a world, its exploration state or the server configuration. Take an extra snapshot before a game update, a world transfer or any experiment with mods.
Managed Core Keeper hosting
GHosting's Core Keeper hosting installs the official native Linux server, keeps its data outside the Steam runtime, allocates the public UDP port, enables PC storefront cross-play and exposes world files through the panel and SFTP. Settings cover the join password, player limit and seasonal event, and plans are prepaid with no automatic renewal.
For the developer's current save locations and basic dedicated-server flow, see the Core Keeper FAQ maintained by Pugstorm.
GHosting is an independent hosting provider and is not affiliated with or endorsed by Pugstorm or Fireshine Games.