Mod manifest (manifest.json)
Every mod must include a manifest.json file in its root directory. The manifest defines mod metadata, dependencies, and loading behavior.
A JSON schema file (manifest.schema.json) is included in the ExampleMod project for IDE IntelliSense support.
Required fields
| Field | Type | Description |
|---|---|---|
id |
string | Unique mod identifier. Must match [a-zA-Z0-9][a-zA-Z0-9_-]*. Must not start with COI- (reserved for official content). |
version |
string | Mod version (e.g. 0.0.1, 1.2.3a). Follows the pattern major.minor[.patch[letter]]. |
primary_dlls |
string[] | List of DLL file names to load (DLLs will be loaded in the provided order). All loaded DLLs must be located in the mod's directory. |
Optional fields
| Field | Type | Description |
|---|---|---|
display_name |
string | Human-readable name shown in UI (max 50 characters). |
description_short |
string | Short description (max 180 characters). |
description_long |
string | Detailed description shown in mod details. |
authors |
string or string[] | Author name or array of author names. |
min_game_version |
string | Minimum compatible game version (e.g. 0.8.0). |
max_verified_game_version |
string | Highest game version the mod has been tested with. |
links |
string[] | Web links (GitHub, YouTube, etc.). |
mod_dependencies |
string[] | Required mod IDs. Supports version constraints (e.g. OtherMod >= 1.0.0). |
optional_mod_dependencies |
string[] | Optional mod IDs with same version constraint syntax. |
incompatible_mods |
string[] | Mod IDs that cannot be loaded together with this mod. |
non_locking_dll_load |
bool | If true, DLLs are loaded into memory instead of locked on disk. Allows updating files without closing the game. |
can_add_to_saved_game |
bool | If true, the mod can be added to an existing save. |
can_remove_from_saved_game |
bool | If true, the mod can be removed from an existing save. |
primary_mod_class_name |
string | Class name to use when multiple IMod implementations are found in the loaded DLLs. |
Example manifest
{
"id": "ExampleMod",
"version": "0.0.1",
"display_name": "Example Mod",
"description_short": "A simple example mod for Captain of Industry.",
"authors": "Your Name",
"primary_dlls": ["ExampleMod.dll"],
"non_locking_dll_load": true
}
Dependencies
Mods are loaded in dependency order (topologically sorted).
If your mod depends on another mod, declare it in mod_dependencies:
{
"mod_dependencies": ["SomeLibraryMod", "AnotherMod >= 2.0.0"]
}
Dependencies with version constraints use the >= syntax (e.g. ModId >= 1.0.0). Spaces around >= are recommended for readability.
All mandatory dependencies must be present and loaded, or the game will report an error.
Optional dependencies (optional_mod_dependencies) are loaded first if available but do not cause errors if missing.