Skip to main content

Publishing To Thunderstore

VotV mods can be packaged to work with Thunderstore, as it allows streamlined mod installation as well as cross-version support. Thunderstore mods packages use the UnrealShimloader package format.

Folder Format

A typical .zip file for Thunderstore may look like this. The files icon.png, README.md, and manifest.json are required, while all other files and folders are optional.
Additionally, if you are including a .lua or .dll file in your mod, an enabled.txt is also required in the mod folder (it can be blank, it just needs to exist).

🗂️ MOD_AUTHOR-MOD_NAME-#.#.#.zip
📄 manifest.json
📄 README.md
📄 CHANGELOG.md
🖼️ icon.png
📁 mod
📄 enabled.txt
📁 scripts
📄 main.lua
📁 dll
📄 main.dll
📁 pak
📄 MOD_NAME.pak
📁 cfg
📄 MOD_AUTHOR-MOD_NAME-cfg.json

The Manifest

The manifest.json is a file that contains information about your mod to be included on your Thunderstore mod page. The file is a .json file that contains the following values:

KeyDescriptionExample value
nameName of the mod page, with no spaces.
Allowed characters: a-z A-Z 0-9 _
"Some_Mod"
descriptionA short description of the mod, shown on the mod list. Max 250 characters.
"Hello world"
version_numberVersion number of the mod, following the semantic version format Major.Minor.Patch
"1.3.2"
dependenciesList of other packages that are required for this package to function.
[
"MythicManiac-TestMod-1.1.0",
"SomeAuthor-SomePackage-1.0.0"
]
website_urlURL of the mod's website (e.g. GitHub repo). Can be an empty string.
"https://example.com/"

For example, a manifest.json might look like this:

{
"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"
]
}

You can read more about packaging mods, file formats, updating your mods, and dealing with common issues on the Thunderstore Wiki.