Package format requirements

A valid package is a zip file that contains the following files:

icon.png PNG icon for the mod, must be 256x256 resolution.
README.md Readme in markdown syntax to be rendered on the package's page.
CHANGELOG.md (optional) Changelog in markdown syntax to be rendered on the package's page.
manifest.json JSON file with the package's metadata.

For mods, the file structure should be as follows (everything is optional):

app/ The game directory (where the executable is)
option/ The option directory
post_load.ps1 Script executed by the mod launcher

(see: Harmony modules (CW: vore))

Additionally, the manifest.json must contain the following fields:

Key Required Description Example value
name

Name of the mod, no spaces. Allowed characters: a-z A-Z 0-9 _

Underscores get replaced with a space for display purposes in some views on the website & mod manager.

Important: This will become a part of the package ID and can not be changed without creating a new package.

"Some_Mod"
description A short description of the mod, shown on the mod list. Max 250 characters.
"Hello world"
version_number Version number of the mod, following the semantic version format Major.Minor.Patch.
"1.3.2"
dependencies List of other packages that are required for this package to function
[
    "MythicManiac-TestMod-1.1.0",
    "SomeAuthor-SomePackage-1.0.0"
]
website_url URL of the mod's website (e.g. GitHub repo). Can be an empty string.
"https://example.com/"
installers

A list of installer declarations. Installer declarations can be used to explicitly control how a mod manager should install the package. If omitted, rainycolor is assumed.

This field should either contain a list of at least one valid installer declarations or be omitted entirely. Valid declarations are:

  • { "identifier": "rainycolor" }
    (for the file structure described above)
  • { "identifier": "bsl", "version": "4.0" }
    (for the BlueSteel LIVE format)
  • { "identifier": "segatools", "module": <module> }
    (for a special package containing a segatools module, such as mu3hook)
[
    { "identifier": "rainycolor" }
]

Example manifest.json content:

{
    "name": "TestMod",
    "version_number": "1.1.0",
    "website_url": "https://github.com/thunderstore-io",
    "description": "This is a description for a mod. 250 characters max",
    "dependencies": [
        "MythicManiac-TestMod-1.1.0"
    ],
    "installers": [{ "identifier": "rainycolor" }]
}