We are in the process of transferring the hosting and maintenance responsibilities of the wiki from Chucklefish to ConcernedApe, which is why the wiki will temporarily be hosted at stardewcommunitywiki.com. Soon the official wiki will resume at stardewvalleywiki.com and will be hosted going forward by ConcernedApe. Prior to the transfer to ConcernedApe we will update this site with the date on which the transfer will occur.

Modding:Modder Guide/APIs/Manifest

From Stardew Valley Wiki
Jump to: navigation, search

Creating SMAPI mods SMAPI mascot.png


Modding:Index

Every SMAPI mod or content pack must have a manifest.json file in its folder. SMAPI uses this to identify and load the mod, perform update checks, etc. The manifest info is also available to any mod in code (using this.ModManifest for the current mod's manifest, or mod registry for other mods' manifests).

Basic examples

Here's the basic format (see below for details on each field):

For a SMAPI mod For a content pack
{
  "Name": "Your Project Name",
  "Author": "your name",
  "Version": "1.0.0",
  "Description": "One or two sentences about the mod.",
  "UniqueID": "YourName.YourProjectName",
  "EntryDll": "YourDllFileName.dll",
  "MinimumApiVersion": "3.8.0",
  "UpdateKeys": []
}
{
  "Name": "Your Project Name",
  "Author": "your name",
  "Version": "1.0.0",
  "Description": "One or two sentences about the mod.",
  "UniqueID": "YourName.YourProjectName",
  "UpdateKeys": [],
  "ContentPackFor": {
    "UniqueID": "Pathoschild.ContentPatcher"
  }
}

Fields

Basic fields

All mods should specify the following fields.

field description
Name The mod name. SMAPI uses this in player messages, logs, and errors. Example:
"Name": "Lookup Anything"
Author The name of the person who created the mod. Ideally this should include the username used to publish mods. Example:
"Author": "Pathoschild"
Version The mod's semantic version. Make sure you update this for each release! SMAPI uses this for update checks, mod dependencies, and compatibility blacklists (if the mod breaks in a future version of the game). Examples:
"Version": "1.0.0"
"Version": "1.0.1-beta.2"
Description A short explanation of what your mod does (one or two sentences), shown in the SMAPI log. Example:
"Description": "View metadata about anything by pressing a button."
UniqueID A unique identifier for your mod. The recommended format is <your name>.<mod name>, with no spaces or special characters. SMAPI uses this for update checks, mod dependencies, and compatibility blacklists (if the mod breaks in a future version of the game). When another mod needs to reference this mod, it uses the unique ID. Example:
"UniqueID": "Pathoschild.LookupAnything"
EntryDll or ContentPackFor

All mods must specify either EntryDll (for a SMAPI mod) or ContentPackFor (for a content pack). These are mutually exclusive — you can't specify both.

For a SMAPI mod, EntryDll is the mod's compiled DLL filename in its mod folder. Example:
"EntryDll": "LookupAnything.dll"

For a content pack, ContentPackFor specifies which mod can read it. The MinimumVersion is optional. Example:

"ContentPackFor": {
   "UniqueID": "Pathoschild.ContentPatcher",
   "MinimumVersion": "1.0.0"
}

Minimum SMAPI version

The MinimumApiVersion fields sets the minimum SMAPI version needed to use this mod. If a player tries to use the mod with an older SMAPI version, they'll see a friendly message saying they need to update SMAPI. This also serves as a proxy for the minimum game version, since SMAPI itself enforces a minimum game version. Example:
"MinimumApiVersion": "3.8.0"

Dependencies

The Dependencies field specifies other mods required to use this mod. If a player tries to use the mod and the dependencies aren't installed, the mod won't be loaded and they'll see a friendly message saying they need to install those. For example:

"Dependencies": [
   {
      "UniqueID": "SMAPI.ConsoleCommands",
      "MinimumVersion": "3.8.0" // optional. If specified, older versions won't meet the requirement.
   }
]

You can mark a dependency as optional. It will be loaded first if it's installed, otherwise it'll be ignored.

"Dependencies": [
   {
      "UniqueID": "SMAPI.ConsoleCommands",
      "IsRequired": false
   }
]

Update checks

SMAPI can detect new versions of your mod and alert the user with a link to your mod page. You can enable this by setting the UpdateKeys field in your manifest.json, which tells SMAPI where to check.

See update checks for more information.

Anything else

Any other fields will be stored in the IManifest.ExtraFields dictionary, which is available through the mod registry. Extra fields are ignored by SMAPI, but may be useful for extended metadata intended for other mods.