Advertisement

Generate a Arma Reforger config.json

Arma Reforger reads one nested JSON file, config.json, and half the guides for it describe an older layout with different key names — so a file assembled from forum posts can be valid JSON that the server still does not understand.

Visual Settings

json Format
Identity

Name in the server browser, up to 100 characters.

Gameplay

First-person only.

World

The mission to run, as a resource path. The default is Conflict on Everon. Other official scenarios and workshop missions each have their own ID in this form.

Players & Access

Join password. Empty means public.

Slot limit.

Shows the server in the in-game browser.

Lets console players join as well as PC.

Performance

The furthest clients may set their view distance, in metres.

How far out the server streams entities to each player, in metres. The biggest network and CPU lever.

Forces a minimum grass draw distance so players cannot turn grass off to spot others. 0, or between 50 and 150.

Keep on for public servers.

Network

The address the server listens on. 0.0.0.0 means every interface.

Game port, UDP. This is the one to forward.

The public IP registered with the backend. Leave empty to have it detected.

The port players are told to connect to. Same as bindPort unless a router remaps it.

Having an a2s block at all switches on the Steam query that server lists and status checkers use. It is off when the block is missing.

Steam query port, UDP. Forward it too if you want to appear in lists.

RCON & Query

Password for logging in as admin from inside the game.

BattlEye anti-cheat.

config.json

1 problem
publicPort — bindPort and publicPort are both set to 2001. Two services cannot share a port — the second one will fail to bind.
{
  "bindAddress": "0.0.0.0",
  "bindPort": 2001,
  "publicAddress": "",
  "publicPort": 2001,
  "a2s": {
    "address": "0.0.0.0",
    "port": 17777
  },
  "game": {
    "name": "My Reforger Server",
    "password": "",
    "passwordAdmin": "",
    "scenarioId": "{ECC61978EDCC2B5A}Missions/23_Campaign.conf",
    "maxPlayers": 64,
    "visible": true,
    "crossPlatform": false,
    "gameProperties": {
      "serverMaxViewDistance": 1600,
      "networkViewDistance": 1500,
      "serverMinGrassDistance": 0,
      "disableThirdPerson": false,
      "fastValidation": true,
      "battlEye": true
    }
  }
}

Advertisement

The config.json format

Network settings sit at the top level (bindPort, publicPort), the Steam query lives in an a2s object, and everything about the game — name, passwords, scenario, player cap — sits inside game, with rendering and network ranges one level deeper in game.gameProperties. Strings are double-quoted, numbers and true/false are not, and there are no comments or trailing commas.

Advertisement

The mistake that wastes an evening

The server browser and every status checker rely on the a2s block, and it is not there unless you add it: without it the server runs and players can join by address, but nothing can query it. The other trap is guides using gameHostBindPort and similar names from before the layout changed — those keys are simply ignored now.

Rather not run the server yourself?

These tools are free and funded by the two hosting services we run. If you want a server that is already set up, here they are.

Advertisement