Implementing your own Rust client server list

What to implement and which files to edit when building a private backend compatible with these IL2CPP Rust clients.

1. Critical client files

FileRole
RustClient_Data\il2cpp_data\Metadata\global-metadata.datLiteral URL strings for APIs (nexus, server list, banned, Discord, companion, etc.).
GameAssembly.dllIL2CPP native code; references strings from metadata.

Changing behavior without touching metadata usually requires reverse engineering (e.g. Ghidra). For URL changes, prefer editing metadata strings (with correct tooling) or proxying at the network layer.

2. HTTP routes to support (typical)

Your HTTPS server should expose paths compatible with your patched metadata. Unpatched Real/SKYLIGHT builds use bases like:

Common path suffixes (after your chosen base):

SuffixPurpose
nexus/Nexus / backend coordination
playerAuth/steamSteam-linked player auth
public/serverlistMain server browser list
public/serverlist/bannedBanned server list
discord/...Discord integration
Companionavatar/{0}, subscriptions/add, check, remove

Additional fragments: public/manifest/?public_key=, public/steamServers/playerCounts/rust. Stub or implement when those code paths run.

3. Data model hints

Exact JSON schema is not in these docs; capture live HTTPS responses (where allowed) or use IL2CPP dumps / RE.

4. Editing links in the client

Option A — Patch global-metadata.dat

  1. Backup the whole game folder.
  2. Search for current base (e.g. https://api.facepunch.com/api/ or https://meta.tirify.com/r0000/).
  3. Replace with your base using a hex editor (HxD) only if lengths are preserved, or IL2CPP metadata tools that rebuild the string table safely.

Option B — Reverse proxy

Controlled lab setups only; public internet / TLS hostname checks usually block unless you control trust stores or patch the binary.

Option C — Patch GameAssembly.dll

Advanced; use Ghidra / IDA.

5. Per-client docs

For a deeper explanation of official vs tags, is_official, and server.official, see Official servers & your server list API.

6. “Official” badge (summary)

MechanismNotes
is_official on list rowsSet in API JSON for public/serverlist.
Manifest / official listSeparate flow; errors if manifest missing or invalid.
server.official convarServer-side; described as Facepunch-only in strings.

7. Compliance

Compatible API for a modified or private client you may redistribute is a common lab setup. Repointing the stock Steam client without authorization may breach EULA and local laws.