Packaging & Dependencies
Hexium accepts Thunderstore-compatible ZIP packages. This page covers how to structure your package and — the part most people ask about — how to make your mod depend on another mod.
Package structure
The ZIP must contain these files at the root of the archive (not inside a subfolder):
| File | Required | Notes |
|---|---|---|
manifest.json | Yes | Package metadata — see below. |
icon.png | Yes | Exactly 256×256 pixels. |
README.md | Yes | Shown on your mod page. Markdown reference. |
CHANGELOG.md | No | Shown on the versions page if present. |
| your plugin DLLs, assets, … | — | Anything else your mod ships. |
The maximum package size is 512 MB.
manifest.json
All five fields are required (use "" or [] when you have nothing to put in them):
{
"name": "MyAwesomeMod",
"description": "Short description shown in mod lists (max 256 characters).",
"version_number": "1.0.0",
"website_url": "https://github.com/you/MyAwesomeMod",
"dependencies": [
"Azumatt-AzuExtendedPlayerInventory-1.4.3"
]
}
| Field | Rules |
|---|---|
name | 1–128 characters; letters, digits, and underscores only. No spaces or dashes. |
description | String, at most 256 characters. |
version_number | Major.Minor.Patch, e.g. 1.0.0. Each version can only be uploaded once. |
website_url | String — link to your source repository or homepage. Can be empty. |
dependencies | Array of dependency strings — see the next section. Can be empty. |
Making your mod depend on another mod
If your mod requires another mod (a library like Jötunn, an API, or any other mod), list it in the dependencies array of your manifest.json. Mod managers then install the dependency automatically alongside your mod, and it is shown in the Dependencies list on your mod page.
Each entry is a dependency string in the form:
TeamName-ModName-1.0.0
- TeamName — the team (author) name the mod is published under.
- ModName — the mod's
namefrom its manifest. - 1.0.0 — the minimum version your mod needs; mod managers will use that version or newer.
You don't have to assemble it by hand: every mod page on Hexium has a “Depend on this mod” box with the current dependency string ready to copy.
Good to know
- BepInEx is assumed. Dependency entries containing “BepInEx” are stripped from your manifest automatically on upload — you don't need to declare it.
- Modpacks. Packages that declare more than 5 dependencies are automatically tagged as a
modpack. - Only declare what you load. A dependency string does not bundle the other mod's files into your ZIP — never copy another author's DLLs into your package; reference them via dependencies instead.
- Soft dependencies. If your mod merely has optional integration with another mod (works fine without it), you can leave it out of
dependenciesand mention it in your README instead.
Writing your README
Your README.md is your mod page. Not sure what to write? This skeleton covers what players usually look for:
# MyAwesomeMod One or two sentences on what the mod does and why someone would want it. ## Features - The main things it adds or changes ## Installation Install with your mod manager, or drop the DLL into `BepInEx/plugins`. ## Configuration Where the config file lives and what the notable settings do. ## Compatibility Required mods (see Dependencies), known conflicts, client/server notes. ## Credits Say thanks to anyone who inspired or helped you.
See the formatting reference for everything Markdown supports here, including a live preview playground.
Uploading
Once your ZIP is ready, head to the submit page. You'll pick the team to publish under and where the mod needs to be installed (client, server, or both). Uploads are scanned with VirusTotal before being announced to the Discord mod feed.
Don't want to build a ZIP at all? The "Build online" tab on the submit page does everything on this page for you: fill in the fields, pick dependencies from the site's mod list, and it assembles and publishes the package. It's the easiest way to make a modpack — just search and add the mods it should contain.