Skip to main content
LandSandBoat stores all server configuration as Lua files in the settings/ directory. Every setting is attached to the global xi.settings object, which is accessible from both C++ and any Lua script running on the server.

Settings files

Each file covers a specific area of the server:

Main settings

Gameplay rates, expansions, character config, content toggles

Network settings

Database credentials, port bindings, TCP/IP rules

Map settings

Zone behavior, combat, crafting, mob tuning

Login settings

Account creation, version locking, maintenance mode

The xi.settings object

All settings files populate sub-tables on xi.settings:
xi.settings.main.EXP_RATE       -- main.lua settings
xi.settings.network.SQL_HOST    -- network.lua settings
xi.settings.map.DROP_RATE_MULTIPLIER  -- map.lua settings
xi.settings.login.ACCOUNT_CREATION   -- login.lua settings
Because xi.settings is a global, any script can read these values at runtime.

How to customize settings

You have two ways to change a setting.

1. Override file

Copy the relevant file from settings/default/ into settings/ and edit it there. The server loads settings/<file>.lua first, and falls back to settings/default/<file>.lua if no override exists.
settings/
├── default/          ← shipped defaults, do not edit these
│   ├── main.lua
│   ├── network.lua
│   ├── map.lua
│   └── login.lua
├── main.lua          ← your override (optional)
└── network.lua       ← your override (optional)
Only copy the files you need to change. The default/ files serve as the authoritative reference and are updated with new settings as the project evolves.

2. Environment variables

For Docker deployments (or any environment where you don’t want to mount files), individual settings can be injected as environment variables using the format:
XI_{FILE}_{SETTING}=value
Where {FILE} is the settings file name in uppercase and {SETTING} is the key name. For example:
# network.lua → SQL_HOST
XI_NETWORK_SQL_HOST=database

# main.lua → EXP_RATE
XI_MAIN_EXP_RATE=2.0

# map.lua → DROP_RATE_MULTIPLIER
XI_MAP_DROP_RATE_MULTIPLIER=1.5
In a Docker Compose file:
environment:
  XI_NETWORK_SQL_HOST: database
  XI_NETWORK_SQL_PORT: 3306
  XI_NETWORK_SQL_DATABASE: xidb
  XI_NETWORK_SQL_LOGIN: xiadmin
  XI_NETWORK_SQL_PASSWORD: 'password'
MariaDB credential environment variables also accept the MARIADB_DATABASE, MARIADB_USER, and MARIADB_PASSWORD aliases used by the official MariaDB Docker image.

Setting precedence

When the server starts, settings are resolved in this order (highest priority first):
  1. Environment variablesXI_{FILE}_{SETTING}=value
  2. Override filessettings/<file>.lua
  3. Defaultssettings/default/<file>.lua
The precedence listed here means environment variables override file-based settings. If you have both a settings/main.lua file and an XI_MAIN_EXP_RATE env var, the env var wins.

Build docs developers (and LLMs) love