# Uploading a Mod

Thunderstore requires 4 different things to upload a mod, but there are also a few best practices.

(these are all links lol, you can click them to scroll to one)

1. [#required-files](#required-files "mention")
2. [#override-folders](#override-folders "mention") (important if you want your file structure to stay the same)
3. [#making-modpacks](#making-modpacks "mention")

## Required Files <a href="#required-files" id="required-files"></a>

The three things ***required*** are&#x20;

* manifest.json
* README.md
* icon.png&#x20;

everything else is optional, even your mod.&#x20;

### manifest.json

manifest should be set up like so,&#x20;

![](https://1229800202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQAkTlyeVttU3CJdmYk%2Fuploads%2Fh8dNoh0hYkQBZ7d40gvT%2Fimage.png?alt=media\&token=a7edd3d3-7562-42dc-8cd5-4b42b4147dac)

and can be validated by using this page.&#x20;

<https://enter-the-gungeon.thunderstore.io/tools/manifest-v1-validator/>\
\
dependencies can be found on the mods page, for example, if you were to depend on BepInEx you would grab the dependency string from its page

![](https://1229800202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQAkTlyeVttU3CJdmYk%2Fuploads%2FurnnbVnQ3DXnwcjr0yEb%2FdependsString.png?alt=media\&token=400a891a-0989-4379-81b0-268ab8802151)

### README.md

The README.md is basically your mods' description. Use this page to view how it will look on thunderstore.

<https://enter-the-gungeon.thunderstore.io/tools/markdown-preview/>\
\
this runs off of markdown so you can have some text or embed things like gifs if you want.

### Icon.png

this icon is what is going to show up as your mod, ie. it's the picture shown here&#x20;

![](https://1229800202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQAkTlyeVttU3CJdmYk%2Fuploads%2FjDHjiDFTpRNBMgW68BK3%2Fimage.png?alt=media\&token=c8cee373-dba2-4781-b1ef-eae550ce71a4)

and here when browsing&#x20;

![](https://1229800202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQAkTlyeVttU3CJdmYk%2Fuploads%2FO4e748UfJs5S0acY49Ot%2Fimage.png?alt=media\&token=34dd5a88-db82-4149-ba7a-df180514b96e)

The icon ***must*** be 256 pixels by 256 pixels

## Override folders

* plugins
* monomod (`.mm.dll` will implicitly install to a subdirectory within this folder)
* patchers
* core
* config

these folders in your mod will put them in the files from your mod into the corresponding bepInEx folder when installed via the mod manager, and will also keep the file structure.&#x20;

If you dont use the override folders, and your mod looks like this

![](https://1229800202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQAkTlyeVttU3CJdmYk%2Fuploads%2FCgT4yprQL0g7HHJvfwsu%2Fimage.png?alt=media\&token=0fce59df-d20c-474d-8cfb-b5910c79f7ed)

And its installed by the mod manager, it will look like this in the plugins folder

![](https://1229800202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQAkTlyeVttU3CJdmYk%2Fuploads%2FxoMKDGVMzJRPlW1fU376%2Fimage.png?alt=media\&token=52315c56-9d4a-438f-8c38-b06e142f367f)

However, if the mod went plugins/all the files then all the stuff like sprites etc. would have come out the same.&#x20;

## Making Modpacks

Making a modpack is pretty simple in thunderstore, you don't need to put the files from every mod you want when you upload, but rather, in your manifest.json, just add the dependency string of all the mods you want and they will automatically be downloaded when a user downloads with dependencies.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mtgmodders.gitbook.io/etg-modding-guide/getting-started/uploading-a-mod.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
