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.
| 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. |
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. |
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.
|
Each entry in the files array needs filename and fileurl,
plus exactly one checksum field — either md5 or sha256, not both.
If an entry includes sha256, the client checks that and ignores md5 even
if it's also present; otherwise it falls back to md5.
| 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. Use this or sha256, not both. |
| sha256 | string | The lowercase, 64-character hex SHA-256 checksum of the file. Use this or md5, not both — if present and non-empty, the client prefers this over md5. |
A manifest can mix both checksum types across different files — the client decides per file, not per manifest:
[
{
"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",
"sha256": "b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78"
},
{
"filename": "SwgClient_r.exe",
"fileurl": "https://cdn.example-server.com/files/SwgClient_r.exe",
"md5": "9a0364b9e99bb480dd25e1f0284c8555"
}
]
}
]
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, hashes it and compares to the manifest — sha256 if that field is present and non-empty, otherwise md5. |
| 5 | If the file is missing, or the hash 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. |
| 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 filename, fileurl, and exactly one of md5 / sha256. |
| ✓ | md5 values are lowercase hex, 32 characters; sha256 values are lowercase hex, 64 characters — 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. |
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.