Skip to content

Layouts, export and import

Layouts

A layout is a named set of HUD positions: for each HUD module, its anchor, its offset and its scale. Module switches and module settings are not part of a layout; they apply across all layouts. You might keep one layout for PvP with everything tucked into corners and another for building.

Layouts are managed in the settings screen under General ▸ HUD layout, and you can step through them from the HUD editor's toolbar.

Control Action
< name >, with a counter such as "1/3" Switch layouts. The current positions are stored into the layout you leave, and the one you enter is applied.
New Create a layout with every module at its default position. It becomes active. Suggested name: "Layout", "Layout 2", …
Duplicate Copy the active layout including the current positions. The copy becomes active. Suggested name: " copy".
Rename Rename the active layout
Delete Delete the active layout. The last remaining layout cannot be deleted.

After New, Duplicate or Rename a name field appears with Save and Cancel. Enter saves, Esc cancels.

Rule Value
Number of layouts 1 to 16. There is always at least one, named "Default" on a fresh instance.
Name length 1 to 24 characters after trimming spaces
Characters No control characters and no §
Uniqueness Names are unique, ignoring upper and lower case
A name that breaks a rule "Name is empty, too long or already used", and Save is disabled

A module that a layout does not mention, for example one added in a later client version, appears at its default position in that layout.

Rename, duplicate and delete are in the build but have not yet been exercised in a running game; creating and switching layouts have been unit-tested as well.

Export and import

General ▸ Settings file has two buttons.

Button What it does Result line
Export Writes xol/xol-settings.json in the current instance folder, replacing an earlier export "Exported to xol/xol-settings.json", or "Export failed"
Import Reads xol/xol-settings.json from the current instance folder and applies it "Imported xol/xol-settings.json", or "Import failed: …"

There is no file chooser. To move settings to another instance or another computer, export, copy the file into the other instance's xol folder, and import there. Settings ▸ Instance ▸ Open folder ▸ Instance folder in the launcher gets you to the folder.

Exactly what the export contains

{
  "schema": 2,
  "activeLayout": "Default",
  "modules": {
    "general": { "settings": { "animations": true } },
    "fps": {
      "enabled": true,
      "settings": { "background": true, "shadow": true, "color": "FFFFFFFF" }
    },
    "zoom": {
      "enabled": false,
      "settings": { "key": 46, "divisor": 4.0, "smooth-camera": true }
    }
  },
  "layouts": [
    {
      "name": "Default",
      "modules": {
        "fps": { "anchor": "TOP_LEFT", "x": 4.0, "y": 4.0, "scale": 1.0 }
      }
    }
  ],
  "kind": "xol-settings-export"
}

The example is shortened; a real file lists all fourteen entries (thirteen modules and General) and all ten HUD modules in every layout.

Field Contents
schema The settings format version, currently 2
kind Always xol-settings-export. Import refuses a file without it.
activeLayout The name of the active layout
modules.<id>.enabled The module's switch. Absent for General.
modules.<id>.settings Every setting of the module by identifier
layouts[] Every layout: its name and, per HUD module, anchor, x, y, scale

That is all. The file contains no account, no player name, no server address, no file path and nothing about your computer. There is nothing of that kind in the client's settings model to begin with.

What import checks

Condition Message
No file "Import failed: No xol-settings.json in the xol folder"
Larger than 1 MB "Import failed: File is too large"
Not a Xol export (kind missing or different) "Import failed: Not a Xol settings export"
Written by a newer client (schema higher than this client knows) "Import failed: Written by a newer Xol"
Not readable as JSON "Import failed: Unreadable file"

If import fails, your current settings are untouched. When it succeeds, import is lenient on purpose: every value is type-checked, a number outside a setting's range is clamped into it, scale is held between 50% and 300%, an unknown anchor falls back to the module's default, unknown modules and settings are ignored, and layouts with unusable or duplicate names are dropped. An export from the older schema 1 is migrated on the way in.