Skip to content

Mod files and folders

A mod is a folder (or a zip of that folder). The game looks for mods in your local Mods folder, in Steam Workshop installs, and in packages you staged for upload.

Required identity

Every mod needs a modinfo.json at the folder root. A Lua file alone is not enough.

Field Purpose
UniqueModName Stable prefix for all ids (modname.thing). Never use sol.
DisplayName Name in the Mods list and on Workshop
Description Listing text

Typical layout

MyMod/
  modinfo.json
  item_my_sword.json
  structure_my_box.json
  creature_my_critter.json
  worldprofile_my_world.json   # optional extra Sandbox world type
  WorldGenerator/…             # optional terrain files for that world
  Spawning/…                   # optional spawn lists for that world
  Parallax/…                   # optional sky for that world
  recipes.xml                  # optional crafting recipes
  preview.png                  # optional Workshop preview (Mod Prep)

JSON files the game should load as content need a known filename prefix:

item_, structure_, flora_, floratype_, projectile_, creature_, fluid_, status_, spfx_, or worldprofile_.

Other .json files are ignored as content. Spriter's atlas.json next to a .scml file is a normal exception.

Start with Mod Prep's one-item project. Copy patterns from Example Mod when you need weapons, armor, creatures, recipes, or custom worlds.

Sprites and art

Point inventory pictures at PNG files inside the mod, relative to the mod folder. Keep those files in the folder you ship. Older mods that still use a sprite sheet plus a frame name continue to work.

Recipes

Optional root files recipes.xml and grindRecipes.xml are checked by Mod Prep. Put smelting, cooking, and chemistry recipes in recipes.xml with processType="smelt" (or cook / chemistry). Grind recipes stay in grindRecipes.xml. Do not ship smeltingrecipes.xml — the game does not load it.

Lua

You do not need Lua for a simple item. When you do, set LuaScriptPath on content that actually runs scripts: held items, melee weapons, throwables, consumables, armor, structures, plants, projectiles, status effects, and creatures. Other item types ignore that field; Mod Prep reports it as an error.

See the Lua programming reference and Lua safety and limits.

Locale packs

A language pack is also a mod: modinfo.json plus overlay JSON under Config/. You do not need Mod Prep or Lua to contribute translations. See Community translations.

Custom worlds

Mods can add extra Sandbox world types with worldprofile_*.json plus files under WorldGenerator/, Spawning/, and optionally Parallax/. See Custom worlds and Detailed world building.

Publishing

  1. Validate in Mod Prep.
  2. Stage for in-game. That writes a folder under Documents/My Games/Signs of Life/WorkshopUpload/.
  3. In the game, open Mods → Staged Mods and Upload New Mod or Update Existing Mod. Mod Prep does not talk to Steam itself.

After Steam creates the item, the source project remembers it in .solmodproject.json next to modinfo.json. Keep that file with the project: it is not included in the downloadable mod, and it prevents a cleaned staging folder from becoming a second Workshop item on the next publish.

Load Now and Disable

  • Load Now adds a local or newly downloaded mod to a running single-player session when it can.
  • A newly subscribed, enabled Workshop mod does the same after Steam finishes installing it.
  • Disable turns a mod off for the next launch. Turning one off while you are in a world reloads game content.
  • Multiplayer does not offer Load Now.

Example Mod

The installed game includes a complete sample in its top-level ExampleMod/ directory. Copy that folder into Documents/My Games/Signs of Life/Mods/ before loading it; the shipped copy does not enable itself.

Example Mod is a cookbook for established projects: weapons, Lua, animations, sounds, armor, clothing, recipes, a creature, and sandbox world types. Start with Mod Prep's one-item project first, then copy individual pieces from Example Mod as you need them.