Tutorial: How to create a manifest
Last edited by AtlasVBot on 2025-09-13 18:57:31
A manifest.json is a file that gives SMAPI some basic information about the mod, so it knows how to label and load it. Every mod needs a manifest.json, no matter how big or small. So let's look at a basic one:
{
"Name": "Jorts and Jean - Custom NPCs",
"Author": "tiakall",
"Version": "1.2.1",
"Description": "Adds custom NPCs Jorts and Jean, the helper cats.",
"UniqueID": "tiakall.jortsandjean",
"UpdateKeys": ["Nexus:10950"],
"ContentPackFor": {
"UniqueID": "Pathoschild.ContentPatcher"
},
"Dependencies": [
{
"UniqueID": "spacechase0.JsonAssets",
"IsRequired": true,
},
],
}
Name: the name as displayed in SMAPI. Title it how you like.
Author: you, if you're creating a new mod! In this case, this is from my NPC mod, so it's me!
Version: SMAPI and most modders use semantic versioning, where the numbers are in a #.#.# format. The first digit is a major change (e.g., complete rewrites, framework changes), the second digit is medium changes (e.g., additional content/lots of bugfixes) and the third is minor changes and hotfixes (e.g., "Jorts walked out of his new event after I pushed the new update and I had to quickly fix it".) That said, you aren't required to follow this format, as long as your version is consistent between your mod and the site you've uploaded it to (more on that in a bit.)
Description: A short description of what your mod does. This and the name are displayed in SMAPI during the load, so keep it simple and helpful.
UniqueID: Now this is important: you need an ID for your mod that does not overlap with any other mod, otherwise SMAPI will not load either mod. The best practice to avoid this is to use the format modauthorname.modname, so that as long as you label your mods distinct from each other, they shouldn't conflict.
UpdateKeys: SMAPI will automatically check the major mod websites for updates. SMAPI will give users a notice when the version number on the uploaded website is higher than the number in the manifest. Nexus is shown here, but Moddrop and github are also supported. The number here comes from your mod page. (Note for Nexus mods: you do not have to publish your mod to get the mod number - just fill in the first page and save.) If this field is absent, SMAPI will note there is no update key. Putting ??? in place of the number will prevent both the error message and the automated check (useful if you have, for example, a mod with multiple content packs and you don't want each one triggering an update notice.)
ContentPackFor: Unless you are creating a C# mod which interacts directly with the game code, you are likely creating a content pack formatted for a framework. The unique ID of the framework mod you're using goes here.
Dependencies: If your mod relies on other mods that aren't its framework, you can put them here - in this case, I have JSON Assets as a requirement on Jorts and Jean due to having JSON Asset items in their gift tastes. Other examples of dependencies might include tilesheets for a map mod, or NPC mods add-ons like NPC Utilities or Custom Fixed Dialogue.
- IsRequired: true will prevent your mod from loading at all if the other mod is not present - use this when the mod will crash or not function properly without the dependency.
- IsRequired: false is a "soft" requirement - it will not prevent your mod from loading. This will tell SMAPI to load the other mod before your mod. This is usually used when your mod contains optional content added by another mod (for example, if you make a map patch for a Ridgeside location, SMAPI will not recognize the maps it needs to patch unless Ridgeside is loaded first.) Prior to 1.6, these "false dependencies" were also used to alter loading order in order to make mods compatible: for example, if your mod and SVE both modify the same area of a map, you may want to include it as a false dependency so your patch is applied after the SVE patch. (Note: 1.6 allows for mods to set precedence in loading order to allow for more flexible compatibility in applying patches, so false dependencies are generally not needed between mods updated for 1.6.)
And that's all there is to it!