The public registry of mods for Steel Tide, the cross-platform RTS.
A mod adds units, buildings and upgrade levels — described in one mod.json,
with sprite sheets beside it if the author drew some — and every folder under
mods/ here is listed in the game under Settings → Mods and on
steelti.de/mods.
- Play one: in the game, Settings → Mods → Official registry → Install, or
open
https://play.steelti.de/?mod=<id>. - Make one: read the modding guide — the
whole format, generated from the game's own validator — or give it to a
coding agent as a skill:
npx skills add steel-tide/skills --skill steel-tide-mods-guideline(skills.sh, from steel-tide/skills; the same text isAGENTS.md). - Publish one: read the submission terms, fork, add
mods/<id>/, run the check, and open a pull request. Creators keep ownership.
For a new submission, explicitly set license in mod.json and include or
link the applicable licence text and credits. Choose terms you have the right
to offer; the tooling's licence does not apply to your mod. The format's
legacy CC-BY-4.0 default is unchanged, but new submissions must state their
licence explicitly. See ownership and submission permissions.
mods/<id>/
mod.json the manifest — `id` must equal the folder name
sprites/*.png the sheets it names, if any
sfx/*.mp3 the recordings it names, if any
screenshots/*.png the mod in play: at least one, 4:3 (1600×1200 is a good
size), under 2 MB each, named under `screenshots` in mod.json
README.md a few lines on what it is (shown nowhere yet, read by people)
node tools/check.mjs mods/<id> # every error with its path into mod.json
node tools/pack.mjs mods/<id> # optional: one file to share if its licence permitsThe check is the one the game runs on load, plus what only the registry can
know: the folder is named after the id, every sheet exists, the screenshots
are there and 4:3, and no def id, alias or sheet key is taken by another
published mod. Ids are global — prefix a generic word with your mod's id
(ironworks-bunker, not bunker). CI runs the same check on every pull
request; once merged, the catalogue and detail files are rebuilt on main and the mod is live.
Ignored local draft folders are excluded from registry checks, catalogue generation and release selection. You can still check or pack a draft by naming its folder explicitly in the commands above.
The screenshots are what the game's mod list and steelti.de/mods
show for the mod; the first is its card. Take them in a match with the mod's
units on screen (the console's give <faction> <unit id> <n> puts them there)
and crop to 4:3.
Bump version for every change: the game offers the update to whoever has
the mod installed.
| Path | What |
|---|---|
mods/<id>/ |
one mod each; mods/ironworks has its own art and sounds, a turreted building and an upgrade level; mods/rusted-expansion is the official Rusted Warfare tribute |
catalog.json |
the small list the game and website read: mod metadata, unit/building counts, screenshots and a detail URL |
tools/check.mjs |
validate one mod or all of them |
tools/build-index.mjs |
rebuild the catalogue, details and legacy index (CI does this on main, and nightly for the counts) |
tools/pack.mjs |
a mod folder into the single-file form the game's Upload file… takes |
tools/sync-release.mjs |
keep the registry release in step with mods/: every mod packed as an asset, which is how the download counts are kept (CI) |
tools/steel-tide-mod.mjs |
the game's own mod code — validator, resolver, the vanilla roster — bundled from the game repository; do not edit here |
AGENTS.md |
the brief for a coding agent: the whole format, how to test, how to publish |
mods/<id>/PROMPTS.md, SFX-PROMPTS.md |
how a mod's sheets were painted and its sounds recorded, where they were generated |
There is no database. CI packs every mod into its single-file form and
attaches it to the rolling registry release;
GitHub counts downloads of a release asset, and installing a mod from the
game's registry list fetches that asset's URL once. The counts are read back
off the release nightly and on every push and baked into catalog.json (and the legacy index.json), which
is the figure the game and the website show; a changed mod is re-uploaded and
its old count carried over. The packed files are also the one-file form of
each mod, for anyone who wants it.
The registry tooling is source available, not open source, under PolyForm Strict License 1.0.0. It permits noncommercial use and personal study, but grants no permission to modify or redistribute the tooling. Those activities and uses outside the licence require separate permission, except where existing rights already allow them. See LICENSE for the scope and retained rights from earlier releases.
Mods and their assets remain owned by their creators and other respective
rights holders. Each mod keeps the licence declared in its mod.json and
its accompanying notices. PolyForm Strict does not replace those licences:
existing CC-BY-4.0, PolyForm Noncommercial and custom mod licences remain in
effect. Check the individual mod's terms before modifying, sharing or reusing it.
The submission terms give Steel Tide limited, non-exclusive permission to host, package, distribute and display submitted mods through the official registry, game, website and mirrors, while preserving credits and licences. Submission does not transfer copyright or give Steel Tide blanket permission to relicense or sell a creator's mod.
Mods are listed by default. Set "hideFromListing": true in mod.json to hide a
mod from the website and in-game lists and search. Its direct page at
https://steelti.de/mod/<id> still offers Add to Game, which opens its install
action in the game. Installed copies can still be enabled, disabled and updated.
Hidden mods remain in catalog.json for direct lookup and keep their detail
files and downloads; the legacy index.json omits them.
Generated files are never edited by hand. Detail URLs include a content hash;
previous details remain available so cached catalogues keep opening the matching
version. Nightly download-count changes do not rewrite detail files. catalog.json contains summary
entries only; details/<id>/<hash>.json holds each mod's definitions and asset metadata.
The game loads a detail file when its dialog opens, and the website when its page
is visited. Search covers the mod's name, author, description and id.
The full index.json remains generated for older released clients. Publish the
catalogue and all detail files together before deploying clients that read them.
The download mirror must serve catalog.json and details/ as well as the
existing files.