For a small private Arma Reforger group, start with Bohemia Interactive’s case-sensitive JSON template, set game.maxPlayers to your real peak attendance, choose the exact game.scenarioId, protect the session with game.password, and decide whether game.visible should list it publicly. Enable crossPlatform only when Xbox or PlayStation players need to join. Forward the public UDP game port, keep fastValidation and BattlEye enabled for public play, and cap the process with -maxFPS. Tune view and network distances only after watching server performance and player experience. This approach gives a dependable baseline without pretending that one set of values suits every host, scenario, or player count.
What does an Arma Reforger server configuration control?
Arma Reforger reads a case-sensitive JSON file. Its top level describes bind and public networking, the game object defines the session itself, and optional operating settings control server behavior. A misspelled field, wrong capitalization, or invalid scenario path can prevent the intended setting from taking effect.
Core identity, access, and administration fields
| Field | Purpose | Practical choice for a group |
|---|---|---|
game.name |
Name shown in the server browser | Use a recognizable group name plus a region or event label. |
game.password |
Join password | Leave empty for an open server; set a separate password for private sessions. |
game.passwordAdmin |
Password for in-game administration | Use a different secret from the join password and share it only with trusted administrators. |
game.admins |
Documented list of administrator identities | Add the account identifiers your moderators will use, then remove people whose role ends. |
game.scenarioId |
Scenario .conf file loaded at startup |
Copy the exact identifier returned by the server’s scenario listing rather than guessing a path. |
game.maxPlayers |
Maximum simultaneous players; documented range 1–128, default 64 | Set the highest number you can actually support, not the template default. |
game.visible |
Whether the server appears in the browser | Keep it true for easy discovery, or false when invitations and a direct address are your access method. |
Platform and content fields
game.crossPlatform controls whether crossplay is allowed. The official reference identifies PC, Xbox, and PlayStation platform keys and recommends using the cross-platform switch instead of maintaining a hand-written platform list. Decide this before publishing the server name so players know which audience is intended.
game.mods contains required mods. Clients download and activate those items when they join. Keep the list stable for a scheduled event, announce additions or version changes before play, and avoid changing it while players are already connecting.
How many players should you set?
Set game.maxPlayers to your expected peak concurrency with a small margin, then adjust after observing the host. The documented limit is 1 to 128 and the template default is 64, but neither number is a recommendation for every group.
Choose a value from attendance, not the default
- For a group that normally has eight to twelve people, use a value near that peak rather than advertising 64 empty slots.
- For a weekly event with occasional guests, reserve a few additional slots without selecting a capacity your CPU, upload bandwidth, or scenario cannot sustain.
- For a public server, size for the busiest period you can monitor. A lower, stable cap is preferable to a larger cap that produces simulation or connection problems.
Changing the cap does not replace performance testing. Player count, scenario density, host CPU, and network capacity interact, so record server frame time, bandwidth use, and in-game responsiveness when you change the value.
How do I edit server.json safely?
Use the official template as your starting point and preserve its spelling and capitalization. Make one logical change at a time, validate the JSON, and keep a known-good copy so a failed edit can be reversed.
- Stop the server. Editing a file while the process is running can leave you unsure which values were loaded.
- Copy the template. Save a backup such as
server.json.backupbefore changing any field. - Set identity and access. Edit
game.name,game.password,game.passwordAdmin, andgame.admins. Keep the two passwords distinct. - Select the scenario. Put the exact
.confidentifier ingame.scenarioId. Use the startup listing command described below if you do not know the available IDs. - Set capacity and visibility. Choose
game.maxPlayersfrom real attendance and setgame.visibleto match your invitation method. - Choose platform policy. Enable
game.crossPlatformonly when console participation is required. Otherwise keep the audience limited to the platforms you intend to support. - Review content. Check every entry in
game.mods, including its identifier and version expectations, before restarting. - Validate and launch. Use a JSON-aware editor or validator, then launch with the intended configuration path. Read the first startup log for parse errors, missing scenarios, and port messages.
A minimal private-group shape
The following illustrates the relationships among the important fields; replace the example values with your group’s identifiers and chosen scenario. It is not a complete substitute for the official template, because bind, public-address, platform, voice, and operating fields may also be needed in your deployment.
{"game":{"name":"My Reforger Group","password":"join-secret","passwordAdmin":"different-admin-secret","admins":[],"scenarioId":"{YOUR_SCENARIO_CONF_PATH}","maxPlayers":12,"visible":true,"crossPlatform":false,"mods":[]}}
Keep the braces and quotation marks valid JSON, and do not paste the angle-bracketed example identifier into a live server.
What ports does an Arma Reforger server need?
The documented public game port is UDP 2001. Two other UDP ports are optional: 17777 for A2S server queries and 19999 for RCON administration. Forward only the services you actually use, and allow those same ports through the host firewall.
| Port | Protocol | Use | When to forward it |
|---|---|---|---|
| 2001 | UDP | Public game traffic | Required for clients connecting from the internet, unless you deliberately choose another configured public port. |
| 17777 | UDP | Optional A2S queries | Forward only if an external browser, monitoring tool, or query client needs it. |
| 19999 | UDP | Optional RCON | Forward only when you operate RCON; restrict it at the firewall and protect its credentials. |
Public address and NAT
When the server is behind NAT, set publicPort to the internet-facing port that your router forwards. Leaving the public address empty generally allows the backend to detect it. Verify the advertised address from outside the host’s LAN; a local test alone can succeed even when remote players cannot connect.
IPv6 is not supported in the cited hosting reference, so an IPv6-only address will not provide a working connection path. Use a reachable IPv4 route and document any non-standard external port for your players.
Container and Docker warning
In a containerized Linux deployment, the process can advertise its internal Docker address instead of the host address. Clients then receive an unreachable destination even though the container is running. Configure the public address for the host’s reachable interface, publish the selected UDP ports, and test from a separate network.
Which scenario and mission-flow settings should I use?
game.scenarioId selects the scenario .conf loaded at startup. Bohemia’s reference states that only one scenario can be defined and that Arma Reforger does not allow mission rotation as of version 0.9.8. Treat that limitation as version-sensitive and recheck the official reference after a major update.
Use missionHeader for group-specific rules
When the group needs more than the scenario’s defaults, missionHeader can provide a custom displayed name and details, a starting time, weather behavior, an XP multiplier, marker limits, and faction limits. Keep those values aligned with the event brief so players see the same expectations in the lobby and in your written instructions.
List valid scenario identifiers before editing
The dedicated-server startup guide documents -listScenarios. Run the server with that switch to print available scenario IDs, copy the exact result into game.scenarioId, and then restart with your normal configuration. This avoids failures caused by a filename that looks correct but is not an available scenario identifier.
Should I use a dedicated server or a player-hosted listen server?
A dedicated server runs headlessly without a local player and is the better fit for a persistent schedule, while a player-hosted listen server is simpler for an occasional small session and is documented as PC-only.
| Consideration | Dedicated server | Player-hosted listen server |
|---|---|---|
| Reliability | Runs independently of a playing client; predictable for recurring events. | Ends or degrades when the host leaves, disconnects, or lacks capacity. |
| Setup | Requires a separate server installation, JSON file, firewall rules, and launch parameters. | Started from the game’s Host tab with less infrastructure. |
| Platform scope | Use the documented dedicated-server branch that matches clients. | Documented as PC-only. |
| Administration | Supports persistent logs, profile data, admin identities, BattlEye, and optional RCON. | Best for a trusted host managing a short session. |
| Best use | Scheduled campaigns, public listings, and groups that need the world available before players arrive. | One-off gatherings with a small, PC-only group. |
For dedicated startup, the hosting guide documents -config for the JSON path, -profile for logs and server data, -listScenarios to print scenario IDs, and -maxFPS to cap process FPS. Stable and experimental dedicated-server Steam app IDs are listed separately; keep the server branch aligned with every client’s branch.
Example launch pattern
ArmaReforgerServer -config /path/to/server.json -profile /path/to/profile -maxFPS 60
The executable name and paths depend on your installation. The important part is that -config points to the file you edited and -profile points to a writable location whose logs you can inspect.
How do I enable crossplay correctly?
Set game.crossPlatform deliberately rather than enabling it by habit. Turn it on when Xbox or PlayStation players must join a PC-hosted group; leave it off when the event is intentionally PC-only or when you need a narrower test audience.
The official reference lists PC, Xbox, and PlayStation platform keys and recommends the cross-platform switch instead of maintaining a manual platform list. After changing the policy, restart the server and have players clear restrictive browser filters before judging whether the setting worked.
Which performance settings matter most?
Start near the documented defaults, change one setting at a time, and record server frame time, bandwidth, and how clearly players can perceive distant activity. The values below control different bottlenecks and should not be treated as interchangeable.
| Setting | Effect | How to tune it |
|---|---|---|
serverMaxViewDistance |
Limits server-side view distance | Reduce it when long-range simulation is expensive; raise it only when the host remains stable and the scenario needs more reach. |
serverMinGrassDistance |
Enforces a minimum grass distance | Use it to prevent excessively short grass settings from changing the intended tactical view. |
networkViewDistance |
Maximum range for replicated entities; documented default 1500 and range 500–5000 | Lower values reduce replication load but can hide distant entities; increase gradually when bandwidth and frame time allow. |
disableThirdPerson |
Forces first-person play | Enable it when the group’s rules require first-person perspective. |
VONDisableUI |
Changes voice-over-network interface behavior | Use only when the group has a clear reason to remove or alter the interface. |
VONDisableDirectSpeechUI |
Controls the direct-speech interface | Match the group’s communication rules and explain the change to new players. |
VONCanTransmitCrossFaction |
Controls cross-faction voice transmission | Enable only when cross-faction communication is part of the event design. |
Use the FPS cap as a deliberate ceiling
Bohemia’s wording is direct: keep fastValidation set to true, and limit maximum FPS with the -maxFPS startup parameter to save performance. Pick a cap your host can sustain rather than leaving the process uncapped, then observe whether simulation and network behavior remain consistent during a full session.
Do not disable BattlEye casually
BattlEye is enabled by default in the documented configuration. Leave it enabled for public play. Change it only when you understand the security and compatibility consequence and have a specific, documented reason to do so.
How should I balance privacy, visibility, and administration?
Privacy is a combination of password and discoverability, not a single switch. A password-protected server can remain visible so invited players can find it in the browser, or it can be hidden when you distribute the address directly. Use the option that matches how your group admits players.
- Visible private event: set a join password and leave
game.visibleenabled. This is convenient when players need to search for the name. - Hidden private event: set a join password and disable visibility. Share the reachable address and port only with invitees.
- Open public server: leave the join password empty, keep visibility enabled, and retain BattlEye and fast validation.
Keep passwordAdmin separate from the join password. Restrict administrator IDs to people who actually moderate the server, and treat RCON as an additional remote-control surface that should not be exposed unless needed.
Why can’t my friends see or join the server?
Different browser results are often caused by filters, platform restrictions, ping limits, region selection, or crossplay settings rather than a failed launch. Connection failures can also result from different game versions, required user-created mods, firewalls, or another network obstacle.
Run this checklist in order
- Match the branch and version. Confirm that every client and the server use the same stable or experimental branch and current version.
- Match scenario and mods. Verify the exact
scenarioIdand ensure every required mod ID and version is available to joining players. - Check browser controls. Compare
game.visible, crossplay and platform policy, region selection, ping limits, and local browser filters. - Test the public UDP path. From outside the host network, confirm that the configured game port reaches the server and that the host firewall permits it.
- Check the advertised address. This is especially important in Docker or other containerized Linux deployments where an internal address may be published accidentally.
- Read the startup log. Launch with the intended
-configfile and use-listScenarioswhen necessary; inspect the profile logs for JSON, scenario, port, or BattlEye errors.
Change one variable between tests. If the server becomes visible after a filter change but a join still fails, continue with version, mod, firewall, and public-address checks rather than repeatedly editing unrelated gameplay values.
What is the best baseline configuration for a small group?
Use this decision framework instead of copying someone else’s complete file:
- Audience: choose PC-only or crossplay before publishing the server.
- Scale: set
maxPlayersto actual peak attendance and leave room only for realistic guests. - Privacy: combine a join password with visible or hidden listing according to your invitation process.
- Reliability: select dedicated hosting for persistence; use a listen host for occasional PC sessions.
- Performance: begin near defaults, cap FPS, and change view or network distances one at a time.
- Administration: maintain separate join and admin secrets, limit admin IDs, retain BattlEye, and expose RCON only when required.
- Connectivity: forward UDP 2001 for game traffic, add 17777 or 19999 only for the corresponding optional services, and verify the public address externally.
This baseline is intentionally conservative: it keeps security and validation on, avoids an inflated player cap, and postpones distance tuning until you have observations from your own host and scenario.
Frequently Asked Questions
Do I need UDP 17777 and 19999 for ordinary players to connect?
No. Ordinary game traffic uses the configured public game port, documented as UDP 2001 by default. UDP 17777 is for optional A2S queries and UDP 19999 is for optional RCON, so leave both closed when you do not run those services.
What does the -profile launch option change?
It selects the location for server logs and server data instead of leaving those files mixed into the installation directory. Point it to a writable, backed-up location so you can inspect startup failures and preserve useful diagnostics after an update.
Can I run an Arma Reforger server on an IPv6-only connection?
The cited hosting reference does not support IPv6. You need a reachable IPv4 path for the advertised server address; an IPv6-only endpoint will not provide a dependable connection route.
How often should I revisit my server settings after game updates?
Recheck version-sensitive behavior after major updates, especially scenario loading and mission-flow rules. Also confirm that the server branch, required mods, and client versions still match before your next scheduled event.