KnowledgePuck

Puck Server Config Explained: server_config.json and Game Modes (2026)

Every key in Puck's server_config.json, public and competitive game mode configs, phaseDurationMap, period length, tick rate and the Steam ID files, with defaults.

Updated Oct 1, 2026 · 6 min read

On this page

A Puck dedicated server is configured with a handful of JSON files in its folder. server_config.json holds the server itself: name, port, player limit, password, tick rate, mods and game mode. Two game mode files hold the rules, such as period length and how many periods a game has, and three plain lists hold admins, bans and the whitelist. This guide explains every key in the current build (B1235) with its default, and the mistakes that stop a server from starting.

Older guides mention server_configuration.json, ports 7777 and 7778, adminSteamIds inside the config or a Puck.x86_64 start command. Those are from builds before the May 2026 matchmaking update and no longer apply.

The files at a glance

File What it holds If it is broken
server_config.json Server settings The server refuses to start
public_game_mode_config.json Rules for public games Falls back to default rules
competitive_game_mode_config.json Rules and teams for competitive games Falls back to default rules
admin_steam_ids.json Admin SteamID64s Keeps the previous list
banned_steam_ids.json Banned SteamID64s Keeps the previous list
banned_ip_addresses.json Banned IP addresses Keeps the previous list
whitelisted_steam_ids.json Players allowed when the whitelist is on Keeps the previous list

The three lists are watched and reload as soon as they are saved. Changes to server_config.json and the game mode files need a restart.

server_config.json

These are the server's built in defaults:

{
  "port": 30609,
  "name": "MY PUCK SERVER",
  "maxPlayers": 12,
  "password": null,
  "tickRate": 200,
  "isPublic": true,
  "useVoip": false,
  "useWhitelist": false,
  "mods": [],
  "gameMode": "public",
  "level": "default"
}
Key Type Default What it does
port number 30609 The game port. Gameplay uses UDP and the server browser ping uses TCP, both on this number.
name text MY PUCK SERVER Name in the server browser. Unity rich text tags such as colors work, but keep it short and readable.
maxPlayers number 12 Slots, spectators included. Admins can still join when it is full.
password text or null null null means anyone can join. Any text makes players enter it.
tickRate number 200 How many times per second the server simulates physics.
isPublic true or false true Lists the server in the in game server browser.
useVoip true or false false Voice chat on the server. The pause menu shows players whether it is on.
useWhitelist true or false false Only Steam IDs in whitelisted_steam_ids.json can join.
mods list empty Steam Workshop mods, see below.
gameMode text public public or competitive.
level text default The rink. Leave it on default, the standard rink.

Tick rate

Puck simulates the puck, sticks and bodies on the server, then sends the result to players. A higher tick rate makes stickhandling feel tighter, a lower one makes it feel sluggish. Puck's own cloud servers and matchmaking servers run at 200, which is the right choice for almost everyone. Going higher only helps if the CPU can hold it with a full rink. If the server cannot keep up, everyone feels it.

Mods

Each mod is an object with three keys:

"mods": [
  { "id": "3721801263", "isEnabled": true, "isClientRequired": false }
]

id is the Steam Workshop id as text (in quotes). isClientRequired: true makes every player download the mod when they connect. More in how to add mods to a Puck server.

Game mode configs

public_game_mode_config.json and competitive_game_mode_config.json share the same rule keys. The server picks the file that matches gameMode.

Key Default What it does
phaseDurationMap see below Seconds each game phase lasts
spawnDelay 10 Seconds before players spawn at the start of a phase
maxPeriods 3 Periods per game
goalSlowMotion true Slow motion replay and celebration camera after a goal
goalieCreaseProtection true Filters body to body contact inside the goalie crease. Intruding players show as a ghost.
teamAssignments empty Competitive only: SteamID64s on Blue and Red

phaseDurationMap

Phase Default seconds What it is
None 0 No game running
Warmup 60 Free skate before the game. If there are not enough players, warmup is extended.
PreGame 10 Short lead in after warmup, before play begins
FaceOff 4 The faceoff itself
Play 300 Play time per period, the period length
BlueScore 4 Pause after Blue scores
RedScore 4 Pause after Red scores
Replay 9 Goal replay
Intermission 10 Break between periods
GameOver 30 Final score screen
PostGame 10 After the final score screen

The game clock runs through 0:00 before a phase ends. The map you write replaces the built in one, so always include every phase, not just the ones you change. A full example with 10 minute periods:

{
  "phaseDurationMap": {
    "None": 0,
    "Warmup": 60,
    "PreGame": 10,
    "FaceOff": 4,
    "Play": 600,
    "BlueScore": 4,
    "RedScore": 4,
    "Replay": 9,
    "Intermission": 10,
    "GameOver": 30,
    "PostGame": 10
  },
  "spawnDelay": 10,
  "maxPeriods": 3,
  "goalSlowMotion": true,
  "goalieCreaseProtection": true
}

teamAssignments (competitive)

"teamAssignments": {
  "Blue": ["76561198000000000", "76561198000000001"],
  "Red": ["76561198000000002", "76561198000000003"]
}

Listed players are put on their team, everyone else goes to spectator. That makes competitive mode the right choice for league games and scrims, and the wrong one for an open pickup server. Walkthrough: how to set up a Puck league server.

Mistakes that stop a server

The server uses a strict JSON reader:

  • No comments and no trailing commas. A comma after the last item in a list or object is an error.
  • Text in quotes, numbers without. "maxPlayers": "12" fails, and so does a mod id without quotes.
  • Exact key names. Keys are case sensitive: maxPlayers works, MaxPlayers does not.

When server_config.json is invalid, the log names the file, the line and the key, and the server stays off until it is fixed. A bad game mode file only logs an error and falls back to the default rules, which is easy to miss, so read the log after any edit.

Launch options

Every file path can be changed on the command line, for example to run several servers from one install: --serverConfigPath, --publicGameModeConfigPath, --competitiveGameModeConfigPath, --adminSteamIdsPath, --bannedSteamIdsPath, --bannedIpAddressesPath, --whitelistedSteamIdsPath and --logPath (default ./Logs/Puck.log). --serverConfig, --publicGameModeConfig and --competitiveGameModeConfig take the JSON inline instead of a file.

On GamezServers

On a GamezServers Puck server the common keys are settings in the panel: join password, game mode, period length, periods, warmup, crease protection, goal slow motion, public listing, voice chat, whitelist, admins and tick rate. They are written into the files on every start, and the player limit follows your plan. Anything else, like mods or team assignments, you edit in Files, and your edits are kept through updates. See the quick start guide or Puck admin commands.

Skip the setup. Your own Puck server.

$1.49USD first month

Then $2.99/mo. Just trying it? $0.75 for 3 days

Keep reading