Making a package

A package is a .zip with three files at its root, plus your mod files:

MyMod.zip
├── manifest.json
├── icon.png      (256×256 PNG)
├── README.md
└── plugins/
    └── MyMod.dll

manifest.json

{
  "name": "MyMod",
  "version": "1.0.0",
  "description": "What it does, in one line (max 250 chars)",
  "website": "https://github.com/you/MyMod",
  "dependencies": [
    "[email protected]"
  ]
}

Where files go

For BepInEx games, Hefty puts your files in BepInEx/plugins/YourTeam-MyMod/. If the zip has top-level plugins/, patchers/, config/ or core/ folders (optionally inside a BepInEx/ folder) they are mapped to the matching BepInEx folders. A package whose zip contains winhttp.dll (like a BepInEx pack) is treated as the mod loader.

Unreal Engine games

Zip your mod as usual. Hefty sorts the files by type:

Because Unreal can't load mods from another folder, Hefty copies the active profile into the game when you press Play modded, and removes it again for Play vanilla.

Drop-in games

For other games an admin sets an install folder (for example Mods). Everything in your zip, except the manifest, icon and README, is copied there keeping its folders.

Modpacks

A modpack is a normal package with no mod files, just a manifest listing every mod as a dependency. Tick the Modpacks category when uploading. You can ship default configs by adding a config/ folder.

Uploading from a script

Create an API token on your account page, then:

curl -H "Authorization: Bearer gm_xxx" \
  -F game=lethal-company -F team=YourTeam \
  -F categories=tools -F [email protected] \
  http://localhost:3000/api/v1/packages

API