Arma Reforger Mods: How to Add Workshop Mods to a Dedicated Server
Add Arma Reforger mods to a dedicated server: mod IDs, the config.json mods array, version pinning, scenario IDs and what the GSK panel rewrites.
Arma Reforger mods come from Bohemia's own Workshop, not from Steam, and a dedicated server never needs you to upload mod files. You list each mod in the server's config.json, the server downloads it from the Workshop when it starts, and every player who joins downloads the same set automatically. This guide covers where to find a mod's ID, the exact mods entry format, how the GameServerKings (GSK) panel treats config.json, and what to check when a modded server won't start.
If you only want to play with mods on your own PC, subscribe in the in-game Workshop and you are done. Everything below is about the server side.
How Reforger Server Mods Work
Each entry in the game.mods array of config.json is one Workshop item. Bohemia's server config reference describes the list as "the list of mods required by the client that will automatically be downloaded and activated on join". So there is one list, and the server and players both load it:
- The server reads the list at boot, downloads anything missing or outdated from the Workshop, and loads it.
- Players see the server's mod list when they join, and the game downloads the same mods for them.
There is no separate client-only mod list for players, no @folder upload and no key files like Arma 3 uses. If a mod is in mods, it is part of the server.
Step 1: Find the Mod ID (and Version)
Open the mod on the Arma Reforger Workshop. The ID is the 16-character hex GUID at the start of the page address. For example, in reforger.armaplatform.com/workshop/5D6EBC81EB1842EF-EnfusionPersistenceFramework the ID is 5D6EBC81EB1842EF. The page also shows the current version number and a Dependencies list.
Write down the dependencies too. Many game modes are built on shared frameworks. Freedom Fighters, for example, depends on Enfusion Persistence Framework (5D6EBC81EB1842EF), which depends on Enfusion Database Framework (5D6EA74A94173EDF). Put every dependency in your list as its own entry, rather than relying on the server to find them for you.
Let the game write the list for you
In the game, enable the mods you want in the Workshop, then open the Mod manager, switch to the JSON tab and click Copy to clipboard. Bohemia documents this as producing a string that is "ready to be used" in the server config. Paste it into the
modsarray and check it against the Workshop pages.
Step 2: Add the Mods to config.json
- Stop the server in the GSK panel.
- Open Files and edit
config.jsonin the server root (or download it over SFTP if you prefer a local editor). - Inside the
"game"block, replace"mods": []with your list:
"mods": [
{
"modId": "5D6EA74A94173EDF",
"name": "Enfusion Database Framework"
},
{
"modId": "5D6EBC81EB1842EF",
"name": "Enfusion Persistence Framework"
},
{
"modId": "CAFEBEEFF0CACC1A",
"name": "Freedom Fighters",
"version": "0.70.1"
}
] - Save and start the server. The first boot after adding mods takes longer while they download. The panel marks the server as online when the console prints
Starting RPL server.
What each field does, per Bohemia's reference:
| Field | Required | What it does |
|---|---|---|
modId |
Yes | The Workshop GUID. This is the only field the server uses to find the mod. |
name |
No | A label for you. "This parameter does not do anything." |
version |
No | Pins an exact version. Leave it out to always use the latest. |
required |
No | Defaults to true. If set to false, a mod that fails to download is dropped from the list with a warning in the log, instead of stopping the server. |
Setting "modsRequiredByDefault": false in the game block flips the default for every entry at once.
JSON is strict
A missing comma between two
{ … }entries, or a trailing comma after the last one, makes the whole file unreadable. If the server stops right after you editconfig.json, check the commas first.
What the GSK Panel Rewrites (and What It Leaves Alone)
The Arma Reforger egg treats config.json as a managed file. On every start it writes these values from your Startup tab into the file, overwriting whatever you typed there:
| config.json key | Startup variable |
|---|---|
game.name |
Server Name |
game.password |
Server Password |
game.passwordAdmin |
Admin Password |
game.scenarioId |
Scenario ID |
game.maxPlayers |
Max Players |
game.visible |
Visible in Server Browser |
game.gameProperties.battlEye |
Enable BattlEye |
game.gameProperties.disableThirdPerson |
Disable Third Person |
It also sets the bind and public address and port from your allocation. game.mods is not on that list, so your mod list survives restarts. Change the scenario, name and passwords in Startup, and change mods in config.json.
This matters most for scenario mods. A mod that adds a game mode does nothing until the server runs one of its scenarios, and you set that in the Scenario ID variable, not in config.json. The server is started with -listScenarios, so after a boot with the mod installed, the console prints every scenario it can see, mod scenarios included. Copy the full ID, for example {64B2F8D8059EE270}Missions/FreedomFighters/Everon.conf, into Scenario ID and restart.
Where the Files Go
The server stores downloaded mods inside the profile folder (the egg starts it with -profile ./profile). You don't have to manage these files, and you shouldn't upload mods there by hand to "help". The Workshop download is the supported route. Large mods take up your disk quota, so if you remove a mod from the list and want the space back, stop the server and delete that mod's folder from the addons folder inside profile/ (look through profile/ in Files, because the exact nesting depends on the server version). If you're not sure which folder is which, contact support before deleting anything.
Temporary download data goes in tmp/ in the server root (-addonTempDir ./tmp).
Updating Mods
With Automatic Updates on (the default), the egg checks for server updates each time it starts. Mods follow the version field:
- No
version: the server takes the latest Workshop version at each start. Players get the same version when they join, so mismatches are rare. - Pinned
version: the server stays on that version until you change it. That's useful when an update breaks your campaign, but players may then need to download an older build to join.
Each Workshop release lists the game version it was built for. After a Reforger game update, check that your mods have a matching release before you restart a server with a long campaign on it, and take a backup first.
Troubleshooting a Modded Server
| Symptom | Likely cause |
|---|---|
Server stops right after config.json was edited |
JSON syntax: a comma or a bracket |
| Log warns a mod was removed from the list | It failed to download and has "required": false. Check the ID. |
| Server runs but the game mode is vanilla | Scenario ID still points at a base-game scenario |
| Server won't load the mod's scenario | Copy the ID again from the -listScenarios output. It must match exactly, braces included. |
| A mod stopped working after a game update | Check its Workshop page: each release lists the game version it was built for |
| Friends can't see the server at all | See players can't connect |
Console players can join modded servers too: update 1.4 enabled the Workshop on PlayStation 5, with 25 GB of storage for downloads. That cap is one more reason to keep a crossplay server's mod list lean.
For the panel basics used above (Files, Startup, Console), see How to use your server panel.
Made with 💜 by GameServerKings

Need an Arma Reforger server?
Deploy an instantly-provisioned Arma Reforger server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $7.80 /month