Mods ship data, not code
The central RSMM rule, and the biggest departure from Minecraft modding:
A mod’s deliverable is data — a
manifest.tomlplus assets the SDK emits — never a bespoke script.
This is the data-pack / datagen philosophy taken all the way. Minecraft splits mods into “code mods” (Forge/Fabric jars) and “data packs”; RSMM aims to make everything expressible as data, with scripted behaviour as the narrow exception (Lua via the loader).
What this means in practice
- A finished mod is a
manifest.tomlwith[[content]]/[[patch]]blocks plus cooked assets — produced byrsmm apply, not by a script you ship. - One-off Python to reverse a byte layout is fine as throwaway discovery,
but the capability must then graduate into
rsmm.sdk(a kind builder, an engine cooker, or the apply pipeline) and the mod re-expressed declaratively. rsmm lintenforces this: any*.pyin a mod that isn’t a sanctioned lifecycle hook (e.g.on_disable.py) fails CI.
flowchart LR
D["throwaway discovery script<br/>(reverse a byte layout)"] -->|"graduate"| S["rsmm.sdk capability<br/>(kind / cooker / pipeline)"]
S --> M["declarative manifest.toml"]
M -->|"rsmm apply"| G["cooked assets installed"]
Common problems
See Authoring mods and the SDK design notes.