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,
"javaRuntime": "auto",
"width": 1280,
"height": 720,
"fullscreen": false,
"extraJvmArgs": [],
"instanceIds": {},
"sharedResourcePacks": true,
"diagnosticsConsent": false,
"autoUpdate": true,
"showOnline": true,
"discordPresence": true,
"discordServerName": true,
"testSignIn": false,
"addons": {},
"optifineHint": true,
"optifineAsked": [],
"optifineOffered": {},
"smartJvmArgs": true,
"highPerformanceGpu": true,
"legalAccepted": null
}
These are the defaults. A field that an older launcher did not write takes its default.
| 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. The values optifine, forge and forge-optimized are still read from a 0.2.x file and carried over into addons. |
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. |
Settings ▸ Game |
javaPath |
text or null |
null |
An absolute path of at most 1,024 characters. null means the managed runtime. |
Settings ▸ Java |
javaRuntime |
text | "auto" |
auto, native or rosetta: which Java starts Minecraft 1.8.9 and 1.7.10 on an Apple Silicon Mac. Any other value counts as auto. The field is written on every system and means something on Apple Silicon only; a custom javaPath overrides it. See Apple Silicon. |
Settings ▸ Java, on Apple Silicon Macs only |
width |
number | 1280 |
640 to 7680 | Settings ▸ Game |
height |
number | 720 |
480 to 4320 | Settings ▸ Game |
fullscreen |
true or false | false |
"Start in fullscreen" | 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 |
sharedResourcePacks |
true or false | true |
Resource packs come from your normal Minecraft folder. On unless it is a literal false. |
Settings ▸ Instance ▸ Resource packs |
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 |
Kept for older launchers and no longer read. Since 0.3.1 updates are always automatic. | |
showOnline |
true or false | true |
The online heartbeat. On unless it is a literal false. |
Settings ▸ Service |
discordPresence |
true or false | true |
"Show what I'm playing on Discord". On unless it is a literal false. |
Settings ▸ Discord |
discordServerName |
true or false | true |
"Show the server name" in that Discord activity. On unless it is a literal false. |
Settings ▸ Discord |
testSignIn |
true or false | false |
The temporary test sign-in. Only a literal true counts, and it means something in development builds only; a beta or stable build refuses to store it. |
Settings ▸ Service |
addons |
object | {} |
The add-on switches per Minecraft version, for example {"1.8.9": {"optifine": true, "mods": false}}. At most 64 versions. A version or add-on that is not listed uses the profile's default: OptiFine on for 1.8.9 and off for 1.7.10, Forge mods off. |
Main screen, Settings ▸ Instance |
optifineHint |
true or false | true |
Whether the main screen suggests Add OptiFine for better performance. On unless it is a literal false, which the close button beside the suggestion writes. |
Main screen |
optifineAsked |
list of text | [] |
The Minecraft versions for which Xol has already opened the OptiFine download page by itself. A version in this list is not asked about again. At most 64. | Written by the launcher |
optifineOffered |
object | {} |
Minecraft version to the newest OptiFine build already suggested as an update, so each build is suggested once. At most 64 entries. | Written by the launcher |
smartJvmArgs |
true or false | true |
"Automatic Java arguments": Xol works out the Java arguments the instance needs. Off means only the arguments you typed are used. On unless it is a literal false. |
Settings ▸ Java |
highPerformanceGpu |
true or false | true |
"Use the high-performance graphics card": on computers with two graphics cards, Minecraft runs on the faster one unless you chose otherwise in Windows graphics settings. On unless it is a literal false. |
Settings ▸ Game, on Windows only |
legalAccepted |
text or null |
null |
The version of the first-start notice (Terms, Privacy policy, Minecraft EULA) you agreed to, as a date such as 2026-09-21. null until you agree. |
The first-start notice |
A launcher.json from 0.2.x may also contain optifineOff, the profiles whose Use OptiFine switch was off. It is read once and carried over into addons, per Minecraft version.
The file contains no credentials. Sign-ins are in accounts.json; see Sign-in and accounts.
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 5. Saved when a Xol screen closes. Since 0.3.0 the launcher keeps this file the same in every Xol instance, for both Minecraft versions, through a shared copy in the data folder's shared folder.
{
"schema": 5,
"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 } } }
]
}
The module identifiers are listed in the module review by name. Setting identifiers are not listed here: client 0.3.5 has 50 modules plus the settings groups under the gear, and the Right Shift menu shows every setting with its label, range and default. Change settings there rather than in the file.
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" |
| Color | Eight hex digits, alpha first. A color that cycles through the rainbow ends in :chroma. |
"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 |
| Text | A string, cut to the setting's maximum length. Control characters and the section sign are removed. | "name": "" |
A few settings are marked local, such as the Nick Hider name. They are saved in config.json but never written into an export. The favourite resource packs are one of them: pack-favourites under menu-theme, a list of pack names with no row in the menu.
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 | Positions move into a layout named "Default", appearance moves into settings |
| Schema 2 | The text shadow of FPS, CPS, Ping, Playtime and Pack display becomes a choice: true becomes "On", false becomes "Off" |
| Schema 3 | The old hurt camera module becomes No Hurt Cam, and the fullbright row of the Performance group becomes the Fullbright module's switch |
| Schema 4 (client 0.3.4 and earlier) | The player-info module becomes the Player info section of the hypixel module. Each of its settings keeps its value, with pinfo- in front of its identifier, and its switch becomes the section's Show player info row (pinfo). If Player info was on and Hypixel was off, Hypixel is switched on with its other features off, so what you see stays the same. |
| 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". It contains no local settings. See Layouts, export and import.