Install a game module
Core knows nothing about any game. Every game-specific screen — shard status, the map atlas, the player marketplace, character sheets — comes from a module, a directory on a mounted volume that the server loads at start.
Today there is one: uo, for ServUO shards, published as
Module-uo (v1.2.2).
Install it
Section titled “Install it”-
Open Admin → Modules.
-
Paste the URL of a release’s install manifest into Release install-manifest URL and press Install.
For the current
uorelease that is themodule-uo-<version>.jsonasset on its releases page. The site downloads the bundle, checks it against thesha256the manifest declares, and unpacks it onto the modules volume.There is no catalog to browse, deliberately: a catalog would make core’s release cadence decide which modules are allowed to exist.
-
Restart when it asks. A banner appears — Modules are read from disk when the server starts — with a Restart the server button. The row reads Restart to start until you do.
The button exits the process and lets your supervisor bring it back; on the Compose deployment from Install the site, that is
restart: unless-stoppeddoing its job.docker compose restart appis exactly equivalent. -
Confirm it started. The module’s row should read Started, and its screens should have appeared in the navigation.
What the uo module adds
Section titled “What the uo module adds”Watch the log at the restart and you will see exactly what it mounted:
[uo] registered routes: public:/shard,/atlas admin:/shard,/uo-link player:/shard[modules] schema ensured for module "uo"[modules] module "uo" startedIts capabilities are shard, atlas, market, governors, guilds, houses, champs, cliloc — the shard console, the map atlas, the player-vendor marketplace, city governors, guilds, houses and IDOCs, champion boards, and the cliloc strings that make item names readable.
A module owns one path segment wherever it appears, so its pages live under /uo/…,
/admin/uo/… and /player/uo/…. That boundary is visible in the URL on purpose.
The declarative alternative
Section titled “The declarative alternative”A host whose Compose file is version-controlled can skip the panel entirely: set MODULES
in .env, one entry per module, <id>@<version>=<install manifest URL>. The container
resolves that set at every start.
A module already unpacked at the declared version is left alone without a single network call, so a restart with no route to the internet comes up unchanged. A failure is logged and shown in Admin → Modules, and never stops the site from starting.
The two surfaces agree on a rule worth knowing: the variable owns what is on the volume, the admin panel owns whether a module runs. A module you disable in the panel stays disabled even though its files are put back at the next start.
More on both in Managing modules.
Next: Connect a game server.