Game servers are configured in about eight text formats, and almost every "my setting did nothing" or "the server will not start after I edited it" comes down to one of three things: a syntax rule of the format that was broken, a file the server rewrites on shutdown, or a key the hosting panel overwrites at boot. Learn the rules of each format once - INI sections, JSON's ban on comments and trailing commas, YAML's ban on tabs, XML's escaping, the semicolons in Bohemia's .cfg files - and edit with the server stopped, and most of those problems disappear. This post is a field guide to the formats, the games that use each, and how to check a file before the server finds the mistake for you.
Which game uses which format#
| Format | Typical files | Games |
|---|---|---|
| INI | GameUserSettings.ini, Game.ini, PalWorldSettings.ini, cluster.ini | Unreal Engine games, Palworld, ARK, Don't Starve Together |
| Properties / key=value | server.properties, servertest.ini, serverconfig.txt | Minecraft, Project Zomboid, Terraria |
| JSON | ServerHostSettings.json, enshrouded_server.json, server-settings.json | V Rising, Enshrouded, Factorio |
| YAML | paper-global.yml, bukkit.yml, plugin config.yml | Paper and Spigot, most Minecraft plugins |
| XML | serverconfig.xml, serversettings.xml, types.xml | 7 Days to Die, Barotrauma, Space Engineers, DayZ loot |
Console .cfg | server.cfg, autoexec.cfg | Source games (CS2, TF2, Garry's Mod), FiveM |
Bohemia .cfg | serverDZ.cfg, server.cfg | DayZ, Arma 3 |
| Lua | SandboxVars.lua, modoverrides.lua | Project Zomboid, Don't Starve Together |
| TOML | ServerConfig.toml, velocity.toml, mod configs | BeamMP, Velocity, NeoForge mods |
The extension does not always tell you the format. Project Zomboid's servertest.ini is plain key=value with no sections. A .cfg in a Source game is a list of console commands, while a .cfg in DayZ is a class-based syntax with semicolons. Look at the file before assuming.
INI, properties and the Unreal flavour#
INI is the oldest format here: sections in square brackets, key=value lines under them, comments starting with ; (some parsers also accept #).
[ServerSettings]ServerPassword=ServerAdminPassword=change-meDifficultyOffset=1.0XPMultiplier=2.0[SessionSettings]SessionName=My ARK ServerThe section matters. A correct key under the wrong heading is silently ignored, which is the classic ARK mistake: putting a Game.ini setting into GameUserSettings.ini, or the right key under [SessionSettings] instead of [ServerSettings].
Unreal Engine games add two habits of their own. Section names are often script paths, such as [/Script/Pal.PalGameWorldSettings]. And some games pack all their settings into one very long line of nested values:
[/Script/Pal.PalGameWorldSettings]OptionSettings=(Difficulty=None,ExpRate=1.000000,ServerPlayerMaxNum=32,ServerName="My Palworld",AdminPassword="change-me",PublicPort=8211)That line is parsed as one value. One missing comma, an unclosed quote or a stray line break inside the brackets, and the game discards the whole line and starts with defaults - including an empty admin password. Edit it in a plain text editor, change one value at a time, and keep a copy of the last version that worked. The Palworld server settings guide goes through what each of those options does.
Unreal servers also write their config files back to disk when they shut down. If you edit GameUserSettings.ini while the server is running, your change is overwritten by the server's in-memory copy at the next stop. Stop first, edit, then start. Unreal Engine dedicated server basics explains the file layout and which directory actually takes effect.
Don't Starve Together uses classic INI for cluster.ini and per-shard server.ini, with sections such as [GAMEPLAY], [NETWORK] and [SHARD]. The same rule applies: right key, right section.
Properties and plain key=value
Minecraft's server.properties is a Java properties file: one key=value per line, # for comments, no sections.
# Minecraft server propertiesview-distance=8simulation-distance=6white-list=truemotd=A \u00A7aGreen\u00A7r serverThree details trip people up. Whitespace after the value is kept as part of it, so white-list=true with a trailing space may not mean true. Backslashes are escape characters, which is why colour codes are often written as \u00A7. And the server rewrites the file on start, adding any missing keys with defaults and sometimes reordering lines, so comments you add yourself can disappear. Every key is explained in server.properties explained.
Project Zomboid's servertest.ini (named after your server) and Terraria's serverconfig.txt are the same idea with their own keys. Zomboid lists use semicolons inside a value - Mods=modA;modB and WorkshopItems=123;456 - and a stray space or a mismatched count between the two lines is a common reason mods do not load.
JSON#
JSON is strict, and that is its whole personality. Objects in braces, arrays in brackets, keys in double quotes, values that are strings, numbers, true, false or null.
{ "Name": "My V Rising Server", "Port": 9876, "QueryPort": 9877, "MaxConnectedUsers": 40, "Password": "", "Secure": true}The rules that break servers:
- No trailing commas.
"Secure": true,before the closing brace is invalid. - No comments. Neither
//nor#is allowed. Factorio'sserver-settings.jsonworks around this with keys like"_comment_visibility", which the game ignores - a hint that you should not add real comments. - Double quotes only. Single quotes are invalid.
- Types matter.
"Port": "9876"is a string, not a number, and some servers reject it or ignore it. - Backslashes must be escaped. A Windows path is
"C:\\Servers\\save".
A JSON error usually stops the server at start with a parse error naming a line and column. Some servers instead fall back to defaults and overwrite your file with them, which looks like your settings vanished. Check before you start:
$ python3 -m json.tool ServerHostSettings.json > /dev/null && echo okYAML#
YAML is the Minecraft plugin world's format - Paper's own configs, bukkit.yml, spigot.yml and almost every plugin's config.yml. Structure comes from indentation:
chunks: auto-save-interval: default max-auto-save-chunks-per-tick: 24entities: spawning: despawn-ranges: monster: hard: 128 soft: 32What breaks it:
- Tabs. YAML forbids tab characters for indentation. A tab pasted from a forum post fails the whole file.
- Inconsistent indentation. Two spaces in one block and four in its sibling changes the structure.
- Unquoted special values.
yes,no,onandoffmay be read as booleans by older YAML parsers; a version like1.20becomes a number. Quote strings that look like something else:version: "1.20". - A colon followed by a space inside a value, which starts a new mapping. Quote the value.
When a Paper plugin's config is broken, the plugin usually logs an error and either loads defaults or disables itself, and some plugins then overwrite the file. Keep a copy before editing, and validate:
$ python3 -c 'import sys, yaml; yaml.safe_load(open(sys.argv[1]))' config.yml && echo okThat needs the PyYAML package. Online validators work too, but do not paste a config containing passwords or database credentials into a website.
XML#
XML is verbose and forgiving of nothing. Every element must close, attributes must be quoted, and five characters must be escaped inside values: & as &, < as <, > as >, " as " and ' as '.
<?xml version="1.0"?><ServerSettings> <property name="ServerName" value="Smith & Sons Survival"/> <property name="ServerPort" value="26900"/> <property name="ServerMaxPlayerCount" value="8"/> <!-- <property name="ServerPassword" value=""/> --></ServerSettings>The ampersand is the usual culprit: a server name with & in it breaks a 7 Days to Die config immediately. Comments are <!-- ... --> and cannot contain --. Every setting in that file is covered in 7 Days to Die server settings.
DayZ's types.xml is the other XML file people edit constantly, and at several thousand lines a single unclosed tag can disable the loot economy. DayZ types.xml and the loot economy covers it. Validate before uploading:
$ xmllint --noout types.xml && echo okTwo kinds of .cfg#
Source and FiveM: a list of commands
In Source games a .cfg file is a script of console commands executed in order, exactly as if you typed them. // starts a comment. Values with spaces need double quotes.
hostname "My CS2 Server"sv_password ""rcon_password "change-me"sv_cheats 0exec banned_user.cfgBecause it is a script, order matters: a later line overrides an earlier one, and a game mode config executed after server.cfg can quietly undo your settings. A misspelled command is not an error; the console prints Unknown command and carries on. Read the console at startup after editing. The cvars themselves are in CS2 server commands and cvars.
FiveM's server.cfg follows the same idea - sv_hostname, set, endpoint_add_tcp, ensure lines run in order - and resource start order is decided by the order of the ensure lines. FiveM server.cfg explained goes through it.
DayZ and Arma 3: class syntax
Bohemia's format looks like C. Assignments end with a semicolon, strings are double-quoted, and nested blocks are classes:
hostname = "My DayZ Server";password = "";passwordAdmin = "change-me";maxPlayers = 60;class Missions{ class DayZ { template = "dayzOffline.chernarusplus"; };};A missing semicolon or a missing }; after a class is the usual reason a DayZ server stops on startup with a config error. Arrays use name[] = {"a", "b"};. DayZ server.cfg explained goes through every line.
Lua and TOML#
Lua tables
Project Zomboid and Don't Starve Together store some settings as Lua code that returns or assigns a table. Because it is code, it is executed, and a syntax error means the whole file fails.
return { ["workshop-378160973"] = { enabled = true }, ["workshop-375850593"] = { enabled = true, configuration_options = { difficulty = "hard" }, },}Commas separate entries, and Lua allows a trailing comma, so that is not the problem it is in JSON. Missing commas between entries, unbalanced braces and unquoted strings are. -- starts a comment. luac -p file.lua checks syntax without running it, if Lua is installed. Project Zomboid's SandboxVars.lua is covered key by key in Project Zomboid server settings.
TOML
TOML looks like INI but is typed and stricter: strings must be quoted, numbers and booleans must not be, and tables are written [section] or [section.subsection].
[General]Name = "My BeamMP Server"Port = 30814MaxPlayers = 8Private = trueAuthKey = ""Private = "true" is a string and may be rejected; Name = My Server without quotes is a syntax error. BeamMP, Minecraft's Velocity proxy and NeoForge mod configs all use TOML.
Encoding, editors and keeping track#
Encoding and line endings
A file can be syntactically perfect and still fail because of how it was saved.
- Encoding. Use UTF-8. Some Windows editors save UTF-8 with a byte-order mark, three invisible bytes at the start of the file, and a handful of parsers choke on it - the error then points at line 1, column 1, where nothing looks wrong.
- Line endings. Windows saves lines ending
\r\n, Linux uses\n. Most game parsers accept both; shell scripts do not. - Smart quotes. Copying settings from a web page or a word processor can turn
"into curly quotes, which no parser accepts. - Use a real editor. The panel's file manager editor, VS Code or Notepad++ with syntax highlighting for the format. Highlighting shows an unclosed string or bracket before the server does.
On RE:NODE the file manager opens configs in an in-browser editor with syntax highlighting, and larger edits can go through SFTP with the editor of your choice - SFTP and the file manager has the connection details.
Keeping track of changes
The cheapest insurance on any server is knowing what you changed. Configs drift: a setting tried during a lag problem and never reverted, a value a moderator changed at midnight, a plugin update that rewrote its own file with new defaults. Three months later nobody knows why the server behaves the way it does.
A few habits keep that from happening, and none of them need special tools:
- Copy before you edit. Save
server.cfgasserver.cfg.2026-10-07before touching it. Disk is cheap, and a copy beside the file is the fastest rollback there is. - Change one thing at a time. If you change five values and the server misbehaves, you have five suspects. One change, one restart, one observation.
- Write down why. A comment in the file, where the format allows one, or a short text file of dated notes where it does not: "2026-10-07: view-distance 10 to 8, TPS dropping at peak". The reason is what you will have forgotten.
- Diff when something changes unexpectedly. Download the current file and your last known good copy and compare them. On a machine with a shell,
diff -u old.yml new.ymlshows exactly which lines moved, which settles "did the update change my config" in seconds. - Keep configs in backups. Panel backups include them with the world. If you also keep the config folder in a private Git repository, you get the full history of every change for free, but never commit files containing passwords or tokens to anything shared.
Plugin and mod updates deserve particular suspicion. Many Minecraft plugins migrate their config.yml on update, adding new keys and occasionally renaming or removing old ones. Most do it carefully and keep your values. Some regenerate the file and save your old one as config.yml.old, which you only find if you look. After any update, compare the config with your copy before assuming the plugin behaves as before.
When your edit does not stick#
If a setting reverts or has no effect, the cause is almost always one of these, in this order:
- The server rewrote the file. Unreal games, Minecraft and many plugins write their configs on start or stop. Stop the server, edit, start.
- The panel owns the key. A Pterodactyl egg can rewrite specific keys at every boot - ports, IP, sometimes max players - from the Startup and Network tabs. Change those values there, not in the file. Pterodactyl eggs for game servers explains how that works.
- A launch argument overrides the file. Many games let command-line flags win over config values. A
-porton the startup line beatsPortin JSON. - Wrong file or wrong directory. Unreal games have default configs and saved configs in different places; only one is read. Minecraft has world-specific overrides of global settings.
- Syntax error with silent fallback. The server could not parse the file and used defaults. Check the log for a parse warning near the top.
FAQ#
Can I add comments to a JSON config file?
No. Standard JSON has no comment syntax, and most game servers use a strict parser. Keep notes in a separate text file, or use a key the game ignores, as Factorio does with its _comment keys.
Why did my server reset its config to defaults after I edited it?
The file failed to parse and the server fell back to defaults, often writing them over your file. Validate the syntax, restore your copy, and look near the top of the log for the parse error.
Does it matter whether I use tabs or spaces?
In YAML, yes - tabs are invalid for indentation. In INI, JSON, XML, TOML and Lua, indentation is cosmetic. In Bohemia .cfg files it is cosmetic too, but the semicolons are not.
Should I edit configs while the server is running?
Only if the game reloads that file on command, and few do. Many servers write their config on shutdown and overwrite your edits. Stop, edit, start is the safe order for every game.
What is the safest way to change a long Unreal Engine settings line?
Copy the working line to a backup, change one value, keep commas and quotes intact, and start the server. If the setting does not apply, compare against the default file the game ships rather than retyping the line.




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.