Skip to content

Settings files

Both files are plain JSON and can be edited by hand while the program that owns them is closed. Both are forgiving: a bad value falls back to its default or is clamped into range, and a file that cannot be read is set aside, never deleted.

Launcher settings

launcher.json in the data folder. Written atomically.

{
  "schema": 1,
  "selected": { "minecraft": "1.8.9", "kind": "xol" },
  "preset": "balanced",
  "memoryMiB": null,
  "javaPath": null,
  "width": 1280,
  "height": 720,
  "fullscreen": false,
  "extraJvmArgs": [],
  "instanceIds": {},
  "diagnosticsConsent": false,
  "autoUpdate": true
}

These are the defaults.

Field Type Default Allowed Set in
schema number 1 1
selected.minecraft text "1.8.9" A Minecraft version that has a profile Main screen
selected.kind text "xol" xol, optifine, forge, forge-optimized. (fabric and fabric-optimized are reserved for later; no such profile exists yet.) Main screen
preset text "balanced" max-fps, balanced, quality, battery Main screen
memoryMiB number or null null null means "use the recommendation". Otherwise whole MiB from 512 up. When set in the launcher it is clamped to 75% of installed memory and rounded down to 256. Settings ▸ Game
javaPath text or null null An absolute path of at most 1,024 characters. null means the managed runtime. Settings ▸ Java
width number 1280 640 to 7680 Settings ▸ Game
height number 720 480 to 4320 Settings ▸ Game
fullscreen true or false false Settings ▸ Game
extraJvmArgs list of text [] At most 32 flags, each starting with -, without spaces, at most 512 characters. Flags that load code are refused at launch. Settings ▸ Java
instanceIds object {} Maps a profile identifier to the instance to use for it, for example {"xol-1.8.9": "xol-1.8.9-custom"}. At most 64 entries. A profile that is not listed uses its default instance. Settings ▸ Instance
diagnosticsConsent true or false false Only a literal true counts as consent. Anything else, including a missing field, is "no". Settings ▸ Support
autoUpdate true or false true On unless it is a literal false Settings ▸ Service

The file contains no credentials. The account and the access key are in accounts.json and service.json, sealed by the operating system.

How a damaged or foreign file is handled

Situation Result
One field has a bad value That field alone falls back to its default
The file is not readable, or has no valid schema Defaults are used. The old file is first copied to launcher.json.bak-<number>. The launcher shows "Settings were reset".
The file was written by a newer Xol (schema higher than this build knows) The same: defaults, a backup copy, a notice. A newer file is never overwritten in place.

Client settings

xol/config.json inside each Xol instance. Schema 2. Saved when a Xol screen closes.

{
  "schema": 2,
  "activeLayout": "Default",
  "modules": {
    "<module id>": { "enabled": false, "settings": { "<setting id>": "<value>" } }
  },
  "layouts": [
    { "name": "Default", "modules": { "<module id>": { "anchor": "TOP_LEFT", "x": 4.0, "y": 4.0, "scale": 1.0 } } }
  ]
}

Value formats

Setting type Stored as Example
On or off true or false "background": true
Whole number A number, clamped to the setting's range on load "size": 4
Decimal number A number, clamped and snapped to the setting's step "divisor": 4.0
Choice The option's name, so reordering options in a later version never changes a saved choice "shape": "Cross"
Colour Eight hex digits, alpha first "color": "FFFFFFFF"
Key The game's key code. 0 is none. Mouse buttons are the button number minus 100, as vanilla stores its own bindings. Valid range -100 to 255. "key": 46

Every module and setting identifier

Module Setting Type Range or options Default
general animations On or off true
Every HUD module background On or off true
Every HUD module shadow On or off true
Every HUD module color Colour FFFFFFFF
cps buttons Choice Left, Left \| Right Left
keystrokes mouse On or off true
keystrokes space On or off true
keystrokes pressed Colour D0E9EAEC
armor durability Choice Remaining, Percent, Remaining / max Remaining
armor held On or off true
armor colorize On or off true
toggle-sprint status-text On or off true
zoom key Key 46 (C)
zoom divisor Decimal number 1.5 to 8, step 0.5 4.0
zoom smooth-camera On or off true
crosshair shape Choice Cross, Dot, Cross + dot, Square Cross
crosshair size Whole number 1 to 12 4
crosshair gap Whole number 0 to 8 2
crosshair thickness Whole number 1 to 4 1
crosshair color Colour FFFFFFFF
crosshair outline On or off false
chat background-opacity Whole number 0 to 100 100
chat text-shadow On or off true
chat timestamps On or off false
chat timestamp-format Choice HH:mm, HH:mm:ss HH:mm

The HUD modules are fps, ping, coordinates, session-timer, cps, keystrokes, armor, potions, toggle-sprint and packs. fps, ping, coordinates, session-timer, potions and packs have only the three shared settings. enabled defaults to true for fps and false for every other module; general has no enabled.

Layout entries

Field Allowed Default
anchor TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT The module's default anchor
x, y Offsets in GUI pixels, pointing inward from the anchor. Held within ±10,000. The module's default offset
scale 0.5 to 3.0 1.0

Layout rules (1 to 16 layouts, names of 1 to 24 characters, unique ignoring case) are on Layouts, export and import.

How a damaged or older file is handled

Situation Result
Schema 1 (client 0.1.0), which kept position and appearance flat on each module Migrated on load: positions move into a layout named "Default", appearance moves into settings
Unknown modules, settings or fields Ignored
Out-of-range numbers Clamped
The file cannot be read, or was written by a newer client Renamed to config.json.invalid-<number> in the same folder; the client starts with defaults

The export file

xol/xol-settings.json has the same shape as config.json plus "kind": "xol-settings-export". See Layouts, export and import.