Reference
File Manifest Format
The File Manifest URL you supply when submitting your server is a single
endpoint the Open SWG Realms client calls to figure out which executables to use and which
game files it needs to download or update before launching your galaxy. It must return a
JSON array containing two objects: one keyed galaxy_information, one keyed
files. The order of the two doesn't matter — the client finds each by its key.
Why this matters: the client trusts this file completely. If a file is
missing from the manifest, it will never be downloaded or verified. If an md5
is wrong, players will be stuck endlessly re-downloading (or running an out-of-date file).
Keep this endpoint accurate and keep it in sync whenever you patch your server files.
Endpoint requirements
| Requirement | Detail |
| Method | Must respond to GET requests. |
| Content-Type | Should be served as application/json. The client also accepts text/plain as long as the body parses as valid JSON. |
| Body | A JSON array containing two objects, one keyed galaxy_information and one keyed files. Not a flat file list, not newline-delimited JSON. |
| Auth | Must be publicly accessible with no authentication. The client cannot log in to fetch it. |
| HTTPS | Strongly recommended. Files themselves may be hosted anywhere reachable from fileurl. |
Root structure
The response is an array containing two objects. The client identifies each one by its key,
not its position — either order works.
| Key | Value | Description |
| galaxy_information |
array |
An array containing exactly one object — the galaxy's executable info. See below. |
| files |
array |
One object per file the client needs to verify or download. Same as before. |
Galaxy information object
The single object inside galaxy_information:
| Field | Type | Description |
| galaxy_name |
string |
Your galaxy's display name. Informational — the directory listing still uses the name you submitted, not this field. |
| launch_executable |
string |
Filename of the executable Play should launch, e.g. SWGEmu.exe. Optional.
The client uses this only if that file actually exists in the install folder after sync;
otherwise it falls back to its default search (SWGEmu.exe, then SwgClient_r.exe).
|
| client_setup_executable |
string |
Filename of the configuration/setup utility for "Configure Game Options", e.g.
SWGEmu_Setup.exe. Optional, same fallback behavior — if it's not
found on disk, the client falls back to its default search (SWGEmu_Setup.exe,
then SwgClientSetup_r.exe). If nothing is found either way, the button stays hidden.
|
File object schema
Each entry in the files array is an object with exactly three required fields:
| Field | Type | Description |
| filename |
string |
The file's path relative to the galaxy's install folder, e.g. data/sku1.tre or SwgClient_r.exe. Use forward slashes for subfolders. |
| fileurl |
string |
A direct, publicly reachable URL the client can download this exact file from. Must return the raw file bytes (no landing pages or redirects behind auth). |
| md5 |
string |
The lowercase, 32-character hex MD5 checksum of the file. The client hashes the local copy and compares it to this value to decide whether a re-download is needed. |
Example response
[
{
"galaxy_information": [
{
"galaxy_name": "Galaxy Name",
"launch_executable": "SWGEmu.exe",
"client_setup_executable": "SWGEmu_Setup.exe"
}
]
},
{
"files": [
{
"filename": "data/sku1.tre",
"fileurl": "https://cdn.example-server.com/files/sku1.tre",
"md5": "63c2d21719ed56d96b70373d99cc94d6"
},
{
"filename": "data/sku2.tre",
"fileurl": "https://cdn.example-server.com/files/sku2.tre",
"md5": "23c2d21719ed56d96b70373d99cc94d6"
},
{
"filename": "SwgClient_r.exe",
"fileurl": "https://cdn.example-server.com/files/SwgClient_r.exe",
"md5": "9a0364b9e99bb480dd25e1f0284c8555"
}
]
}
]
How the client uses this
When a player selects your galaxy and presses Sync, then Play, the client:
| Step | Action |
| 1 | Fetches your manifest_url and parses the response. |
| 2 | Finds the object with a galaxy_information key and remembers launch_executable / client_setup_executable for this galaxy. |
| 3 | Finds the object with a files key. For each entry, checks whether filename exists in the local install folder. |
| 4 | If it exists, computes its MD5 and compares it to the manifest's md5. |
| 5 | If the file is missing, or the MD5 doesn't match, downloads it fresh from fileurl into place. |
| 6 | On Play, launches launch_executable if it's present on disk, otherwise falls back to its default search. |
| 7 | "Configure Game Options" does the same fallback with client_setup_executable, and stays hidden if nothing is found. |
Validation checklist before you submit
| Check |
| ✓ | Response is valid JSON (test with any JSON linter or curl your-url | jq). |
| ✓ | Root is an array containing one object keyed galaxy_information and one keyed files. |
| ✓ | galaxy_information contains exactly one object. |
| ✓ | Every object in files has all three fields, spelled and cased exactly as shown. |
| ✓ | md5 values are lowercase hex, computed from the exact file at fileurl. |
| ✓ | Every fileurl is reachable without login and returns the raw file, not an HTML page. |
| ✓ | The files array includes your game executable and setup utility, along with every other required file. |
Note: launch_executable and client_setup_executable are
hints, not guarantees — if the named file isn't actually present after sync, the client
quietly falls back to its default search instead of failing. Omit either field if your galaxy
just uses the standard filenames.