To make an Arma Reforger server, choose between a PC listen server and a dedicated server. A listen server is the quickest option when the host is also playing; a dedicated server runs the separate ArmaReforgerServer.exe process without a local game instance, so it can stay available for a group or public community. For a dedicated installation, download the stable files with SteamCMD app 1874900, create a case-sensitive JSON configuration, launch it with -config, and forward UDP port 2001 if players will connect over the internet. Optional UDP ports 17777 (A2S queries) and 19999 (RCON) are only needed for those services.
What kind of Arma Reforger server should you make?
Use a listen server for a quick session in which you play on the same machine. Use a dedicated server when the process should continue independently of a player’s game client, support a regular group, or provide a persistent public listing.
| Hosting mode | How it works | Best use | Main trade-off |
|---|---|---|---|
| Player-hosted listen server | The host starts a multiplayer session from the game and also plays in it. | Short PC sessions with friends. | The session depends on the host remaining in-game, and the host machine handles both gameplay and hosting. |
| Dedicated server | A separate server process runs without a game instance and handles game information and network synchronisation. | A group server, scheduled sessions, or a public community. | You must install, configure, update, secure, and troubleshoot the process and network. |
Bohemia Interactive says dedicated-server tools can be hosted locally or through a third-party provider. This guide focuses on running the files yourself, where you control the operating system, configuration, updates, and port forwarding.
What do you need before installing the dedicated server?
Prepare the machine and network first. A dedicated server is easier to diagnose when the installation directory, firewall rule, router rule, and configuration file are planned before the first launch.
- A Windows or Ubuntu machine that can remain online for the intended sessions.
- SteamCMD, installed from Valve’s distribution, for downloading and updating the server files.
- Local administrator or equivalent privileges so you can install SteamCMD, create firewall rules, and write to the server directory.
- A router with configurable port forwarding if players will join from outside your local network.
- A fixed local address or DHCP reservation for the server machine, so a forwarding rule does not point at a different device later.
- The scenario you intend to run, the maximum player count, a visibility choice, and any Workshop mod GUIDs.
Keep the server directory separate from the normal game installation. Give the process enough storage for the base files and Workshop downloads, and leave room for future updates and mod revisions.
How do you install the stable Arma Reforger dedicated-server files?
SteamCMD distributes the dedicated-server branches. App 1874900 is the stable branch; app 1890870 is the experimental branch. Use the stable ID for a dependable public or friends’ server unless you specifically need to test experimental changes.
Install on Windows
- Download and extract SteamCMD to a directory such as
C:steamcmd. - Create a server directory such as
C:ArmaReforgerServer. - Open Command Prompt and run SteamCMD with an explicit install directory:
steamcmd +force_install_dir C:ArmaReforgerServer +login anonymous +app_update 1874900 validate +quit - Wait for SteamCMD to report that the update completed. The executable and supporting files will be in the install directory.
Install on Ubuntu
- Install SteamCMD using Ubuntu’s package instructions, then identify the path to
steamcmd.sh. - Create a dedicated directory, for example
/opt/arma-reforger, and ensure the account that will run the service can write to it. - Run:
./steamcmd.sh +force_install_dir /opt/arma-reforger +login anonymous +app_update 1874900 validate +quit - Run SteamCMD again with the same command whenever you want to update the stable files.
To test the experimental branch, replace 1874900 with 1890870. Do not mix files from the two branches in one directory; use separate install directories so a branch switch cannot leave stale binaries behind.
How do you create the JSON configuration?
Arma Reforger reads a case-sensitive JSON file. Start with the Campaign.json example in the server’s Configs directory, preserve its spelling and capitalization, and edit a copy rather than overwriting the original template.
Set the identity, scenario, and player limit
Your configuration needs a server name, region information, a scenario ID, and a player-count limit. Visibility and password settings determine whether the listing is public and whether a joining player must supply a password.
{
"region": "EU",
"game": {
"name": "VGKAMI Friends",
"scenarioId": "{{SCENARIO_ID}}",
"playerCountLimit": 32,
"visible": true,
"password": "",
"gameProperties": {
"fastValidation": true,
"battlEye": true
},
"mods": []
}
}
{{SCENARIO_ID}} is a template variable: replace it with the scenario ID you want to run. The exact scenario and any additional root networking fields should match the current sample supplied with your server build. JSON is case-sensitive, so scenarioId, fastValidation, and battlEye must not be changed to differently capitalized spellings.
Choose validation and anti-cheat behavior
Keep fastValidation set to true for a public server. The gameProperties object is also where you enable BattlEye in the configuration supplied for your build. If you are adapting an older file, compare every property name with the current template instead of assuming that a similarly named key will be accepted.
Set visibility and password deliberately
A visible server can be found through the in-game browser; a password lets you restrict who enters it. For a private friends’ session, use a non-empty password and share it out of band. For a public listing, leave the password empty only when you are comfortable with anyone who meets the browser and platform conditions attempting to join.
How do you add Workshop mods to a dedicated server?
Add mods in the configuration’s game.mods array. Each entry identifies Workshop content by its GUID in modId; you can also provide a human-readable name, a version, and whether the mod is required.
"mods": [
{
"modId": "{{WORKSHOP_GUID}}",
"name": "Example Scenario Mod",
"version": "{{VERSION}}",
"required": true
}
]
- Find the Workshop GUID for the exact item you intend to use.
- Enter that GUID as
modId; do not substitute the display name. - Pin a known version when you need repeatable sessions. If
versionis omitted, the server uses the latest available version. - Set
requiredtotruewhen every joining client must have the mod. A non-required mod can be removed with a warning if it cannot be downloaded. - Start the server and watch its output for download or dependency errors before inviting players.
Mod consistency matters: a server can be visible yet still reject a client when the required content cannot download or the installed versions do not match. Test a modded configuration with one client first, then add the rest of the group.
How do you start the server process?
Launch the executable from the installation directory and point it at the configuration file. The documented command is:
ArmaReforgerServer.exe -config "./Configs/Campaign.json"
On Linux, invoke the corresponding server executable from the same directory and use the same -config argument. Keep the terminal output or redirect it to your service manager’s log so configuration, mod, and network errors remain available.
Add an FPS cap to prevent the server from consuming all available resources:
ArmaReforgerServer.exe -config "./Configs/Campaign.json" -maxFPS 60
The official hosting guidance recommends a -maxFPS value in the 60–120 range. Start at 60, observe server performance with your intended player count and mods, and increase only when the machine has headroom. The cap controls server processing rather than a player’s render frame rate.
Which ports must you open and forward?
Allow the process through the host firewall, then forward the relevant UDP ports from the router to the server machine’s local address. Internet players cannot reach a server behind NAT until the forwarding rule opens the door to that machine.
| Port | Protocol | Use | When to forward |
|---|---|---|---|
| 2001 | UDP | Default public game connection. | Required for players joining from the internet. |
| 17777 | UDP | A2S server-query traffic. | Optional; use when an external browser or monitoring tool needs A2S information. |
| 19999 | UDP | RCON remote administration. | Optional; use only when you have configured RCON and need remote administration. |
- Assign the server machine a stable local address, for example through a DHCP reservation.
- Create an inbound firewall rule allowing UDP 2001. Add 17777 or 19999 only if you enabled those functions.
- In the router, forward each selected UDP port to the server machine’s local address.
- Restart the server and check its listing from a connection outside your home network. Testing only from the host’s LAN can hide a NAT or router problem.
Forward only the ports you use. If you enable RCON, protect it with the configuration’s authentication settings and a strong, unique password; do not publish administration credentials in a forum or server name.
What changes when you run the server on Linux or in a container?
The official hosting instructions cover Ubuntu SteamCMD installation, but container networking needs an extra check. A container can register its own container IP instead of an address that clients can reach, causing a server that appears to start normally to reject outside connections.
- Use the local bind or register address appropriate to your container and host network layout.
- Ensure the host forwards UDP 2001 to the container’s published port, not merely to an unrelated host port.
- If the documentation’s container setup requires it, connect using the host machine’s local IP rather than the container’s internal address.
- Test from a second machine before adding mods or opening the server publicly.
When diagnosing a container, inspect both the server log and the container’s published-port rules. A healthy process does not prove that the advertised address is reachable.
How do you verify that the server works?
Verification should cover the process, listing, scenario, downloads, and an actual join. Complete these checks in order so a network problem is not mistaken for a mod problem.
- Start with the intended JSON file and confirm that the process remains running instead of exiting on a parse error.
- Search for the server in the in-game browser using its exact name. Clear restrictive filters while testing.
- Confirm that the listed scenario and player limit match the configuration.
- Join from the same local network once, then test from an external network. The second test validates firewall and router forwarding.
- For a modded session, allow the client to download every required item and confirm that the versions agree.
- Have another player join from each platform you intend to support. Platform restrictions and crossplay settings can change who sees or can enter the listing.
- Watch CPU, memory, network, and server logs while several players move through the scenario. Performance problems can look like connection failures.
Why can a server be invisible or impossible to join?
Visibility is affected by more than the process status. Work through the branch that matches the symptom instead of repeatedly reinstalling the server.
The server does not appear for anyone
- Confirm that the process is running the intended configuration and has not stopped after a JSON error.
- Check that UDP 2001 is allowed in the host firewall and forwarded to the correct local address.
- Verify that the router has a public internet connection and is not placing the host behind another layer of NAT.
- Remove browser filters that exclude the server’s region, ping range, platform, or crossplay category.
One player sees it, but another does not
Compare the two browsers’ filters, platform restrictions, region selection, ping limits, and crossplay settings. A listing can be valid while a particular player’s filters or platform rules hide it.
The listing appears, but joining fails
- Confirm that the external player is reaching the forwarded UDP 2001 port rather than a stale router rule.
- Check the server’s advertised or registered address, especially in a container.
- Look for a required mod that cannot download, a missing dependency, or a version mismatch.
- Check server performance and connection stability during the failed attempt.
Players disconnect during a session
Inspect the host’s uplink stability, CPU and memory load, and server log at the time of the disconnect. Reduce the player limit or mod set for a controlled test, and compare a clean unmodded session with the full configuration to isolate content-related failures.
Should you run an unmodded or modded server?
An unmodded server is the simplest baseline; a modded server offers additional content but adds download, dependency, and version-management work.
| Choice | Advantages | Costs and risks | Good practice |
|---|---|---|---|
| Unmodded | Fewer download failures and fewer client compatibility variables. | Limited to the scenarios and systems included with the base installation. | Use it first to validate ports, browser visibility, and basic performance. |
| Modded | Custom scenarios and Workshop content. | Clients must obtain compatible content; updates can change behavior or break a session. | Pin versions for repeatable events, mark essential content required, and test after every mod update. |
What is the difference between self-hosting and a hosting provider?
Self-hosting gives you direct control over files, ports, updates, and logs. A third-party provider can reduce hardware and network maintenance, but you trade some control for the provider’s operating environment and recurring service terms.
| Consideration | Self-hosted machine | Third-party provider |
|---|---|---|
| Setup control | You choose the operating system, files, configuration, firewall, and update schedule. | The provider supplies the environment and its management controls. |
| Maintenance | You handle SteamCMD updates, backups, mod changes, security, and troubleshooting. | The provider handles the underlying machine; you still manage the game configuration and content offered by its control panel. |
| Network exposure | You must configure local firewall rules and router forwarding. | The service normally supplies an internet-reachable endpoint, subject to its own network policies. |
| Cost model | Uses hardware and connection capacity you already operate. | Uses a recurring hosting service charge whose amount depends on the provider and plan. |
Choose self-hosting when you want control and are comfortable maintaining a machine. Choose a provider when avoiding router configuration and hardware uptime work is more important than controlling the underlying environment.
What should you change after the first successful session?
Make one change at a time and keep a known-good copy of the JSON file. This makes it possible to identify whether a new scenario, mod, port, or performance setting caused a regression.
- Save a backup of the working configuration before changing scenario, visibility, password, or mods.
- Record the stable or experimental app ID used for the installation.
- Document every Workshop GUID and pinned version used by your group.
- Review firewall and router rules after changing the server machine’s local address.
- Keep
-maxFPSwithin the documented 60–120 range and adjust only after observing real load. - Retest an external join whenever you change the router, firewall, container networking, or advertised address.
Frequently Asked Questions
Can I switch from the experimental branch back to stable without rebuilding everything?
Use a separate directory for each branch, or stop the server and run SteamCMD with app 1874900 in the directory you intend to keep. Preserve your JSON and mod records, then validate the files and test the scenario before reopening the server.
Why is pinning a Workshop mod version useful for scheduled events?
Without a pinned version, the server uses the latest available release, so a Workshop update can alter content between two events. Recording the GUID and version lets you reproduce a known configuration and postpone updates until you have tested them.
Do I need to forward the A2S and RCON ports for ordinary players?
No. Ordinary game connections use UDP 2001. UDP 17777 is for A2S queries and UDP 19999 is for RCON, so forward them only when you have enabled and actually use those services.
What is the safest way to troubleshoot a new mod?
Keep a working unmodded configuration, add one mod or coherent mod set, and test a local and external join before adding anything else. This separates Workshop download or compatibility failures from firewall and NAT problems.