{
    /**
     * Metadata about some SMAPI mods used in compatibility, update, and dependency checks. This
     * field shouldn't be edited by players in most cases.
     *
     * Standard fields
     * ===============
     * The predefined fields are documented below (only 'ID' is required). Each entry's key is the
     * default display name for the mod if one isn't available (e.g. in dependency checks).
     *
     *   - ID: the mod's latest unique ID (if any).
     *
     *   - FormerIDs: uniquely identifies the mod across multiple versions, and supports matching
     *     other fields if no ID was specified. This doesn't include the latest ID, if any. Multiple
     *     variants can be separated with '|'.
     *
     *   - MapLocalVersions and MapRemoteVersions correct local manifest versions and remote versions
     *     during update checks. For example, if the API returns version '1.1-1078' where '1078' is
     *     intended to be a build number, MapRemoteVersions can map it to '1.1' when comparing to the
     *     mod's current version. This is only meant to support legacy mods with injected update keys.
     *
     * Versioned metadata
     * ==================
     * Each record can also specify extra metadata using the field keys below.
     *
     * Each key consists of a field name prefixed with any combination of version range and 'Default',
     * separated by pipes (whitespace trimmed). For example, 'UpdateKey' will always override,
     * 'Default | UpdateKey' will only override if the mod has no update keys, and
     * '~1.1 | Default | Name' will do the same up to version 1.1.
     *
     * The version format is 'min~max' (where either side can be blank for unbounded), or a single
     * version number.
     *
     * These are the valid field names:
     *
     *   - UpdateKey: the update key to set in the mod's manifest. This is used to enable update
     *     checks for older mods that haven't been updated to use it yet.
     *
     *   - Status: overrides compatibility checks. The possible values are Obsolete (SMAPI won't load
     *     it because the mod should no longer be used), AssumeBroken (SMAPI won't load it because
     *     the specified version isn't compatible), or AssumeCompatible (SMAPI will try to load it
     *     even if it detects incompatible code).
     *
     *     Note that this shouldn't be set to 'AssumeBroken' if SMAPI can detect the incompatibility
     *     automatically, since that hides the details from trace logs.
     *
     *   - StatusReasonPhrase: a message to show to the player explaining why the mod can't be loaded
     *     (if applicable). If blank, will default to a generic not-compatible message.
     *
     *   - AlternativeUrl: a URL where the player can find an unofficial update or alternative if the
     *     mod is no longer compatible.
     */
    "ModData": {
        /*********
        ** Common dependencies for friendly errors
        *********/
        "Advanced Location Loader": {
            "ID": "Entoarox.AdvancedLocationLoader",
            "Default | UpdateKey": "Nexus:2270"
        },

        //"Content Patcher": {
        //  "ID": "Pathoschild.ContentPatcher",
        //  "Default | UpdateKey": "Nexus:1915"
        //},

        //"Custom Farming Redux": {
        //  "ID": "Platonymous.CustomFarming",
        //  "Default | UpdateKey": "Nexus:991"
        //},

        "Custom Shirts": {
            "ID": "Platonymous.CustomShirts",
            "Default | UpdateKey": "Nexus:2416"
        },

        "Entoarox Framework": {
            "ID": "Entoarox.EntoaroxFramework",
            "Default | UpdateKey": "Nexus:2269"
        },

        "JSON Assets": {
            "ID": "spacechase0.JsonAssets",
            "Default | UpdateKey": "Nexus:1720",
            "1.3.1 | Status": "AssumeBroken" // causes runtime crashes
        },

        "Mail Framework": {
            "ID": "DIGUS.MailFrameworkMod",
            "Default | UpdateKey": "Nexus:1536"
        },

        "MTN": {
            "ID": "SgtPickles.MTN",
            "Default | UpdateKey": "Nexus:2256",
            "~1.2.6 | Status": "AssumeBroken" // replaces Game1.multiplayer, which breaks SMAPI's multiplayer API.
        },

        "PyTK": {
            "ID": "Platonymous.Toolkit",
            "Default | UpdateKey": "Nexus:1726"
        },

        "Rubydew": {
            "ID": "bwdy.rubydew",
            "SuppressWarnings": "UsesDynamic", // mod explicitly loads DLLs for Linux/Mac compatibility
            "Default | UpdateKey": "Nexus:3656"
        },

        "SpaceCore": {
            "ID": "spacechase0.SpaceCore",
            "Default | UpdateKey": "Nexus:1348"
        },

        "Stardust Core": {
            "ID": "Omegasis.StardustCore",
            "Default | UpdateKey": "Nexus:2341"
        },

        "TMX Loader": {
            "ID": "Platonymous.TMXLoader",
            "Default | UpdateKey": "Nexus:1820"
        },


        /*********
        ** Map versions
        *********/
        "Adjust Artisan Prices": {
            "ID": "ThatNorthernMonkey.AdjustArtisanPrices",
            "FormerIDs": "1e36d4ca-c7ef-4dfb-9927-d27a6c3c8bdc", // changed in 0.0.2-pathoschild-update
            "MapRemoteVersions": { "0.01": "0.0.1" }
        },

        "Almighty Farming Tool": {
            "ID": "439",
            "MapRemoteVersions": {
                "1.21": "1.2.1",
                "1.22-unofficial.3.mizzion": "1.2.2-unofficial.3.mizzion"
            }
        },

        "Basic Sprinkler Improved": {
            "ID": "lrsk_sdvm_bsi.0117171308",
            "MapRemoteVersions": { "1.0.2": "1.0.1-release" } // manifest not updated
        },

        "Better Shipping Box": {
            "ID": "Kithio:BetterShippingBox",
            "MapLocalVersions": { "1.0.1": "1.0.2" }
        },

        "Chefs Closet": {
            "ID": "Duder.ChefsCloset",
            "MapLocalVersions": { "1.3-1": "1.3" }
        },

        "Configurable Machines": {
            "ID": "21da6619-dc03-4660-9794-8e5b498f5b97",
            "MapLocalVersions": { "1.2-beta": "1.2" }
        },

        "Crafting Counter": {
            "ID": "lolpcgaming.CraftingCounter",
            "MapRemoteVersions": { "1.1": "1.0" } // not updated in manifest
        },

        "Custom Linens": {
            "ID": "Mevima.CustomLinens",
            "MapRemoteVersions": { "1.1": "1.0" } // manifest not updated
        },

        "Dynamic Horses": {
            "ID": "Bpendragon-DynamicHorses",
            "MapRemoteVersions": { "1.2": "1.1-release" } // manifest not updated
        },

        "Dynamic Machines": {
            "ID": "DynamicMachines",
            "MapLocalVersions": { "1.1": "1.1.1" }
        },

        "Multiple Sprites and Portraits On Rotation (File Loading)": {
            "ID": "FileLoading",
            "MapLocalVersions": { "1.1": "1.12" }
        },

        "Relationship Status": {
            "ID": "relationshipstatus",
            "MapRemoteVersions": { "1.0.5": "1.0.4" } // not updated in manifest
        },

        "ReRegeneration": {
            "ID": "lrsk_sdvm_rerg.0925160827",
            "MapLocalVersions": { "1.1.2-release": "1.1.2" }
        },

        "Showcase Mod": {
            "ID": "Igorious.Showcase",
            "MapLocalVersions": { "0.9-500": "0.9" }
        },

        "Siv's Marriage Mod": {
            "ID": "6266959802", // official version
            "FormerIDs": "Siv.MarriageMod | medoli900.Siv's Marriage Mod", // 1.2.3-unofficial versions
            "MapLocalVersions": { "0.0": "1.4" }
        },


        /*********
        ** Obsolete
        *********/
        "Animal Mood Fix": {
            "ID": "GPeters-AnimalMoodFix",
            "~ | Status": "Obsolete",
            "~ | StatusReasonPhrase": "the animal mood bugs were fixed in Stardew Valley 1.2."
        },

        "Colored Chests": {
            "ID": "4befde5c-731c-4853-8e4b-c5cdf946805f",
            "~ | Status": "Obsolete",
            "~ | StatusReasonPhrase": "colored chests were added in Stardew Valley 1.1."
        },

        "Modder Serialization Utility": {
            "ID": "SerializerUtils-0-1",
            "~ | Status": "Obsolete",
            "~ | StatusReasonPhrase": "it's no longer maintained or used."
        },

        "No Debug Mode": {
            "ID": "NoDebugMode",
            "~ | Status": "Obsolete",
            "~ | StatusReasonPhrase": "debug mode was removed in SMAPI 1.0."
        },

        /*********
        ** Broke in SMAPI 3.0 (runtime errors due to lifecycle changes)
        *********/
        "Advancing Sprinklers": {
            "ID": "warix3.advancingsprinklers",
            "~1.0.0 | Status": "AssumeBroken"
        },

        "Arcade 2048": {
            "ID": "Platonymous.2048",
            "~1.0.6 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Arcade Snake": {
            "ID": "Platonymous.Snake",
            "~1.1.0 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Better Sprinklers": {
            "ID": "Speeder.BetterSprinklers",
            "~2.3.1-unofficial.7-pathoschild | Status": "AssumeBroken"
        },

        "Companion NPCs": {
            "ID": "Redwood.CompanionNPCs",
            "~0.0.9 | Status": "AssumeBroken"
        },

        "Content Patcher": {
            "ID": "Pathoschild.ContentPatcher",
            "Default | UpdateKey": "Nexus:1915",
            "~1.6.4 | Status": "AssumeBroken"
        },

        "Crop Transplant Mod": {
            "ID": "DIGUS.CropTransplantMod",
            "~1.1.3 | Status": "AssumeBroken"
        },

        "Custom Adventure Guild Challenges": {
            "ID": "DefenTheNation.CustomGuildChallenges",
            "~1.8 | Status": "AssumeBroken"
        },

        "Custom Farming Redux": {
            "ID": "Platonymous.CustomFarming",
            "Default | UpdateKey": "Nexus:991",
            "~2.10.10 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Deep Woods": {
            "ID": "maxvollmer.deepwoodsmod",
            "~1.5-beta.1 | Status": "AssumeBroken"
        },

        "Everlasting Baits and Unbreaking Tackles": {
            "ID": "DIGUS.EverlastingBaitsAndUnbreakableTacklesMod",
            "~1.2.4 | Status": "AssumeBroken"
        },

        "Farmhouse Redone": {
            "ID": "mabelsyrup.farmhouse",
            "~0.2 | Status": "AssumeBroken"
        },

        "Geode Info Menu": {
            "ID": "cat.geodeinfomenu",
            "~1.5 | Status": "AssumeBroken"
        },

        "Harp of Yoba Redux": {
            "ID": "Platonymous.HarpOfYobaRedux",
            "~2.6.3 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Infested Levels": {
            "ID": "Eireon.InfestedLevels",
            "~1.0.5 | Status": "AssumeBroken"
        },

        "JoJaBan - Arcade Sokoban": {
            "ID": "Platonymous.JoJaBan",
            "~0.4.3 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Level Extender": {
            "ID": "DevinLematty.LevelExtender",
            "~3.1 | Status": "AssumeBroken"
        },

        "Mod Update Menu": {
            "ID": "cat.modupdatemenu",
            "~1.4 | Status": "AssumeBroken"
        },

        "Mushroom Levels": {
            "ID": "Eireon.MushroomLevels",
            "~1.0.4 | Status": "AssumeBroken"
        },

        "Notes": {
            "ID": "Platonymous.Notes",
            "~1.0.5 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Quick Start": {
            "ID": "WuestMan.QuickStart",
            "~1.5 | Status": "AssumeBroken"
        },

        "Seed Bag": {
            "ID": "Platonymous.SeedBag",
            "~1.2.7 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Separate Money": {
            "ID": "funnysnek.SeparateMoney",
            "~1.4.2 | Status": "AssumeBroken"
        },

        "Split Money": {
            "ID": "Platonymous.SplitMoney",
            "~1.2.4 | Status": "AssumeBroken" // possibly due to PyTK
        },

        "Stack to Nearby Chests": {
            "ID": "Ilyaki.StackToNearbyChests",
            "~1.4.4 | Status": "AssumeBroken"
        },

        "Tree Transplant": {
            "ID": "TreeTransplant",
            "~1.0.5 | Status": "AssumeBroken"
        },

        /*********
        ** Broke in SDV 1.3.36
        *********/
        "2cute FarmCave": {
            "ID": "taintedwheat.2CuteFarmCave",
            "Default | UpdateKey": "Nexus:843",
            "~2.0 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        "Ace's Expanded Caves - Default Cave": {
            "ID": "Acerbicon.AECdefault",
            "Default | UpdateKey": "Nexus:2131",
            "~1.2.2  | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        "Ace's Expanded Caves - Desert Cave": {
            "ID": "Acerbicon.AECdesert",
            "Default | UpdateKey": "Nexus:2131",
            "~1.2.2  | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        "Ace's Expanded Caves - Ice Cave": {
            "ID": "Acerbicon.AECice",
            "Default | UpdateKey": "Nexus:2131",
            "~1.2.2  | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        "Ace's Expanded Caves - Lava Cave": {
            "ID": "Acerbicon.AEClava",
            "Default | UpdateKey": "Nexus:2131",
            "~1.2.2  | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        "Ace's Expanded Caves - Slime Cave": {
            "ID": "Acerbicon.AECslime",
            "Default | UpdateKey": "Nexus:2131",
            "~1.2.2  | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        "Green Pastures Farm": {
            "ID": "bugbuddy.GreenPasturesFarm",
            "Default | UpdateKey": "Nexus:2326",
            "~1.0    | Status": "AssumeBroken" // references deleted Content/weapons.xnb
        },

        "Immersive Farm 2": {
            "ID": "zander.immersivefarm2",
            "~2.0.1 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        "Karmylla's Immersive Map Edits": {
            "ID": "Karmylla.ImmersiveMapEdits",
            "Default | UpdateKey": "Nexus:1149",
            "~2.4    | Status": "AssumeBroken" // references deleted Content/weapons.xnb
        },

        "Secret Gardens Greenhouse": {
            "ID": "jessebot.secretgardens",
            "Default | UpdateKey": "Nexus:3067",
            "~2.0.1 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
        },

        /*********
        ** Broke circa SDV 1.3
        *********/
        "Canon-Friendly Dialogue Expansion": {
            "ID": "gizzymo.canonfriendlyexpansion",
            "~1.1.1 | Status": "AssumeBroken" // causes a save crash on certain dates
        },

        "Everytime Submarine": {
            "ID": "MustafaDemirel.EverytimeSubmarine",
            "~1.0.0 | Status": "AssumeBroken" // breaks player saves if their beach bridge is fixed
        },

        "Always Scroll Map": {
            "ID": "bcmpinc.AlwaysScrollMap",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "Arcade Pong": {
            "ID": "Platonymous.ArcadePong",
            "~1.0.2 | Status": "AssumeBroken" // broke in SMAPI 2.6-beta.16 due to reflection into SMAPI internals
        },

        "BJS Night Sounds": {
            "ID": "BunnyJumps.BJSNightSounds",
            "~1.0.0 | Status": "AssumeBroken" // runtime errors with Harmony 1.2.0.1 in SMAPI 2.8+
        },

        "Craft Counter": {
            "ID": "bcmpinc.CraftCounter",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "Fishing Adjust": {
            "ID": "shuaiz.FishingAdjustMod",
            "~2.0.1 | Status": "AssumeBroken" // Method not found: 'Void Harmony.HarmonyInstance.Patch(System.Reflection.MethodBase, Harmony.HarmonyMethod, Harmony.HarmonyMethod, Harmony.HarmonyMethod)'
        },

        "Fishing Automaton": {
            "ID": "Drynwynn.FishingAutomaton",
            "~1.1 | Status": "AssumeBroken" // runtime errors with Harmony 1.2.0.1 in SMAPI 2.8+
        },

        "Fix Animal Tools": {
            "ID": "bcmpinc.FixAnimalTools",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "Fix Scythe Exp": {
            "ID": "bcmpinc.FixScytheExp",
            "~0.3 | Status": "AssumeBroken" // broke in 1.3: Exception from HarmonyInstance "bcmpinc.FixScytheExp" [...] Bad label content in ILGenerator.
        },

        "Grass Growth": {
            "ID": "bcmpinc.GrassGrowth",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "More Silo Storage": {
            "ID": "OrneryWalrus.MoreSiloStorage",
            "~1.0.1 | Status": "AssumeBroken" // broke in SDV 1.3
        },

        "Movement Speed": {
            "ID": "bcmpinc.MovementSpeed",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "No Added Flying Mine Monsters": {
            "ID": "Drynwynn.NoAddedFlyingMineMonsters",
            "~1.1 | Status": "AssumeBroken" // runtime errors with Harmony 1.2.0.1 in SMAPI 2.8+
        },

        "Server Bookmarker": {
            "ID": "Ilyaki.ServerBookmarker",
            "~1.0.0 | Status": "AssumeBroken" // broke in Stardew Valley 1.3.29 (runtime errors)
        },

        "Skill Prestige: Cooking Adapter": {
            "ID": "Alphablackwolf.CookingSkillPrestigeAdapter",
            "FormerIDs": "20d6b8a3-b6e7-460b-a6e4-07c2b0cb6c63", // changed circa 1.1
            "MapRemoteVersions": { "1.2.3": "1.1" } // manifest not updated
        },

        "Skull Cave Saver": {
            "ID": "cantorsdust.SkullCaveSaver",
            "FormerIDs": "8ac06349-26f7-4394-806c-95d48fd35774 | community.SkullCaveSaver", // changed in 1.1 and 1.2.2
            "1.3-beta | Status": "AssumeBroken" // doesn't work in multiplayer, no longer maintained
        },

        "Split Screen": {
            "ID": "Ilyaki.SplitScreen",
            "~3.0.1 | Status": "AssumeBroken" // broke in SMAPI 2.6-beta.16 due to reflection into SMAPI internals
        },

        "Stardew Hack": {
            "ID": "bcmpinc.StardewHack",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "Stephan's Lots of Crops": {
            "ID": "stephansstardewcrops",
            "MapRemoteVersions": { "1.41": "1.1" }, // manifest not updated
            "~1.1    | Status": "AssumeBroken" // broke in SDV 1.3 (overwrites vanilla items)
        },

        "Summit Reborn": {
            "ID": "KoihimeNakamura.summitreborn",
            "FormerIDs": "emissaryofinfinity.summitreborn", // changed in 1.0.2
            "~1.0.2 | Status": "AssumeBroken" // broke in SDV 1.3 (runtime errors)
        },

        "Tilled Soil Decay": {
            "ID": "bcmpinc.TilledSoilDecay",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "Tree Spread": {
            "ID": "bcmpinc.TreeSpread",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        "Yet Another Harvest With Scythe Mod": {
            "ID": "bcmpinc.HarvestWithScythe",
            "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
        },

        /*********
        ** Broke circa SDV 1.2
        *********/
        "Move Faster": {
            "ID": "shuaiz.MoveFasterMod",
            "~1.0.1   | Status": "AssumeBroken" // doesn't do anything as of SDV 1.2.33 (bad Harmony patch?)
        }
    }
}