---
title: "Enshrouded Server Settings and Config File"
description: "Every setting in enshrouded_server.json: difficulty presets, nanosecond durations, why custom gameSettings get ignored, and password-based user groups."
url: "https://www.gameserverkings.com/knowledge-base/enshrouded/configuration-overview/"
category: "Enshrouded"
category_url: "https://www.gameserverkings.com/knowledge-base/enshrouded/"
published: "2026-07-02T03:37:56.269Z"
updated: "2026-08-19T11:25:38.376Z"
source_format: "markdown"
site: "GameServerKings"
---

# Enshrouded Server Settings and Config File

Enshrouded keeps every server setting in one JSON file, `enshrouded_server.json`, in the server root. That makes it simpler than most games — but it also means one misplaced comma stops the server booting at all. This guide covers the file, the difficulty system, the permission groups, and the three things that most often go wrong.

## The file

```json title="enshrouded_server.json"
{
  "name": "My GSK Enshrouded Server",
  "saveDirectory": "./savegame",
  "logDirectory": "./logs",
  "ip": "0.0.0.0",
  "queryPort": 15637,
  "slotCount": 16,
  "tags": [],
  "voiceChatMode": "Proximity",
  "enableVoiceChat": false,
  "enableTextChat": false,
  "gameSettingsPreset": "Default",
  "gameSettings": { },
  "userGroups": [ ],
  "bannedAccounts": []
}
```

| Key | What it does |
|---|---|
| `name` | Name shown in the server browser |
| `slotCount` | Player cap. **The game's own maximum is 16** |
| `tags` | Browser tags for filtering |
| `voiceChatMode` | `Proximity` or global |
| `enableVoiceChat` / `enableTextChat` | Chat toggles |
| `gameSettingsPreset` | Difficulty — see below |
| `gameSettings` | Custom difficulty values, only read in `Custom` mode |
| `userGroups` | Permission tiers, each with its own password |
| `bannedAccounts` | Ban list |

> [!IMPORTANT] `ip` and `queryPort` belong to the panel, not to you
> `0.0.0.0` lets the server bind whatever address the node hands it, and the port is the one on the **Network** tab of your [Enshrouded game server](/games/enshrouded/). `15637` above is Enshrouded's stock default — pasting it over your allocated value puts the server on a port nothing is routed to. The symptom is a perfectly healthy console log that nobody can connect to.
>
> On a hosted server you do not need to set it at all: the panel rewrites `queryPort` to your allocation on **every** boot, so an edit here is discarded on the next restart. That is a feature — it means the port can never drift away from what is actually routed to you.
>
> Note there is **one** port key. Enshrouded no longer uses a separate `gamePort` alongside `queryPort`; older guides that list both are out of date.

## Difficulty presets

`gameSettingsPreset` takes one of five values:

| Preset | Roughly |
|---|---|
| `Default` | The standard experience |
| `Relaxed` | Fewer enemies, more resources — for building and light adventuring |
| `Hard` | Tougher combat |
| `Survival` | The most demanding preset |
| `Custom` | Use your own `gameSettings` values |

> [!WARNING] `gameSettings` is ignored unless the preset is `Custom`
> This is the single most common Enshrouded configuration mistake. If `gameSettingsPreset` is anything other than `"Custom"`, the server loads that bundled preset and silently ignores every value in your `gameSettings` block. No error, no console warning — your carefully tuned multipliers simply do nothing.
>
> Set `"gameSettingsPreset": "Custom"` **first**, then edit `gameSettings`.

## Custom difficulty settings

With the preset set to `Custom`, the `gameSettings` block controls everything. Defaults shown:

```json title="enshrouded_server.json"
"gameSettings": {
  "playerHealthFactor": 1,
  "playerManaFactor": 1,
  "playerStaminaFactor": 1,
  "playerBodyHeatFactor": 1,
  "playerDivingTimeFactor": 1,
  "enableDurability": true,
  "enableStarvingDebuff": false,
  "foodBuffDurationFactor": 1,
  "fromHungerToStarving": 600000000000,
  "shroudTimeFactor": 1,
  "tombstoneMode": "AddBackpackMaterials",
  "enableGliderTurbulences": true,
  "weatherFrequency": "Normal",
  "fishingDifficulty": "Normal",
  "miningDamageFactor": 1,
  "plantGrowthSpeedFactor": 1,
  "resourceDropStackAmountFactor": 1,
  "factoryProductionSpeedFactor": 1,
  "perkUpgradeRecyclingFactor": 0.5,
  "perkCostFactor": 1,
  "experienceCombatFactor": 1,
  "experienceMiningFactor": 1,
  "experienceExplorationQuestsFactor": 1,
  "randomSpawnerAmount": "Normal",
  "aggroPoolAmount": "Normal",
  "enemyDamageFactor": 1,
  "enemyHealthFactor": 1,
  "enemyStaminaFactor": 1,
  "enemyPerceptionRangeFactor": 1,
  "bossDamageFactor": 1,
  "bossHealthFactor": 1,
  "threatBonus": 1,
  "pacifyAllEnemies": false,
  "tamingStartleRepercussion": "LoseSomeProgress",
  "dayTimeDuration": 1800000000000,
  "nightTimeDuration": 720000000000,
  "curseModifier": "Normal"
}
```

### The durations are in nanoseconds

This trips up almost everyone. `dayTimeDuration`, `nightTimeDuration` and `fromHungerToStarving` are **nanoseconds**, not seconds:

| Value | Nanoseconds | Real time |
|---|---|---|
| `dayTimeDuration` | `1800000000000` | 30 minutes |
| `nightTimeDuration` | `720000000000` | 12 minutes |
| `fromHungerToStarving` | `600000000000` | 10 minutes |

To convert, multiply seconds by 1,000,000,000. A one-hour day is `3600000000000`. Writing `1800` gives you a day roughly two microseconds long, which is exactly as broken as it sounds.

### The factors

Everything ending in `Factor` is a multiplier where `1` is baseline. Raising a *player* factor helps players; raising an *enemy* factor makes the game harder.

| Group | Keys |
|---|---|
| Player survivability | `playerHealthFactor`, `playerManaFactor`, `playerStaminaFactor`, `playerBodyHeatFactor`, `playerDivingTimeFactor` |
| Enemies | `enemyDamageFactor`, `enemyHealthFactor`, `enemyStaminaFactor`, `enemyPerceptionRangeFactor`, `threatBonus` |
| Bosses | `bossDamageFactor`, `bossHealthFactor` |
| Gathering and crafting | `miningDamageFactor`, `resourceDropStackAmountFactor`, `plantGrowthSpeedFactor`, `factoryProductionSpeedFactor` |
| Progression | `experienceCombatFactor`, `experienceMiningFactor`, `experienceExplorationQuestsFactor`, `perkCostFactor`, `perkUpgradeRecyclingFactor` |
| Survival pressure | `enableDurability`, `enableStarvingDebuff`, `foodBuffDurationFactor`, `shroudTimeFactor` |

The named (non-numeric) options take words rather than numbers: `randomSpawnerAmount`, `aggroPoolAmount`, `weatherFrequency`, `fishingDifficulty` and `curseModifier` all accept values like `Normal`; `tombstoneMode` and `tamingStartleRepercussion` take behaviour names such as `AddBackpackMaterials` and `LoseSomeProgress`.

A relaxed co-op preset, for example:

```json
"gameSettingsPreset": "Custom",
"gameSettings": {
  "playerHealthFactor": 1.5,
  "playerStaminaFactor": 1.5,
  "enemyHealthFactor": 0.8,
  "enemyDamageFactor": 0.8,
  "resourceDropStackAmountFactor": 2,
  "enableStarvingDebuff": false
}
```

You only need to include the keys you are changing.

## Permission groups

Enshrouded has no Steam ID admin list. Access is controlled entirely by **which password a player enters when joining** — each group has its own.

Your server ships with four groups, and these are the exact values it starts from:

```json title="enshrouded_server.json"
"userGroups": [
  {
    "name": "Admin",
    "password": "ChangeMe1",
    "canKickBan": true,
    "canAccessInventories": true,
    "canEditWorld": true,
    "canEditBase": true,
    "canExtendBase": true,
    "reservedSlots": 0
  },
  {
    "name": "Friend",
    "password": "ChangeMe2",
    "canKickBan": false,
    "canAccessInventories": true,
    "canEditWorld": true,
    "canEditBase": true,
    "canExtendBase": true,
    "reservedSlots": 1
  },
  {
    "name": "Guest",
    "password": "ChangeMe3",
    "canKickBan": false,
    "canAccessInventories": false,
    "canEditWorld": false,
    "canEditBase": false,
    "canExtendBase": false,
    "reservedSlots": 3
  },
  {
    "name": "Visitor",
    "password": "ChangeMe4",
    "canKickBan": false,
    "canAccessInventories": false,
    "canEditWorld": false,
    "canEditBase": false,
    "canExtendBase": false,
    "reservedSlots": 0
  }
]
```

Note that Guest and Visitor ship identical apart from `reservedSlots`, and that Friend gets `canExtendBase` — it can place and remove Flame Altars, which is a wider grant than the name implies.

| Permission | Grants |
|---|---|
| `canKickBan` | Kick and ban other players |
| `canAccessInventories` | Open chests and other players' storage |
| `canEditWorld` | Terrain editing — the destructive one |
| `canEditBase` | Build and remove inside existing base bounds |
| `canExtendBase` | Extend base boundaries outward |
| `reservedSlots` | Slots held open for this group when the server is full |

> [!CAUTION] Set the four passwords on the **Startup** tab, not in this file
> The panel writes all four group passwords into `enshrouded_server.json` on every boot, from the **Startup** tab. A password you type into the file works until the next restart and then reverts, with nothing in the console to tell you why. The panel also pins the *names* of groups 2, 3 and 4 to `Friend`, `Guest` and `Visitor`, so keep four groups in this order — the passwords are matched by position, not by name.
>
> They ship as `ChangeMe1` through `ChangeMe4`. Change them before you hand out your address. Everything else above — every permission flag and `reservedSlots` — is yours to edit here, and those edits stick. Full detail in [How to add Admins and common commands for Enshrouded](/knowledge-base/enshrouded/how-to-add-admins-and-commands/).

## Editing the file safely

> [!IMPORTANT] Stop the server before editing
> Enshrouded writes its current settings back to `enshrouded_server.json` when it shuts down. Editing while the server is running means your changes get overwritten on the next stop. The order that works is **stop → edit → save → start**.
>
> There is a second, separate overwrite to know about: on each boot the panel re-applies `name`, `queryPort`, `slotCount` and all four group passwords from the **Startup** tab. Those seven settings are not worth editing here at all — change them on the Startup tab instead.

And because the whole configuration is one JSON document:

> [!CAUTION] A malformed file stops the server booting — it does not silently reset
> The whole file is parsed as one document, and if that parse fails the server aborts startup instead of falling back to defaults. Keen's own server settings documentation is explicit: enter an invalid text value and "the server does not boot and states the incorrectly entered value in the command window". The console ends on `Internal Error: Failed to parse Config`. A pure syntax error — a trailing comma, an unquoted string, a smart quote pasted from a web page — fails the same parse in the same way.
>
> That is the outcome you want. A broken config announces itself in the console rather than leaving you on a running server that quietly ignored your settings. If the server came up, it read your file.
>
> Numbers are the one exception, and they are adjusted rather than reset: a numeric value above or below its allowed range is silently clamped to the nearest limit, with no warning. Text values get no such leniency.
>
> Paste the file into a JSON validator before restarting, and keep a copy of a config you are happy with. See [How to Upload Files via SFTP](/knowledge-base/general/how-to-upload-files-via-sftp/) for moving files in and out.

## What to read next

- [Getting started with your Enshrouded server](/knowledge-base/enshrouded/getting-started-with-your-server/) — first boot, connecting, wipes and backups
- [How to add Admins and common commands for Enshrouded](/knowledge-base/enshrouded/how-to-add-admins-and-commands/) — using the Admin group password in game
- [How to use your server panel](/knowledge-base/general/how-to-use-your-server-panel/) — where the Network and File Manager tabs live

## FAQ

### Why are my custom difficulty settings being ignored?

`gameSettingsPreset` is not set to `"Custom"`. Any other value loads a bundled preset and ignores the `gameSettings` block entirely, with no error.

### What are the Enshrouded difficulty presets?

`Default`, `Relaxed`, `Hard`, `Survival`, and `Custom`.

### Why is my day length wrong?

`dayTimeDuration` is in nanoseconds. 30 minutes is `1800000000000` — multiply the seconds you want by 1,000,000,000.

### How do I make someone an admin?

Give them the password of a group that has the permissions you want — Enshrouded has no Steam ID list, so the password *is* the permission. Set that password on the **Startup** tab and restart; setting it in `enshrouded_server.json` reverts on the next boot.

### How many players can an Enshrouded server hold?

The game caps `slotCount` at 16.

### Why do my config changes keep reverting?

Two different causes. Either you edited the file while the server was running — Enshrouded rewrites it on shutdown from its in-memory settings, so stop the server first. Or you edited one of the seven panel-managed settings: `name`, `queryPort`, `slotCount` and the four group passwords are re-applied from the **Startup** tab on every boot, and those must be changed there instead.

### My server will not start after I edited the config

Read the console. If it ends on `Internal Error: Failed to parse Config`, `enshrouded_server.json` is not valid — either a JSON syntax error, or a text value the server does not recognise, which it names on the line above. Fix that entry and start again. The server never boots on defaults when the file is broken, so a server that starts has read your file.

### Do I need both gamePort and queryPort?

No. Current Enshrouded uses a single `queryPort`, and on a hosted server it should match the allocation on your Network tab. Guides listing both `gamePort` and `queryPort` are out of date.

---

Made with 💜 by GameServerKings
