RE:NODE

Guides15 min read

DayZ server setup, mods and the central economy

Running a DayZ server end to end: serverDZ.cfg, ports, mods and .bikey files, types.xml and the loot economy, restarts, persistence and the errors people hit.

Updated

13 readers

DayZ has two systems that new administrators meet in the wrong order: mods, which everybody starts with, and the central economy, which decides whether the map contains anything worth finding. A perfectly modded server with an untouched economy is an empty one. Getting both right needs roughly 6 GB of memory for a 40-slot server, three UDP ports, a Steam account that owns the game, and a willingness to edit XML and restart. This guide covers the whole path: install, serverDZ.cfg, ports, mods and their keys, the economy files, administration, and the failures that fill support tickets.

What you are actually running#

The DayZ server is a separate Steam application - DayZ Server, app id 223350 - and unlike most games it is not available to an anonymous SteamCMD login. You need a Steam account that owns DayZ, and SteamCMD will ask it for Steam Guard confirmation the first time. Hosts that install DayZ for you are doing so with your credentials for exactly this reason. Use a spare account that owns the game and nothing else valuable; a game-server install has no business holding the account you buy things with.

What the server gives you out of the box is thinner than people expect:

  • One mission folder under mpmissions, which is both the map and the economy. Chernarus is dayzOffline.chernarusplus, Livonia is dayzOffline.enoch, and the later maps have their own folders - read the directory rather than guessing the name.
  • A config file, serverDZ.cfg, holding around forty settings.
  • BattlEye, which handles anti-cheat, bans and remote administration.
  • No in-game admin menu at all. There is no spectate, no teleport, no item spawning, no player list. Every administrative tool you have ever seen on a DayZ server is a mod or an external RCon client.
  • A persistent world stored separately from the mission files, so you can edit the economy without wiping player bases - most of the time.

The mission folder is the important idea. When you edit loot, you are editing files inside mpmissions/dayzOffline.chernarusplus/, and those files are read at start-up. Nothing you change there takes effect until the server restarts, which is why DayZ administration has a rhythm of edit, restart, look, edit again.

Requirements and resource usage#

DayZ is a heavy server for its player count. It simulates infected, animals, vehicles and an item economy across a 225 square kilometre map, and it leans hard on one thread.

PlayersRAMCPUNotes
10-20, vanilla4-6 GB2 coresComfortable; good for a private group
30-40, vanilla6-8 GB2-3 coresThe common public server
40-60, vanilla8-10 GB3+ coresServer FPS becomes the limit, not memory
30-50, heavily modded10-12 GB3+ coresExpansion-scale mod lists, traders, AI
  • CPU decides how a full server feels. The metric to watch is server FPS, logged if you set logAverageFps. Healthy is above 30; below about 15 players start reporting rubber-banding, desynced loot and doors that open twice.
  • Memory grows with the mod list far faster than with the player count. A vanilla 60-slot server uses less than a 30-slot server carrying a large Expansion build.
  • Disk: the server install is roughly 3 GB, and each mod adds its own. A mod list of twenty is easily another 10-15 GB, which is why DayZ plans start with more disk than a game this old suggests.
  • Network is modest, a few hundred kilobytes per second per player, but it is UDP and latency-sensitive. The general rule in CPU vs RAM for game servers applies here more than in most games: people buy memory when the thing that is actually saturated is one core.

DayZ plans on RE:NODE start at 6 GB with three port allocations, which is the right shape for a 40-slot vanilla or lightly modded server. A big Expansion server wants the top of the ladder.

Installing the server and the launch line#

On your own machine, SteamCMD with a real login:

bash
$ steamcmd +force_install_dir /home/dayz/server +login <steam_account> \    +app_update 223350 validate +quit

The server is then started with a long parameter line. These are the parameters that matter, and on a panel they appear as fields on the Startup tab rather than as text you type:

ParameterPurpose
-config=serverDZ.cfgThe config file to read
-port=2302Game port
-profiles=profilesWhere logs, BattlEye and crash dumps are written
-mod=@CF;@Mod2Client-and-server mods, semicolon separated, order matters
-servermod=@AdminToolServer-only mods that clients must not have
-doLogsWrite the script and error logs
-adminLogWrite the .ADM player activity log
-netLogNetwork traffic logging, useful once, noisy forever
-freezeCheckDump a log if the server hangs
-cpuCount=2How many cores the engine is allowed to use

Put -profiles somewhere you can reach over SFTP or the file manager, because that folder is where every answer to "why did it do that" lives. If you are new to SteamCMD, app ids and the difference between validate and a plain update, SteamCMD explained covers it.

serverDZ.cfg, key by key#

The file is a list of key = value; lines, semicolons included, with a mission block at the end. The values below are the ones shipped in Bohemia's example file, and they are a reasonable starting point rather than a recommendation.

serverDZ.cfg
hostname = "Chernarus - vanilla, no KOS in trader";password = "";passwordAdmin = "a-long-random-string";maxPlayers = 60;verifySignatures = 2;forceSameBuild = 1;disableVoN = 0;vonCodecQuality = 20;disable3rdPerson = 0;disableCrosshair = 0;serverTime = "SystemTime";serverTimeAcceleration = 12;serverNightTimeAcceleration = 1;serverTimePersistent = 0;loginQueueConcurrentPlayers = 5;loginQueueMaxPlayers = 500;instanceId = 1;storageAutoFix = 1;steamQueryPort = 2305;respawnTime = 5;timeStampFormat = "Short";logAverageFps = 300;logMemory = 300;logPlayers = 300;logFile = "server_console.log";adminLogPlayerHitsOnly = 0;enableDebugMonitor = 0;allowFilePatching = 0;multithreadedReplication = 1;speedhackDetection = 1;class Missions{    class DayZ    {        template = "dayzOffline.chernarusplus";    };};

The ones worth thinking about rather than copying:

  • verifySignatures = 2 refuses any mod whose .bikey is not in the server's keys folder. Leave it at 2. Dropping it to 0 is how servers end up running somebody else's modified PBOs.
  • forceSameBuild = 1 rejects clients on a different game build. Turning it off does not make an out-of-date client work; it makes it fail later and less clearly.
  • allowFilePatching = 0 blocks clients launched with -filePatching, which is how a lot of casual cheating arrives. Only mod developers need it on.
  • serverTimeAcceleration multiplies the in-game clock. 12 gives a two-hour day. serverNightTimeAcceleration multiplies again during the night, so serverTimeAcceleration = 12 with serverNightTimeAcceleration = 4 gives a long day and a short night - the single most requested change on any public server.
  • serverTimePersistent = 1 makes the world clock survive a restart instead of resetting to serverTime. With four restarts a day and it set to 0, your server has the same morning four times.
  • instanceId selects the persistence folder, storage_1 for instance 1. Two servers sharing a machine must not share an instance id.
  • disableVoN = 0 keeps in-game voice. Turning it off is a bigger change to how the game plays than most settings in the file.

Ports and connecting#

PortProtocolPurpose
2302UDPGame traffic, set by -port=
2303-2304UDPReserved beside the game port; hosts allocate the block
2305UDPSteam query, set by steamQueryPort
RCon portUDPBattlEye RCon, set in BEServer_x64.cfg

The query port is the one that catches people. The game runs, you can connect by IP, and the server never appears in the DayZ Launcher list - that is steamQueryPort blocked or wrong. Both are UDP; a firewall rule that only opens TCP does nothing at all here. Game server ports explained goes through why a query port exists separately from the game port and what each failure looks like.

Almost nobody joins a modded DayZ server from the in-game browser. They use the DayZ Launcher, which reads the mod list the server advertises, subscribes to those Workshop items, and launches the game with a matching -mod= line. That is the whole reason mod load order and keys have to be right: the launcher automates the client side and gives up loudly when the two sides disagree.

finds the serverconnectverifySignatures 2key must be presentDayZ Launcherreads the mod listQuery port2305 UDPDayZ server2302 UDPBattlEyesignature checkkeys/ folderone .bikey per mod
What has to line up before a modded player can join

Mods: keys, load order and the two flags#

Workshop mods are downloaded with SteamCMD against the client app id, 221100, not the server's:

bash
$ steamcmd +force_install_dir /home/dayz/server +login <steam_account> \    +workshop_download_item 221100 1559212036 +quit

Then three things have to happen, and missing any one of them produces a different confusing symptom:

  1. The mod folder, named @SomeMod, sits in the server root.
  2. Its keys/*.bikey file is copied into the server's keys folder. Miss this and clients are kicked by BattlEye at the loading screen with a signature error, even though everything else is correct.
  3. The folder is listed in -mod=, in dependency order. Frameworks first: -mod=@CF;@DayZ-Expansion-Core;@DayZ-Expansion-Bundle. Community Framework (@CF) is a dependency of a great many mods and must load before them.

Use -servermod= for anything the client should not have: admin tools, loot spawners, server-side tweaks. Mods in -servermod= are not advertised to the launcher, so players are not asked to download them. Putting a server-only mod in -mod= by mistake makes every joining player download something they have no use for.

Two habits save entire servers. First, pin your mod list and update it deliberately rather than automatically - a DayZ patch invalidates every mod until its author rebuilds, and a server that auto-updates on patch day is a server nobody can join on patch day. What to do when a mod update breaks is worth reading before you need it. Second, keep a copy of the working mod folder and your XML before every update. Steam Workshop mods on dedicated servers covers how Workshop downloads behave server-side across games.

types.xml and the central economy#

This is the part that decides whether your server is worth playing. Loot is not scattered at random. The central economy holds a target population of every item on the map and refills toward it, and the rules live in XML inside your mission folder.

FileWhat it controls
db/types.xmlEvery item: how many exist, how long they last, how fast they come back
db/events.xmlVehicles, helicopter crashes, infected and animal spawns
db/globals.xmlWorld-wide limits such as ZombieMaxCount and cleanup timers
db/messages.xmlScheduled broadcasts, including the one that shuts the server down
db/economy.xmlWhich economy subsystems load at all
cfgeconomycore.xmlWhich XML files are read, including your own custom ones
cfgspawnabletypes.xmlWhat attachments and cargo an item spawns with
cfgeventspawns.xmlThe coordinates events are allowed to use
cfgplayerspawnpoints.xmlWhere fresh spawns and respawns appear

A types.xml entry looks like this. The numbers are illustrative - read the shipped file for the real ones:

db/types.xml
<type name="M4A1">    <nominal>8</nominal>    <lifetime>7200</lifetime>    <restock>1800</restock>    <min>4</min>    <quantmin>-1</quantmin>    <quantmax>-1</quantmax>    <cost>100</cost>    <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1"           count_in_player="0" crafted="0" deloot="0"/>    <category name="weapons"/>    <usage name="Military"/>    <value name="Tier4"/></type>

Each element does a specific job, and five of them decide almost everything:

  • nominal is the target number on the map. min is the floor: when the live count drops to it, the economy queues more.
  • lifetime is how many seconds an untouched item survives before cleanup takes it. Picking it up and putting it down resets the clock.
  • restock is the delay before the economy is allowed to replace what was taken. 0 means as soon as it can.
  • cost is a spawn priority between 0 and 100 - which of the eligible items gets the slot.
  • usage and value decide where it can appear: usage is the building type (Military, Police, Medic, Farm, Industrial, Town, Village, Hunting), value is the loot tier, higher tiers being further from the coast. An item with no usage and no value spawns nowhere, which is the single most common self-inflicted wound in DayZ administration.
  • The flags attributes decide what counts against nominal. count_in_cargo="1" means items inside containers count, so a hoarding clan can starve the map of an item without anything being broken.

Three consequences follow from that mechanism. A town that feels bare is usually a nominal problem, not a spawn-rate setting you cannot find. Raising nominal across the board does not multiply loot forever, because the total is also bounded by the loot points on the map. And an item whose lifetime is short disappears from a base you left for a week - use a container, which has its own lifetime.

Mods that add items need their entries too. A weapons mod that appears to do nothing is almost always a mod whose items were never registered with the economy: the mod is loaded, the guns exist in the game files, and nothing spawns them. The right fix is not to paste the mod's entries into the vanilla types.xml, which a game update will overwrite. Register a custom folder in cfgeconomycore.xml instead:

cfgeconomycore.xml
<ce folder="custom">    <file name="mod_types.xml" type="types"/></ce>

Now your additions live in mpmissions/dayzOffline.chernarusplus/custom/mod_types.xml and survive being patched over. types.xml and the loot economy takes the whole system apart in detail.

Persistence is separate from all of this. Player bases, stashes, vehicles and character data live in storage_<instanceId> beside the mission folder. Editing the economy does not wipe them. Deleting that folder does - that is a wipe, and it is the only reliable one. Keep a copy first, and keep it somewhere other than the server: backups that actually restore exists because a backup nobody has restored is a hypothesis.

Administration: RCon, logs and restarts#

Administration is BattlEye RCon plus whatever admin mod you chose. passwordAdmin in serverDZ.cfg should be long and random even though vanilla gives you almost nothing to do with it; the RCon password is separate and lives in BEServer_x64.cfg in the BattlEye folder inside your profiles directory.

BattlEye's own command set, typed into an RCon client or the panel console, is small:

CommandEffect
playersConnected players with their IDs and pings
kick <id> <reason>Kick by session id
ban <id> <minutes> <reason>Ban a connected player, 0 for permanent
addBan <GUID> <minutes> <reason>Ban someone who is not connected
bans / removeBan <n>List and lift bans
say -1 <message>Broadcast to everyone
loadBans / loadEventsRe-read the BattlEye files without a restart
#shutdownStop the server

Bans are stored in bans.txt as BattlEye GUIDs, which are derived from the SteamID and are not the SteamID. Copy them out of the logs rather than converting them by hand. If you are exposing RCon at all, read RCON safely first - the protocol is UDP, the password is the whole of the authentication, and DayZ servers are scanned constantly.

The logs in your profiles folder are the other half of the job:

  • server_console.log - everything the console printed, which is where start-up errors in your XML appear.
  • *.ADM - the admin log: connects, disconnects, positions, deaths, hits, who killed whom and with what. This is the file you read after every argument about a base raid.
  • script*.log - script errors, including from mods.
  • crash_* and *.mdmp - what to send a mod author.

DayZ servers are restarted on a schedule, typically every three to four hours, because server FPS degrades as the session goes on and because a scheduled restart is a controlled save. You can do it purely in db/messages.xml, where a message entry can carry a shutdown, and the panel's Schedules tab can run the restart plus a backup with a cron expression - see restart schedules that help for what interval is actually worth it. On RE:NODE the Restart button is a clean stop, a watcher notices a server that keeps restarting by itself and opens a ticket rather than leaving it in a loop, and a server that hits its memory limit is stopped and restarted clean instead of being left to swap.

Troubleshooting#

The server runs but is not in the DayZ Launcher list. Query port. Check steamQueryPort matches an allocated UDP port and that nothing else on the machine claims it.

Players are kicked with a BattlEye signature error. A .bikey is missing from the keys folder, or a mod updated and shipped a new key. Copy every mod's key again after every mod update.

"You cannot play/edit this mission; it is dependent on downloadable content that has been deleted." The client's mod list does not match the server's - usually a mod the launcher did not download, or a version mismatch. Have the player verify through the launcher, not through Steam.

Loot did not change after editing `types.xml`. Either you did not restart, or the file failed to parse and the economy fell back. Read server_console.log from the top: a malformed XML file is named there with the element that broke it.

An added mod's items never spawn. They have no economy entries, or they have entries with no usage and no value. See above.

Everything is slow when the server fills. Check logged server FPS before buying memory. High infected counts, large mod lists and dozens of persistent vehicles all cost CPU rather than RAM.

Bases vanished after an update. Persistence in storage_<instanceId> was reset or the instance id changed. There is no recovery without a backup of that folder.

The world clock resets every restart. serverTimePersistent = 0.

FAQ#

Can I run a DayZ server without owning DayZ?

No. The server application is not available to an anonymous SteamCMD login, so a Steam account that owns the game has to be used for the install. Use a spare account rather than your main one.

How many players can a DayZ server hold?

maxPlayers goes well past 60, but the practical limit is CPU. Most public servers run 40-60 and start losing server FPS above that, especially with a large mod list. Player count is rarely what breaks a DayZ server; the mod list is.

Do I have to restart every few hours?

Not strictly. The server will keep running. But server FPS drifts down over a long session, a restart is a clean save, and most mod-heavy servers are visibly better after one. Three to four hours is the community norm; announce it with db/messages.xml so nobody loses a raid to it.

Does editing the loot economy wipe the map?

No. Loot and persistence are separate. Editing types.xml and the other economy files changes what spawns from the next restart; player bases, stashes and characters in storage_<instanceId> are untouched. A wipe means deleting that storage folder deliberately.

Why does the mod work for me but not for anyone else?

You have the mod locally and the server does not advertise it, or it is in -servermod= when it needs to be in -mod=. Client-and-server mods belong in -mod= with their key in keys; only genuinely server-side mods belong in -servermod=.

Where do I look first when something is wrong?

server_console.log and the .ADM file in your profiles folder, in that order. Half of DayZ administration is XML, and the other half is reading the log that tells you which line of it you got wrong.


Comments

Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.

0/2000