Packaging and Publishing
The most preferred way to publish Resonite mods is through Thunderstore.
Before uploading your mod, you need to have built it into a .dll
.
Packaging With TCLI
Section titled “Packaging With TCLI”The Resonite BepInEx Template comes with Thunderstore packaging built-in, using TCLI.
If you used the template, you have two options for building packages:
Using TCLI directly
Section titled “Using TCLI directly”dotnet tcli build
Using the PackTS target
Section titled “Using the PackTS target”dotnet build -c Release -t:PackTS -v d
The PackTS target will automatically build your mod and create a Thunderstore package in one step. The built package will be found at ./build/
.
Publishing with PackTS target
Section titled “Publishing with PackTS target”The PublishTS property will build, package, and publish to Thunderstore all in one command:
# Set environment variable firstexport TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # Linux/Mac# orset TCLI_AUTH_TOKEN=YOUR_API_TOKEN # Windows CMD# or$env:TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # PowerShell
# Then run the builddotnet build -c Release -t:PackTS -p:PublishTS=true
Publishing with TCLI directly
Section titled “Publishing with TCLI directly”# Using --token flagdotnet tcli publish --token YOUR_API_TOKEN
# Or use environment variable (see above)dotnet tcli publish
Authentication
Section titled “Authentication”A Thunderstore API token is required to publish packages with TCLI. To acquire an API token:
- Log in to thunderstore.io
- Navigate to your team page: Settings → Teams → [Your team name]
- From the left sidebar, select Service Accounts
- Select Add service account and fill the name of the account into the form
- The API token is shown on the following confirmation page
An API token is required only for the publish command. There’s two ways to configure it:
- Set it as
TCLI_AUTH_TOKEN
environment variable (e.g. for GitHub Actions) - Pass it as a parameter to the command:
tcli publish --token tss_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
If both methods are used, the command parameter takes precedence.
Once you have the ZIP package, you can jump straight into Uploading to Thunderstore!
Manual Packaging
Section titled “Manual Packaging”Create a new folder. Here we want to create a few files and one folder.
Your new mod folder should look like this:
- LICENSE (optional)
- manifest.json
- README.md
- CHANGELOG.md (optional)
- icon.png
Directoryplugins
DirectoryYourMod
- YourMod.dll
- YourMod.pdb (optional)
manifest.json
Section titled “manifest.json”Your manifest is crucial — without it, your mod won’t work on Thunderstore.
Here’s an example of what it should look like:
{ "name": "Your_mod_name", "version_number": "1.0.0", "website_url": "https://resonitemodding.github.io", "description": "A mod description", "dependencies": ["ResoniteModding-BepisLoader-1.3.1"]}
The manifest is fragile. Use this tool to validate it:
Thunderstore Manifest Validator
Notes:
- Underscores in
name
will appear as spaces on the site. version_number
must increase with every release.website_url
is optional, but linking your source page is recommended. (e.g. Github)- You can include any number of dependencies.
Example with dependencies:
{ ... "dependencies": [ "ResoniteModding-BepisLoader-1.3.1", "ResoniteModding-BepisLocaleLoader-1.0.0" ]}
Dependency strings can be found on the individual mod’s page on Thunderstore.
README.md
& CHANGELOG.md
Section titled “README.md & CHANGELOG.md”README.md
becomes your mod’s description on Thunderstore.CHANGELOG.md
is optional, but useful for showing update history.
Both files support Markdown formatting. Helpful resource: Markdown Cheat Sheet
icon.png
Section titled “icon.png”Your icon must be exactly 256x256 pixels.
Transparency is supported, although if used, it is recommended the icon has clear borders that work with any background color as icons might be displayed in a variety of themes (e.g. with 3rd party mod managers).
APNG is technically valid, but only the first frame will currently be displayed on the site.
LICENSE
Section titled “LICENSE”Choosing a license can feel overwhelming, but here’s a simple guide:
- Do you want others to use your code in their mods?
- Do you want credit for your work?
- Do you care if others use it in commercial/closed-source projects?
Common license options:
- MIT License — Very permissive. Others can reuse your code with attribution, even commercially.
- GPL-3.0 — Requires others to also open-source their projects if they use your code.
- CC0 / Unlicense — No rights reserved. Anyone can use your code however they want, no credit needed.
Generate one here: choosealicense.com
Making a ZIP
Section titled “Making a ZIP”Now zip up your contents.
Do NOT zip the folder itself.
Instead, select all files inside and compress them.
On Windows:
- Select all files
- Right-click → Send to → Compressed (zipped) folder
Uploading to Thunderstore
Section titled “Uploading to Thunderstore”To upload a mod, first create a Thunderstore team by logging in and going here:
https://thunderstore.io/settings/teams/create/
Then go to: Thunderstore Upload Page
- Upload your
.zip
- Select your team
- Choose Resonite as the community
- Select relevant categories
- Submit!
If your mod is NSFW, make sure to mark it.
Discord Mod Releases
Section titled “Discord Mod Releases”Want that shiny Mod Developer role in the FrooxEngine Modding Discord?
Here’s how to get it:
- Join the server
- Go to
#mod-development
channel - Mention that you want the Mod Developer role and link your published mod
- Wait for the role to be assigned
Once you have the Mod Developer role, you can advertise your mod in the #resonite-mod-releases
channel to let the community know about your creation!