config.json is the single file that controls an Arma Reforger dedicated server: it sets the server name, network ports, scenario, player cap, admin password, mods, and detailed game rules. The file is plain JSON organized into a few top-level objects, mainly a server identity block and a nested game object. This guide walks through config.json field by field so you know exactly what every key does and how to set it correctly without breaking the server.
How config.json Is Structured
config.json is a JSON object with a small number of top-level sections. There is a network and identity layer that covers the address, ports, and public name, and a nested game object that holds the scenario, player limits, mods, admins, and a gameProperties block for detailed rules. Everything is case-sensitive, and the whole file must be valid JSON.
Warning: A single missing comma, extra comma, or unclosed quote makes the whole file invalid and stops the server
Note: The two areas you edit most are the network identity fields and the game object
Note: gameProperties is a nested object inside game that holds the fine-grained rule toggles
Network and Identity Fields
These fields control how the server is reachable on the network and how it identifies itself. On a managed host the bind address and ports are usually preset for you, so you mostly confirm rather than change them.
| Command | Description | Example |
|---|---|---|
bindAddress | The local address the server binds to; typically left as preset by the host | "0.0.0.0" |
bindPort | The game port players connect to | 2001 |
publicAddress | The public IP the server advertises | "203.0.113.10" |
publicPort | The public game port advertised to the browser | 2001 |
a2s.address / a2s.port | Address and port for the A2S query that the server browser uses to read server info | "a2s": { "address": "0.0.0.0", "port": 17777 } |
Tip: On Loafhosts these are configured at deploy time; change them only if instructed
Tip: If your server does not appear in the browser, the A2S query port is a common culprit
Core Server Fields in the game Object
The game object holds the settings most people think of as the server configuration: the visible name, the player password, the admin password, and the player cap.
| Command | Description | Example |
|---|---|---|
game.name | The server name shown in the in-game browser | "[NA] Loaf Conflict" |
game.password | The join password for players; empty string means a public server | "" |
game.passwordAdmin | The admin password used with the #login console command in-game | "strong-secret" |
game.maxPlayers | Maximum concurrent players allowed | 64 |
game.visible | Whether the server is listed in the public browser | true |
game.crossPlatform | Whether crossplay between PC and Xbox is allowed; a direct field on the game object, not inside gameProperties | true |
Tip: Set game.visible to false plus a game.password for a fully private server
Warning: Never leave passwordAdmin empty on a public server; an empty admin password is a serious security hole
The scenarioId Field
scenarioId tells the server which mission or campaign to load on boot. It is one of the most important fields, and it has a strict format: a GUID in braces followed by a resource path that ends in .conf. Vanilla Conflict and Game Master scenarios have published IDs; modded scenarios provide their ID on the Workshop page.
| Command | Description | Example |
|---|---|---|
game.scenarioId | The scenario the server loads, as a GUID plus a path ending in .conf | "{ECC61978EDCC2B5A}Missions/23_Campaign.conf" |
Tip: Copy scenario IDs exactly; a single wrong character means the server cannot find the scenario
Note: The braces and the GUID are required; the path after the braces points to the scenario resource
Note: A modded scenario ID only resolves if the scenario’s mod is also in the mods array
The admins Array
The admins array lists the Reforger IDs of players who get admin rights. Anyone in this list can use admin tools and, on Game Master scenarios, the Game Master menu. Reforger IDs are tied to the player account and are not the same as Steam IDs.
| Command | Description | Example |
|---|---|---|
game.admins | Array of Reforger IDs granted admin rights on the server | "admins": ["reforger-id-1", "reforger-id-2"] |
- Ask each admin to read their Reforger ID from the profile screen in the main menu
- Add each ID as a quoted string inside the array
- Separate multiple IDs with commas and avoid a trailing comma after the last entry
Tip: Keep this list short and only include people you fully trust
The mods Array
The mods array lists every Workshop mod the server loads. Each entry is an object with a modId, a name for readability, and an optional version. Leaving version empty keeps the mod on auto-update. The panel’s Mod Importer (Arma Mod Manager) writes this array for you, which avoids syntax mistakes.
| Command | Description | Example |
|---|---|---|
game.mods[].modId | The 16-character Workshop mod ID | "5AAAC70D754245DD" |
game.mods[].name | A human-readable mod name for your own reference | "Server Admin Tools" |
game.mods[].version | A specific version to pin; leave empty for auto-update | "" |
Tip: Use the Mod Manager rather than hand-editing this array to avoid comma and bracket errors
Note: Dependencies are resolved automatically, so you do not list them in the array
Note: An example single entry: { “modId”: “5AAAC70D754245DD”, “name”: “Server Admin Tools”, “version”: "" }
The gameProperties Block
gameProperties is a nested object inside game that holds the detailed rule toggles: crossplay, server view distance, battleye, voice options, and similar tuning. These are the knobs you turn to balance performance against fidelity and to control how the server behaves.
| Command | Description | Example |
|---|---|---|
game.gameProperties.serverMaxViewDistance | View distance cap in meters; lowering it reduces server load | 2500 |
game.gameProperties.serverMinGrassDistance | Minimum grass render distance; 0 disables server grass | 50 |
game.gameProperties.networkViewDistance | How far entities are replicated to clients | 1500 |
game.gameProperties.battlEye | Whether BattlEye anti-cheat is enabled | true |
Tip: If a busy server struggles, lowering serverMaxViewDistance and networkViewDistance is the first lever to pull
Tip: Keep BattlEye enabled on public servers unless a mod specifically requires it off
Validating and Saving config.json
Because the entire server depends on config.json being valid JSON, validation is not optional. The LPV5 panel config editor helps, and a quick external check catches the rest. Save once you are confident the structure is intact, then restart.
- Review every object for matching braces and brackets
- Confirm there is no trailing comma after the last item in any array or object
- Confirm every string is wrapped in double quotes
- Run the file through a JSON validator if you edited it by hand
- Save and restart the server, then watch the console for a clean boot
Warning: If the server stops immediately after a config change, assume a JSON error first and recheck the file
Frequently Asked Questions
Where is the config.json file for an Arma Reforger server?
On a managed host like Loafhosts, config.json is reachable through the LPV5 panel config editor and the file manager. It is the file the dedicated server reads at startup for every setting, from the server name to the modlist.
What format does the scenarioId field use?
scenarioId is a GUID inside braces followed by a resource path that ends in .conf, for example {ECC61978EDCC2B5A}Missions/23_Campaign.conf. The braces and GUID are required, and a modded scenario ID only works if the scenario’s mod is also listed in the mods array.
What is the difference between password and passwordAdmin?
game.password is the join password players need to enter the server, and an empty string means the server is public. game.passwordAdmin is the admin password used in-game with the #login console command to gain admin tools. They serve completely different purposes.
How do I add mods in config.json?
Add each mod as an object in the game.mods array with a modId, a name, and an optional version. Leave version empty for auto-update. The panel Mod Importer (Arma Mod Manager) can write this array for you so you avoid JSON syntax errors.
Why won’t my Arma Reforger server start after editing config.json?
The most common reason is invalid JSON: a missing comma, an extra trailing comma, an unclosed quote, or a mismatched brace. The next most common is a wrong scenarioId or a mod entry that fails to download. Recheck the file and read the console log.
What does serverMaxViewDistance do?
serverMaxViewDistance, inside the gameProperties block, caps how far the server renders the world in meters. Lowering it reduces server load and is one of the first settings to adjust if a busy server is struggling with performance.
Do I need to list mod dependencies in config.json?
No. Arma Reforger resolves dependencies automatically. You only list the mods you want in the game.mods array, and the server downloads any required dependency mods on startup.
How do I make my Reforger server private in config.json?
Set game.password to a join password and optionally set game.visible to false so the server is hidden from the public browser. Players then join with Direct Connect using the IP, port, and password.