Packaging on Thunderstore#
This guide is designed to explain how Steamodded mods interact with Thunderstore. If you are just looking for information on the process of putting a mod on Thunderstore, checkout Creating a Package.
Rules#
Thunderstore has a set of rules that mods must follow. You can view them at Global Rules. I wanted to point out a few that might be unexpected for people used to distributing elsewhere.
Mods should not self update themselves
Mods should not download and then run code from the internet
Make sure to read all the rules.
Manifest#
Thunderstore packages have a file, manifest.json, which is documented on the Thunderstore wiki. This is different than Steamodded’s metadata. Keep in mind that these 2 systems are completely separate, Steamodded doesn’t use Thunderstore manifests and Thunderstore doesn’t use Steamodded metadata, but both .json files can live in the same directory.
Versioning#
Thunderstore has a different versioning system than Steamodded does. In Thunderstore, the versions are in the format x.y.z where x, y and z are all numbers. This more restrictive versioning scheme may not be compatible with how you have been versioning you’re mod in the past. In the case your version is not compatible, here are your course of actions:
Switch to using a versioning compatible with Thunderstore (Recommended)
This prevents confusion with versions, when people are using one system or the other.
Make sure you don’t accidentally make older versions of your mod considered higher when changing the version number.
Use a separate version for Thunderstore and Steamodded.
If you do this, it’s recommended that the version is based on your Steamodded version to make it easier to switch between.
Dependancies#
Thunderstore has a very basic (relative to Steamodded’s) dependancy system. Mods can specifiy exact versions of other mods they depend on. Mod managers will download that version or newer. This is equivalent to Steamodded’s >= operator. It is recommended to include your dependancies in both the Thunderstore and Steamodded metadata.
Dependancies on Thunderstore will show link to the package on the website, and get mod managers to install them.
Dependancies on Steamodded will be checked when the game is started, and prevent your mod from loading if it’s missing dependancies.
Users can still manually install packages from Thunderstore, so they might mess up the dependancies.
The Thunderstore Wiki has more details about it’s dependancy system.
The version string for Steamodded looks like "Steamodded-Steamodded-X.Y.Z". For 1.0.0 beta’s, please consult the following chart:
List of Steamodded Beta Versions and Their Corresponding Thunderstore Version
v26.829.0 and higher are the same on both Thunderstore and Steamodded.
SMODS Versioning |
Thunderstore Versioning |
|---|---|
Package Structure#
When making a zip for thunderstore, the file structure somewhat matters.
Thunderstore files (
manifest.json,README.md,icon.png, etc.) must be in the root of the zip file.Lovely files (
lovely.toml, thelovelyfolder) must be in the root of the zip file.Steamodded’s manifest may be at any layer, but is recommended at the root of the zip file.
Whatever folder the metadata is located, the other smods files (such as
assetsandlocalization) must also be located. This shouldn’t require changes for most mods, you just have to add the thunderstore files.
An example file structure is seen below:
MyMod.zip
|-README.md
|-icon.png
|-manifest.json // Thunderstore manifest
|-smods.json // Steamodded metadata, can be named anything
|-main.lua // Main file, set in metadata
|-assets // Steamodded assets
||-1x
|||-jokers.png
|-lovely.toml // lovely.toml patch
|-lovely // lovely patch folder
||-patch.toml
Immutable Packages#
For reliability and stability, once a specific version of a package is successfully uploaded to Thunderstore, it cannot be modified (including README edits). Any changes after that point need a new version.