ug-core/config/. ug-core generates each file on first boot from the defaults in code, and never edits it again.
How values resolve
Each option resolves from three sources. Later sources win:ug config <name> shows the resolved value of every option and where it came from:
Config files
A generated file documents every option:config/core.lua
Two kinds of config
- Settings
- Data
Most configs are settings: a table of named options. Your file merges per key, so you only write what you change.
config/characters.lua
Convars
Every setting has a convar. Use them for values that differ per environment:server.cfg
ug-core:<Key> for config/core.lua and ug-core:<Config>:<Key> for every other file. Booleans accept true, false, 1 and 0. Tables and vectors cannot be set by convar. See the full list in Convars.
What config files can use
Config files run in a sandbox. They can usevector2, vector3, vector4 (and the vec aliases), math, string, table, json, tonumber, tostring, type, pairs and ipairs. Nothing else: no os, no io, no natives.
Validation
ug-core validates every file on every boot:
Unknown keys only warn. Everything else is collected, printed together, and stops boot with
Boot aborted: N error(s).
Client values
Options markedshared or client replicate to clients. Clients never see server-only values, and config/ itself is never sent to clients.
Every config file
The full reference of every option in every file.