Publishing
How a mod gets from your folder to players. Read the Mod format first.
1. Package your mod
From the mods/ folder of the repo:
python3 wu-mod.py check my-mod
python3 wu-mod.py pack my-mod -o distcheck prints each problem with a fix: line. It exits with an error until every error is fixed. Warnings don't block.
pack writes dist/my-mod-0.1.0.zip and dist/my-mod-0.1.0.zip.sha256. Packing the same files again gives the same zip, byte for byte, so anyone can check that a zip matches its source.
2. Submit a link
Today there is no upload form. To send a mod:
- Put the zip and its
.sha256somewhere public, such as a release on your own GitHub repository. - Send the link to the Leyline team. The Discord is at discord.gg/hVeUxYwbkr.
- The team checks it with
wu-mod.pyand adds it tomods/catalog/<your id>/in the repo.
The modders' guide in the repo (mods/README-modders.md) says realm mods get a human look before they go on Wrath. A web form for submitting a link, at /wrath/mods/submit, is coming soon.
The planned Leyline Launcher will publish mods from GitHub and allow all mods, with no review queue and no code signing yet.
3. The mods step
The team puts the whole catalog live with one step: mods/Put mods on Wrath.bat, or the Autopilot step mods. It uses one SSH connection and runs stream/server/mods-install.sh on the server. In order:
- Check and pack.
wu-mod.py catalogchecks every mod. If one fails, nothing changes. - Realm. Each realm half goes into
lua_scripts/mods/<id>/, then the realm runs a livereload ale. Nobody is kicked. A refused reload, or a Lua error frommods/, puts the old scripts back. Unchanged scripts mean no reload at all. - Browser client. The addon halves, and the generated
WUModCatalogaddon, are laid over the streamed client. A failure here puts the old addons and the old realm scripts back. - Site.
catalog.json,categories.json, the zips and the screenshots go to the site, swapped in whole.
Backups are made first. The step ends with MODS OK.
4. Where players find it
- The Workshop: play.openvanilla.app/wrath/mods. It opens on a grid of the categories with a count for each, then the mods. Search with
?q=(name, description, category). Filter by kind (?kind=ui,realmorboth) or by permission (?perm=chat, or?perm=nonefor no realm permissions). - A category:
/wrath/mods/c/<category id>, for example/wrath/mods/c/addons. Your mod sits on the shelf itscategorynames. - Its own page:
/wrath/mods/<id>, with what it does, its permissions in plain words, screenshots, the zip, and "Already on Wrath" when the realm runs it. - The zip:
/wrath/mods/<id>/download. - A share link:
/wrath/m/<id>, with a preview card. - For tools:
/wrath/mods/catalog.json, readable from any site. - In the game: Esc, then Mods & Workshop, then Workshop. It lists every mod, with an on/off switch for its addon.
/modsor/workshopopens the same panel.
Versions
Raise version in mod.json for every change you send. The catalog keeps one version per mod: the one in mods/catalog/<id>/.
These pages are in the repo at docs/leyline. Source