CMAPI mod manifest reference
Each mod directory must contain a UTF-8 manifest.json. CMAPI validates the entire manifest before loading the entry assembly and reports all detected metadata errors together.
Complete example
{
"Name": "Hello Crafter",
"Author": "Your Name",
"Description": "Adds a friendly console greeting command.",
"Version": "1.0.0",
"MinimumApiVersion": "1.0.0",
"UniqueID": "YourName.HelloCrafter",
"EntryDll": "HelloCrafter.dll",
"UpdateKeys": [
"GitHub:YourGitHubName/HelloCrafter"
]
}Fields
| Field | Required | Meaning |
|---|---|---|
Name |
Yes | Player-facing mod name, at most 100 characters. |
Author |
Yes | Player-facing author or team name, at most 100 characters. |
Description |
Yes | Clear one-sentence summary, at most 300 characters. |
Version |
Yes | Installed semantic version, such as 1.2.0 or 1.2.0-beta.1. |
MinimumApiVersion |
Yes | Oldest CMAPI API version this build supports. CMAPI rejects a mod requiring a newer installed runtime. |
UniqueID |
Yes | Stable, globally unique ID such as SourceNineLabs.ExampleMod. |
EntryDll |
Yes | Relative path to the entry assembly inside this mod's directory. Absolute and escaping paths are rejected. |
UpdateKeys |
No | Zero to ten provider-prefixed release identifiers. |
Unique IDs
A UniqueID has at least two dot-separated parts. Each part starts with a letter or number and can then contain letters, numbers, _, or -.
Good:
SourceNineLabs.ExampleMod
AuthorName.Mod-Tools
Rejected:
ExampleMod
.ExampleMod
Author Name.ExampleMod
Do not change an ID after publishing. CMAPI uses it for duplicate detection, command/event ownership, update state, and future dependency resolution.
Versions
CMAPI follows semantic-version precedence:
1.0.0-beta.1 < 1.0.0-beta.2 < 1.0.0 < 1.1.0 < 2.0.0
Use a higher major version for breaking mod behavior, a higher minor version for compatible features, and a higher patch version for compatible fixes.
Update keys
Each key uses Provider:Value. Provider names are case-insensitive.
| Provider | Format | Status in 1.0.0 |
|---|---|---|
| GitHub | GitHub:owner/repository |
Implemented; checks the latest stable GitHub release. |
| Nexus | Nexus:modNumber |
Reserved; requires a Nexus API key or SourceNine update proxy. Reported as unsupported for now. |
| CMAPI | CMAPI:modNumber |
Reserved for a future SourceNine Labs registry. |
GitHub release tags must be semantic versions such as 1.2.0 or v1.2.0. Checks run outside the game thread, time out safely, and cache successful results. updates check bypasses the cache for a fresh request.
Never put passwords, API keys, or private tokens in a manifest.