How toPuck

How to Set Up a Puck League Server (Competitive Mode, 2026)

Run Puck league games and scrims on your own server: competitive mode, teamAssignments, whitelist, passwords, period rules, admins and how many slots a 5v5 or 6v6 needs.

Updated Oct 1, 2026 · 5 min read

On this page

Puck leagues, clubs and scrim groups need a server that does three things the public lobbies do not: keep the right players on the right teams, keep everyone else out or in spectator, and run the same rules every game. A Puck dedicated server does all of it with competitive mode, teamAssignments, a whitelist and the game mode config. This guide sets up a league server from scratch, with examples for 5v5 and 6v6.

Public vs competitive mode

The server runs one of two game modes, set by gameMode in server_config.json:

Public Competitive
Who plays Anyone picks Blue or Red Only Steam IDs listed under Blue and Red
Everyone else Plays too Spectates
Votekick On, decided by a majority of the whole lobby Off, only admins can kick
Rules file public_game_mode_config.json competitive_game_mode_config.json
Best for Pickup games, open club nights League games, scrims, tournaments

Pickup nights run fine in public mode with a password. Switch to competitive when teams must be fixed, for example a league game with a caster and a few spectators on the server.

How many slots do you need?

Every connected player counts toward maxPlayers, spectators included.

Format Players on the ice Suggested slots
3v3 with goalies 8 12
5v5 with goalies 12 12 to 16
6v6 (5 skaters and a goalie each) 12 12, more for subs
League night with subs, referee and caster 12 plus extras 20

Admins can join a full server, so a league admin can always get in to sort things out. Memory is not the limit here: one Puck server uses about 300 MB. A fast CPU core matters more, because it has to hold the tick rate with every player on the ice.

Step 1: Lock the server down

Pick one or both:

  • Password: set "password": "YourPassword" in server_config.json. Simple, and easy to rotate each season.
  • Whitelist: set "useWhitelist": true and list every rostered player's SteamID64 in whitelisted_steam_ids.json:
["76561198000000000", "76561198000000001", "76561198000000002"]

The whitelist reloads as soon as you save it, so adding a new signing does not need a restart. For a league that wants the server hidden, also set "isPublic": false. Players then join with Direct Connect, see how to join a Puck server.

Step 2: Add your league admins

List admins in admin_steam_ids.json in the same format. Admins can /pause for a disconnect, /resume, /skip a phase, /start the game, send it back to /warmup, and /kick or /ban anyone. Pauses and skips are announced in chat with the admin's name, which keeps things transparent in a league game. Full list: Puck admin commands.

Step 3: Set the teams

Switch the mode in server_config.json:

"gameMode": "competitive"

Then fill in competitive_game_mode_config.json. A 6v6 example with placeholder IDs, replace them with your players' real SteamID64s:

{
  "teamAssignments": {
    "Blue": [
      "76561198000000001", "76561198000000002", "76561198000000003",
      "76561198000000004", "76561198000000005", "76561198000000006"
    ],
    "Red": [
      "76561198000000011", "76561198000000012", "76561198000000013",
      "76561198000000014", "76561198000000015", "76561198000000016"
    ]
  },
  "phaseDurationMap": {
    "None": 0,
    "Warmup": 120,
    "PreGame": 10,
    "FaceOff": 4,
    "Play": 600,
    "BlueScore": 4,
    "RedScore": 4,
    "Replay": 9,
    "Intermission": 60,
    "GameOver": 30,
    "PostGame": 10
  },
  "spawnDelay": 10,
  "maxPeriods": 3,
  "goalSlowMotion": false,
  "goalieCreaseProtection": true
}

Anyone not listed joins as a spectator, which suits casters and referees. Restart the server after editing this file. Between games, swap in the next matchup's IDs and restart again.

Tips for the team lists:

  • Keep the full phaseDurationMap in the file. It replaces the built in map, so leaving phases out is asking for trouble.
  • Use the exact keys Blue and Red.
  • Every ID is text in quotes, separated by commas, with no comma after the last one.
  • If the file has an error, the server falls back to default rules and logs it. Check the log after each edit.

Step 4: Agree on the rules

These keys in the game mode file are what leagues usually standardise:

Rule Key Typical league choice
Period length phaseDurationMap.Play 300 (default) to 600 seconds
Periods maxPeriods 3
Warmup phaseDurationMap.Warmup 60 to 180 seconds
Intermission phaseDurationMap.Intermission 10 (default), longer for streamed games
Goal slow motion goalSlowMotion Off to keep the game moving, on for streams
Crease protection goalieCreaseProtection On, so goalies are not run over

Write the rules down in your league's Discord, and keep the server's file matching them for every game.

Step 5: Tick rate and location

For competitive play, how the game feels comes down to the server's tick rate and its distance from players. Keep tickRate at 200, which is what Puck's own ranked servers use, and host the server in a region central to both teams. A server halfway across the world from one team is the biggest unfairness a league can introduce.

Ranked style without matchmaking

Puck's ranked matchmaking with MMR runs on the developer's own servers and cannot be run on a private server. What leagues do instead is recreate the conditions: fixed teams with teamAssignments, 200 Hz, standard periods, votekick off and admins on hand. Results and standings live in your league's own spreadsheet or bot.

The easy way

On a GamezServers Puck server, game mode, period length, periods, warmup, crease protection, goal slow motion, the whitelist, admins and the password are settings in the panel, and you edit teamAssignments in Files between games. Plans start at 2.99 USD a month for 12 slots, and a league can split the bill between up to 10 people. See the quick start guide.

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