Configuration#
Two files hold everything — and you rarely need to touch either by hand, because every setting is editable from the admin panel with a description next to it.
config/config.json— all non-secret configuration (admin panel → Server, Manager, Frontend, Discord sections).env— secrets: tokens, passwords, OAuth credentials
On every update, newly added settings are filled in with defaults automatically — your values are never overwritten. Features marked 💎 need an active Premium subscription.
Server & launch#
| Setting | What it does |
|---|---|
publicIP | the connect address shown to players (game port + 2) |
serverArgs | port, query port, max players, BattlEye toggle, custom launch args |
serverDir / savedDir / backupRoot | where the server, its save and the backups live |
startServerWithManager | start the game server whenever the manager starts |
autoStartOnBoot | start the manager at Windows boot (Scheduled Task) |
serverPriority | process priority for the server (idle → high) |
stopTimeoutSeconds | how long a graceful stop may take before force-kill |
The game server is stopped gracefully (the same as pressing Ctrl+C in its console), so the world is saved on every stop, restart and update.
Restarts, backups, updates#
| Setting | What it does |
|---|---|
restartTimes | daily restart schedule (HH:mm list) — players get 15/5/1-minute in-game warnings |
autoRestart | automatic crash recovery for the game server, with a cooldown and an attempt limit |
autoRelaunchOnCrash | if the manager itself stops on an error, start it again (default on). Without it your server keeps running but nothing is watching it — no monitoring, no scheduled restart, no backups. A crash in the first minute after starting does not relaunch: a fault that early would just repeat, so the log tells you instead of looping |
periodicBackupEnabled + backupIntervalMinutes | scheduled backups |
maxBackups / compressBackups | retention and zip compression |
preRestartBackupEnabled / runBackupOnStart | extra safety backups |
runUpdateOnStart / updateCheckIntervalMinutes / updateDelayMinutes | SteamCMD game updates — checked on a schedule, applied with player warnings |
Backups are taken while the server keeps running, and SCUM.db is the one file where that matters: the game keeps part of its live state in a write-ahead log (SCUM.db-wal), so copying those files one after another can capture halves that don't belong together — a backup that looks fine and only fails when you actually need it. The manager instead asks SQLite for a consistent snapshot of the database, which is why a backup contains SCUM.db but no -wal/-shm files: their contents are already in the snapshot. Restoring by hand: copy the save files back, and delete any leftover SCUM.db-wal and SCUM.db-shm in the target folder before starting the server.
Monitoring & logs#
| Setting | What it does |
|---|---|
monitoringIntervalSeconds | how often FPS/CPU/RAM are sampled (default every second) |
performanceThresholds + performanceAlertThreshold | FPS bands that trigger Discord performance alerts |
dataRetention | how long kill-feed, trade, notification and chat history is kept (chat is now stored in the manager's database, so it survives log rotation; chatMessageDays defaults to 90). adminAuditDays covers the admin activity trail and defaults to 365 — it answers "who changed this", which is usually asked long after the fact; it is never pruned below 7 days |
consoleLogLevel / logRotationEnabled / maxLogFileSizeMB | manager log verbosity and rotation |
Web panel (web)#
| Setting | What it does |
|---|---|
port / bindAddress | where the panel listens (default 8080 on all interfaces) |
publicUrl | the public URL of your Field Console — Discord embeds link to it |
adminAllowlist | optional IP/CIDR allowlist for the admin panel |
adminChatName | the name your players see on chat you send from the panel without picking a player — in game, on the website and on Discord. Default Server; set it to ADMIN, your server's name, or anything in your own language. Empty = send with no name, as before |
adminLanguage | admin panel language |
trustProxy / cookieSecure / ssl / httpRedirectPort | HTTPS setup — see Domain & HTTPS |
fieldConsole | which public tabs are visible / login-gated — see Public Field Console |
Your scumsa.com Premium credentials are entered in the admin Premium tab, not in the config file — see Premium.
Discord (Discord)#
| Setting | What it does |
|---|---|
GuildId | your Discord server — slash commands are registered there |
Presence | the bot's "Watching" activity, with a live {players} counter |
LiveEmbeds | channels + refresh intervals for the self-updating status / players / bunkers / economy / leaderboard embeds |
Notifications | which alert goes to which channel, with optional role pings |
ChatRelay | game ↔ Discord chat relay channels and rules |
SlashCommands.AdminRoles | Discord roles allowed to use admin commands |
CommandRelay | 💎 a Discord channel where admins type SCUM game commands (#SpawnItem …) and the manager runs them through the SSA Bridge — edited under Discord → Command relay |
AccountLinking | give linked players a Discord role (removed on unlink) and, with Premium + the SSA Bridge, confirm the link in their in-game chat — edited under Discord → Account linking |
Account linking (edited under Discord → Account linking):
- Turn on Assign a role on link and paste a role ID — every player who links their SCUM account gets that Discord role (and loses it when they unlink), so linked members stand out.
- "Apply role to all linked members" gives the role to everyone who linked before you switched it on.
- With Premium 💎 and the SSA Bridge online, players also get a confirmation written straight into their in-game chat the moment they link.
- It all works the same whether players link from Discord (
/link-account) or the Field Console.
Per-feed settings (kill feed, login feed, economy feed, and the rest) live under SCUMLogFeatures — each feed has its own channel and toggles. See Discord bot.
The economy feed's delay is the anti-snipe setting: it holds back both recent trades and trader funds on the Field Console, so nobody can watch restocks and price swings as they happen. Set it to whatever you like — the manager keeps enough history to cover it. It can't be shortened from the browser; the delay is applied on the server. Right after you raise it, funds show current values for a little while, until that much history has been recorded.
Player Intelligence (playerIntel) 💎#
Edited in the admin panel under Discord → Player intelligence (see player management).
| Setting | What it does |
|---|---|
enabled | enrich every join into a local risk verdict (default on; needs Premium at run time) |
alertChannel | Discord channel ID for a risk alert on a risky join — blank = risk badge only, no message |
alertThreshold | watch (alert on Watch and High) or high (High only). Alerts only notify — never auto-act |
If you turn on the automatic kick or ban, the "skip Discord-linked" and "skip reviewed" exemptions are re-checked at the moment the action fires — so marking someone reviewed during the grace period still saves them. And if the manager can't check at that moment, it doesn't act: a player you protected is never banned on the strength of a lookup that failed.
A timed ban lifts itself when its hours are up, including one that expired while the manager was off — it's checked at startup and every minute after. The record of when each ban ends is written safely, so an interrupted save can't turn your temporary bans into permanent ones, and if that record ever can't be read you'll see a warning in the log rather than silently banned players.
Kept out of the rankings (leaderboardExclude)#
Who never shows up in a leaderboard. Until now admins were simply always hidden, which is not what every server wants — plenty of owners play on their own server and would like to compete, and the accounts that really need hiding are more often a test character, a builder squad or an event team.
| Setting | What it does |
|---|---|
admins | hide everyone listed in AdminUsers.ini. On by default, so nothing changes unless you turn it off |
steamIds | hide individual players from the player leaderboards |
squadIds | hide squads from Top Squads and the squad list — the people in them stay on the player leaderboards |
The two are separate on purpose. Hiding a squad does not hide its members, and hiding a player does not hide their squad — an event team should not disappear from Top Kills just because their squad is not competing for the squad title.
One setting covers everywhere: the Leaderboards tab, the Overview, the weekly snapshot and the Discord embeds. Somebody you exclude can still see their own stats — being left off the board is not being erased.
Edit it in the admin panel under Frontend → Kept out of the rankings. Both lists have a search: players by name or Steam ID, squads by name or id with how many members they have, so two squads called the same thing are still telling apart. You can also just paste ids into the box underneath — useful for somebody who has not joined your server yet, or for a list a fellow admin sent you.
Economy traders (economyTraderMap)#
SCUM stores traders only by a bare id — there's no record of which outpost a trader sits in — so you map them once under Frontend → Economy traders:
- The editor auto-groups traders into outposts and guesses each type from what it sells (clean on a freshly-wiped server, where every outpost has 9 traders in a fixed order).
- Set each group's outpost with "Set all to" and fix any wrongly guessed type.
- Hit "Copy types → all outposts" to apply one outpost's order to the rest.
Traders then show up correctly and fully localized across the Field Console, Discord and recent trades. The mapping is keyed by the stable trader id, so trading never disturbs it.
.env (secrets)#
DISCORD_TOKEN= # bot token — empty disables the bot
WEB_ADMIN_PASSWORD= # the recovery admin password
SESSION_SECRET= # generated automatically
DISCORD_CLIENT_ID= # Discord OAuth (player + admin "Login with Discord")
DISCORD_CLIENT_SECRET=
DISCORD_OAUTH_REDIRECT= # https://your-domain/api/auth/discord/callback
You don't have to edit this file by hand either: the bot token and OAuth credentials are editable live from the admin Discord section — saving applies immediately, no manager restart needed.
