Official badge vs your custom server list
Why adding an “official” tag on your dedicated server may not show as official in the client, and what actually controls it when you use your own public/serverlist link.
1. Two different ideas of “official”
A — What the server list API returns (what the patched client uses)
The in-game server browser that calls …/public/serverlist builds each row from JSON. The game expects a per-server field for “is this row official?” (in metadata this appears as is_official).
If that field is missing, false, or wrongly named, the client will not show the official treatment — even if your Rust server “feels” official to you.
B — What you set only on the dedicated server
Hostname, Steam tags, server description, or the convar server.official do not automatically become “official” in the custom HTTP list unless something copies that into the JSON your list API returns.
Arab / Alkad aren’t special magic: their backend decides which rows include is_official (or equivalent). Your setup must do the same.
Takeaway: For your own list, the HTTP API response is the source of truth for what the client displays, not a tag alone on the game server.
2. Why “I added an official tag” often does nothing
| What people try | Why the client still doesn’t show official |
|---|---|
| Tag in server name / description only | The HTTP server list does not use your name for “official”; it uses API fields. |
| Set something on RustDedicated only | Unless your list service reads that and sets is_official in JSON, the client never sees it. |
API lists servers but no is_official: true | Rows are treated as non-official. |
| Wrong JSON property name or type | IL2CPP expects exact names; wrong name ⇒ ignored. |
3. Client vs server — what to do
Client (patched to your URL)
Usually nothing extra for “official” beyond calling your public/serverlist and parsing the response. The URL patch is enough for routing.
Your backend (the important part)
- Server list API: For each row returned from
public/serverlist, set the field the client expects — typicallyis_official: truefor servers you want marked official. Confirm the exact property name by capturing a real response from a known-good client or reverse engineering; it must match the game. - Optional pipeline: If you want “I marked this in my panel” to show in-game, your service must map Steam IP/query identity (or your own IDs) to those rows and set
is_officialwhen building JSON. A tag on the Rust process only helps if your list backend reads it and maps it to that field.
server.official on the dedicated server
That convar is oriented toward Facepunch’s own server rules. For a custom server list, your API JSON is what drives the browser UI for “official” in most flows. Do not assume server.official alone will make your custom list show the badge unless you have verified the client still ties that to the list (often it does not for third-party lists).
4. Why Arab / Alkad can show official and yours might not
They control their public/serverlist implementation and choose which rows include is_official. You are building the same kind of thing: you must return is_official (or the exact field name) for the servers you want highlighted.
5. Checklist for later
- Capture a sample
public/serverlistJSON (from an environment where you are allowed to) and mirror the structure, especially the official flag field. - In your API, set that field to
trueonly for rows you intend. - If it still fails, investigate manifest / official-servers flows (client errors mention manifest); some builds may need more than the plain list endpoint.
- Do not label servers as Facepunch “official” if they are not — misleading and against typical platform rules.