Player Management
You cannot operate a game server without managing the players on it. At minimum, your server needs to track who owns it, who has elevated permissions, who is banned, and who is currently online.
Ownership
Section titled “Ownership”Every server has an owner. This is the player who created the server or rents it from a Hosting Providers. The owner should have full control:
- Start, stop, restart the server
- Modify server settings
- Assign and revoke roles for other players
- Ban and unban players
- Transfer ownership (if supported)
Ownership is typically tied to a platform ID (e.g., a Steam ID), not a username.
Role Hierarchy
Section titled “Role Hierarchy”A practical role system for most games:
| Role | Status | Permissions |
|---|---|---|
| Owner | Recommended | Full control. Can do everything, including assigning admins. |
| Admin | Required | Can kick, ban, change settings, assign moderators. Cannot transfer ownership or remove other admins. |
| Moderator | Recommended | Can kick and temporarily ban players. Cannot change server settings. |
| Trusted | Optional | No moderation powers, but may have gameplay privileges (e.g., reserved slots). |
| Default | Required | Standard player. No special permissions. |
| Banned | Required | Cannot connect to the server. |
You don’t need all of these at launch. Owner + Admin + Default + Banned covers most use cases. Add moderator and trusted roles if your community needs them.
Ban System
Section titled “Ban System”Bans should support:
- Permanent bans: Player is banned until manually unbanned
- Timed bans: Player is banned until a specific date/time (e.g., 24 hours, 7 days)
- Ban reasons: Record why the player was banned (for audit and appeals)
- Ban log: Record who issued the ban and when
Store bans by platform ID, not by username or IP address. Usernames change, IPs are shared and rotated. The platform ID is the only stable identifier.
Ban Data Format
Section titled “Ban Data Format”Below is an example of a bans.json config file. Feel free to steal this structure or make it your own. The important data is that it includes when, who, why, and by whom.
[ { "platform": "steam", "platform_id": "STEAM_0:0:83224", "username_at_ban": "PlayerName", "reason": "Harassment", "banned_by": "STEAM_0:0:43716939", "banned_by_platform": "steam", "banned_at": "2026-01-15T14:32:01Z", "expires_at": "2026-01-22T14:32:01Z" }]expires_at is null for permanent bans. The username_at_ban field is informational only; always use platform_id to enforce the ban.
banned_by is a player ID or can be null when banned_by_platform is console. This allows hosting platforms to insert their own IDs and info for defining who banned the player.
Allowlist
Section titled “Allowlist”Traditionally described as a Whitelist, an Allowlist is a list of players that are allowed to join the server. This gives players privacy for online gaming which is very important to parents and other privacy-conscious consumers. This allows players to skip a Password to protect a server and more tightly controls who can join the server.
Store allowlists similar to bans by platform ID, not by username or IP address. Usernames change, IPs are shared and rotated. The platform ID is the only stable identifier.
Allowlist Format
Section titled “Allowlist Format”Below is an example of a allowlist.json config file.
[ { "platform": "steam", "platform_id": "STEAM_0:0:83224" }]Online Tracking
Section titled “Online Tracking”Your server should ideally maintain and expose a list of currently connected players. Each entry should include:
- Platform type (
steam,xbox,epic, etc.) - Platform ID (the unique identifier from the platform)
- Username (as of this session)
- Join time
A “recently online” list is also useful for admins who need to moderate after the fact. Log the last N players who connected, with join and leave timestamps. You can get more information on how to lookup players via PlayerDB, a free player lookup API provided by Nodecraft.
Data Format
Section titled “Data Format”Store player data in JSON. It handles structured data well, is human-readable, and every tool and platform can parse it.
Always identify players by their platform and platform ID, never by username alone:
{ "platform": "steam", "platform_id": "76561198012345678", "username": "PlayerName", "role": "admin", "first_seen": "2026-01-10T08:00:00Z", "last_seen": "2026-01-15T14:45:02Z"}Why not username? Usernames change. A player who changes their Steam name should not lose their admin role, and a banned player should not be able to evade a ban by changing their display name. For games with multiple characters or game specific username/handles, we recommend storing those in this data.
Exposing Player Management
Section titled “Exposing Player Management”Hosting platforms build admin UIs on top of your server’s player management. The easier you make this, the better the experience for server owners.
Console commands: Support kick, ban, unban, list, and role assignment via STDIN commands. This lets hosting platforms issue commands programmatically. See Console Output, Input, and Logging.
Data files: Store player data (roles, bans) in JSON files in a predictable location. Hosting platforms can read and display this data in their admin UI.
RCON: If supported, hosting platforms can manage players through your RCON protocol without direct file access.
Nodecraft Studio Integration
Section titled “Nodecraft Studio Integration”Nodecraft Studio provides a full Moderation API that handles player management, including kicking, banning (permanent and timed), moderator assignment, and retrieving player lists. If you’re integrating with Nodecraft, this API replaces the need to build your own moderation backend.