Skip to content

concepts packs and ids

cheaterbob edited this page Oct 3, 2026 · 1 revision

Pack structure and IDs

Every pack has one root manifest.json, one or more content roots, and optional assets. The loader treats the entire pack as one dependency, validation, enable-state, and update unit.

Recommended layout

manifest.json
content/
  enemies/
  clothing/
  items/
  stages/
  rules/
  patches/
assets/
  sprites/
  audio/

Content files may be organized into subdirectories below a declared content root. Asset paths are resolved from the pack root. Use / in JSON paths and keep every referenced file inside the pack.

Manifest

A small manifest looks like this:

{
  "schemaVersion": 1,
  "id": "example.my-mod",
  "displayName": "My Mod",
  "version": "1.0.0",
  "modApiVersion": 1,
  "authors": ["Example Author"],
  "description": "Adds an example enemy.",
  "dependencies": [
    { "id": "core", "version": ">=0.1.0" }
  ],
  "contentRoots": ["content"]
}

version is the pack's semantic version. modApiVersion is the content-contract version supported by the game. They are independent.

Optional manifest sections declare preview PNGs, dependencies, soft ordering, conflicts, exact override slots, and priority. assetBundles is generated by the Unity packager and must not be authored manually.

Pack IDs

Pack IDs use lowercase letters, numbers, ., _, and -. Choose an owner-qualified name such as author.project-name; display names are not identifiers.

The pack ID normally owns the namespace before : in every content ID:

example.my-mod:enemy/acid-zombie
example.my-mod:weapon/acid-launcher
example.my-mod:patch/player-art

The category path after : uses the pattern defined by that content schema. References always use full IDs, including when two files are in the same pack.

Stability rules

Once a stable ID is released, treat it as permanent. Saves and other mods may refer to it.

  • Change displayName to rename something for players; do not rename its ID.
  • Never reuse an old ID for unrelated content.
  • Keep removed content IDs reserved when old saves or dependencies may retain them.
  • Declare dependencies for IDs owned by another pack.
  • Target Core through published IDs and slots, not Unity filenames or numeric database IDs.

See Dependencies and load order, Defaults and compatibility, and manifest.schema.json in the schema index.

Clone this wiki locally