Skip to content

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.

The Resonite BepInEx Template comes with Thunderstore packaging built-in, using TCLI.

If you used the template, you have two options for building packages:

Terminal window
dotnet tcli build
Terminal window
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/.

The PublishTS property will build, package, and publish to Thunderstore all in one command:

Terminal window
# Set environment variable first
export TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # Linux/Mac
# or
set TCLI_AUTH_TOKEN=YOUR_API_TOKEN # Windows CMD
# or
$env:TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # PowerShell
# Then run the build
dotnet build -c Release -t:PackTS -p:PublishTS=true
Terminal window
# Using --token flag
dotnet tcli publish --token YOUR_API_TOKEN
# Or use environment variable (see above)
dotnet tcli publish

A Thunderstore API token is required to publish packages with TCLI. To acquire an API token:

  1. Log in to thunderstore.io
  2. Navigate to your team page: Settings → Teams → [Your team name]
  3. From the left sidebar, select Service Accounts
  4. Select Add service account and fill the name of the account into the form
  5. 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:

  1. Set it as TCLI_AUTH_TOKEN environment variable (e.g. for GitHub Actions)
  2. 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!

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)

Your manifest is crucial — without it, your mod won’t work on Thunderstore.

Here’s an example of what it should look like:

manifest.json
{
"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:

manifest.json
{
...
"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 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

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.

Choosing a license can feel overwhelming, but here’s a simple guide:

  1. Do you want others to use your code in their mods?
  2. Do you want credit for your work?
  3. 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

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

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.

Want that shiny Mod Developer role in the FrooxEngine Modding Discord?

Here’s how to get it:

  1. Join the server
  2. Go to #mod-development channel
  3. Mention that you want the Mod Developer role and link your published mod
  4. 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!