Skip to content

Dashboard: Game Registry

The dashboard is a multi-game control plane. Before you can scope feature flags, moderation actions, or audit events to a specific Roblox experience, you must register it in the Game registry.


Concepts

What is a registered game?

A registered game is a record in the dashboard database that maps a friendly name and slug to one or more Roblox universe IDs and place IDs — one set per environment (dev, stage, prod).

Once registered, all game-aware resources (flags, bans, mutes, matches, audit logs) can be linked to a specific game via its gameId foreign key.

Global vs game-scoped flags

Feature flags can be:

Type gameId field Behaviour
Global null Returned for every game that calls the flags endpoint
Scoped set Returned only when the caller identifies using that game's IDs

When the flags endpoint receives ?universeId= or ?gameId=, it merges global flags with the game's own flags. Game-scoped flags shadow global flags on key conflict — giving you per-game overrides without duplicating every flag.


Registering a game

Navigate to Dashboard → Games → New Game.

Field Description
Name Human-readable display name (e.g. "Starter Combat")
Slug URL-safe identifier used in API calls (e.g. starter-combat)
Description Optional description shown in the games list
Icon URL Optional image URL for the games list card
Universe ID Roblox universe ID per environment (dev / stage / prod)
Place ID Roblox starting place ID per environment (dev / stage / prod)

Why separate per-environment IDs?
Most studios have three separate Roblox universes — a dev sandbox, a stage canary, and the live production universe. The dashboard uses these IDs to route Open Cloud API calls and to let game servers identify themselves when fetching flags.


Permissions

Permission Who has it What it allows
games:view ENGINEER, ADMIN List and view game details
games:create ENGINEER, ADMIN Register a new game
games:manage ENGINEER, ADMIN Edit an existing game's name, IDs, active status
games:delete ADMIN only Permanently delete a game and cascade-remove its data

Fetching flags from a game server

Game servers should pass the Roblox universe ID when fetching flags so the dashboard can resolve the correct game and merge global + per-game flags automatically.

local HttpService = game:GetService("HttpService")

local DASHBOARD_URL = "https://dashboard.broblox-games.com"
local FLAGS_API_KEY  = "your-optional-api-key"

local function fetchFlags(environment: string): { [string]: boolean }
    local universeId = game.GameId  -- Roblox built-in
    local url = DASHBOARD_URL
        .. "/api/flags/" .. environment
        .. "?universeId=" .. tostring(universeId)

    local ok, result = pcall(function()
        return HttpService:RequestAsync({
            Url     = url,
            Method  = "GET",
            Headers = { ["x-api-key"] = FLAGS_API_KEY },
        })
    end)

    if ok and result.Success then
        local body = HttpService:JSONDecode(result.Body)
        return body.flags or {}
    end

    return {} -- fall back to local defaults on failure
end

Using universeId instead of gameId means the game server never needs to know its own dashboard record ID — only the Roblox universe ID that is already available as game.GameId.


Game detail page

Each registered game has a detail page at /games/:id showing:

  • Roblox IDs per environment (copy-to-clipboard)
  • Aggregated stats (flags, bans, matches)
  • Quick links to scoped views:
  • /flags?gameId=… — flags for this game
  • /matches?gameId=… — match history for this game
  • /moderation/bans?gameId=… — bans for this game
  • /audit?gameId=… — audit log scoped to this game

Audit trail

Every game CRUD action is recorded:

Action Description
game.create Game registered (after: name + slug)
game.update Game metadata changed (before/after)
game.delete Game permanently removed

Deactivating vs deleting a game

Use Deactivate (isActive = false) when a game has been sunset but you want to keep its historical data (flags, bans, audit logs). Deactivated games are hidden from the default list.

Use Delete when you want to permanently remove a game and all associated records from the database. This is irreversible and requires the games:delete permission (ADMIN only).