Thunderstore CLI (just "TCLI" from here on) is a command line tool for building and uploading mod packages to Thunderstore mod database, and installing mods via the command line.
If all you're interested in is the package building/publishing capabilities of TCLI, then you can simply do:
dotnet tool install -g tcli
In your command line of choice, which will install the tool via NuGet. This version doesn't come with the mod installation functionality however.
Otherwise, just download the latest release from here and extract the ZIP wherever you'll be using TCLI.
For building packages, see the wiki.
For managing mods via TCLI, see the next section.
TCLI will automatically download and install mods in the correct format for you, and will run the game with whatever arguments your mod loader requires.
For all of these commands, tcli.exe
can be swapped for ./tcli
on Linux. Everything else should be the same.
To get started, import your game from the Thunderstore API using:
tcli.exe import-game {game identifier, e.g. ror2 or valheim}
To run the game from a specific file instead of say, through Steam (you probably want this for servers!) use --exepath {path/to/server/launcher.exe}
. Passing in a script file also works fine.
To install mods, use the command:
tcli.exe install {game identifier} {namespace-modname(-version)}
You can also add --profile ProfileName
to set a custom name for the profile. By default it uses the name DefaultProfile
.
Mod uninstalls are done in a similar fashion:
tcli.exe uninstall {game identifier} {namespace-modname}
And running the game is done with:
tcli.exe run {game identifier}
The --profile
snippet from above still applies to both of those commands.
If you want to run the game with a specific set of arguments, you can use --args "--flag parameter1 parameter2"
The installed mods by default will go into %APPDATA%\ThunderstoreCLI
on Windows and ~/.config/ThunderstoreCLI
on Linux. This is configurable by using --tcli-directory
with any command.
The ThunderstoreCLI directory will contain a file called GameDefintions.json
, which contains metadata about the configured games, the profiles for each game, and a copy of the manifests of each installed mod. You shouldn't normally be editing this manually.
The same directory also contains a cache for mod ZIPS named ModCache
, the actual profile files in a folder called Profiles
, and a caches for the API responses from the Thunderstore API for packages.
All in all, the structure is very similar to that of TMM/r2mm, but on the command line!
This project uses Pre-commit to enforce code style practices. In addition to having .NET and pre-commit installed locally, you'll need dotnet-format, which can be installed with:
dotnet tool install -g dotnet-format
This project uses Semantic Versioning. Versioning is handled with MinVer via Git tags.
- To create a new pre-release, use alpha suffix, e.g.
git tag 0.1.0-alpha.1
- Any subsequent commits will automatically be versioned "0.1.0-alpha.1.1", where the last number denotes the number of commits since the last version tag (a.k.a. "height")
- To create a new release, use e.g.
git tag 0.1.0
- Any subsequent commits will automatically be versioned "0.1.1-alpha.0.1"
- Remember to push the tags to GitHub, e.g.
git push origin 0.1.0