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. |
faq/ | No | Optional FAQ pages, separate from the README — see below. |
| 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
- BepInExPack_Valheim is assumed. A dependency entry for BepInExPack_Valheim is 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.
FAQ
A mod can ship its own FAQ, separate from the README — useful for longer troubleshooting notes you don't want cluttering the mod page itself. Each FAQ entry is its own page, linked from a collapsed list on your mod page.
Put Markdown files in a faq/ folder at the root of the ZIP:
faq/
Why does the game crash on startup.md
Installation/
Manual install.md
Using a mod manager.md
- Top-level files (
faq/*.md) are shown ungrouped. - One level of subfolders (
faq/Section Name/*.md) groups its files under a section named after the folder. Deeper nesting isn't supported. - Title: each page's title is its file's first non-empty line, with Markdown stripped (so a leading
#heading works naturally as the title) — there's no separate title field to keep in sync. - Ordering: entries (and sections) are always sorted alphabetically by file/folder name.
- Up to 100 FAQ entries per mod. Folder and file names are restricted to characters that extract cleanly on Windows.
You can edit your FAQ (add, rename, move between sections, delete) from your mod page without re-uploading a new version — look for the FAQ box below your README. When creating an entry through that UI, the filename is generated from the title you type; if that collides with an existing file, a _2, _3, … suffix is appended automatically.
Uploading a new version through a hand-built ZIP replaces the whole package, faq/ included — carry your existing FAQ files forward yourself if you're not using the online builder (which preserves them automatically, the same way it preserves your icon).
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.