← [README](../README.md) **SMAPI.Web** contains the code for the `smapi.io` website, including the mod compatibility list and update check API. ## Contents * [Log parser](#log-parser) * [JSON validator](#json-validator) * [Web API](#web-api) * [Short URLs](#short-urls) * [For SMAPI developers](#for-smapi-developers) * [Local development](#local-development) * [Production environment](#production-environment) ## Log parser The log parser at https://smapi.io/log provides a web UI for uploading, parsing, and sharing SMAPI logs. The logs are saved in a compressed form to Amazon Blob storage for 30 days. ## JSON validator ### Overview The JSON validator at https://smapi.io/json provides a web UI for uploading and sharing JSON files, and validating them as plain JSON or against a predefined format like `manifest.json` or Content Patcher's `content.json`. The logs are saved in a compressed form to Amazon Blob storage for 30 days. ### Schema file format Schema files are defined in `wwwroot/schemas` using the [JSON Schema](https://json-schema.org/) format. The JSON validator UI recognises a superset of the standard fields to change output:
field | summary |
---|---|
mods |
The mods for which to fetch metadata. Included fields: field | summary ----- | ------- `id` | The unique ID in the mod's `manifest.json`. This is used to crossreference with the wiki, and to index mods in the response. If it's unknown (e.g. you just have an update key), you can use a unique fake ID like `FAKE.Nexus.2400`. `updateKeys` | _(optional)_ [Update keys](https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Manifest#Update_checks) which specify the mod pages to check, in addition to any mod pages linked to the `ID`. `installedVersion` | _(optional)_ The installed version of the mod. If not specified, the API won't recommend an update. `isBroken` | _(optional)_ Whether SMAPI failed to load the installed version of the mod, e.g. due to incompatibility. If true, the web API will be more permissive when recommending updates (e.g. allowing a stable → prerelease update). |
apiVersion |
_(optional)_ The installed version of SMAPI. If not specified, the API won't recommend an update. |
gameVersion |
_(optional)_ The installed version of Stardew Valley. This may be used to select updates. |
platform |
_(optional)_ The player's OS (`Android`, `Linux`, `Mac`, or `Windows`). This may be used to select updates. |
includeExtendedMetadata |
_(optional)_ Whether to include extra metadata that's not needed for SMAPI update checks, but which may be useful to external tools. |
field | summary |
---|---|
id |
The mod ID you specified in the request. |
suggestedUpdate |
The update version recommended by the web API, if any. This is based on some internal rules (e.g. it won't recommend a prerelease update if the player has a working stable version) and context (e.g. whether the player is in the game beta channel). Choosing an update version yourself isn't recommended, but you can set `includeExtendedMetadata: true` and check the `metadata` field if you really want to do that. |
errors |
Human-readable errors that occurred fetching the version info (e.g. if a mod page has an invalid version). |
metadata |
Extra metadata that's not needed for SMAPI update checks but which may be useful to external tools,
if you set `includeExtendedMetadata: true` in the request. Included fields:
field | summary
----- | -------
`id` | The known `manifest.json` unique IDs for this mod defined on the wiki, if any. That includes historical versions of the mod.
`name` | The normalised name for this mod based on the crossreferenced sites.
`nexusID` | The mod ID on [Nexus Mods](https://www.nexusmods.com/stardewvalley/), if any.
`chucklefishID` | The mod ID in the [Chucklefish mod repo](https://community.playstarbound.com/resources/categories/stardew-valley.22/), if any.
`curseForgeID` | The mod project ID on [CurseForge](https://www.curseforge.com/stardewvalley), if any.
`curseForgeKey` | The mod key on [CurseForge](https://www.curseforge.com/stardewvalley), if any. This is used in the mod page URL.
`modDropID` | The mod ID on [ModDrop](https://www.moddrop.com/stardew-valley), if any.
`gitHubRepo` | The GitHub repository containing the mod code, if any. Specified in the `Owner/Repo` form.
`customSourceUrl` | The custom URL to the mod code, if any. This is used for mods which aren't stored in a GitHub repo.
`customUrl` | The custom URL to the mod page, if any. This is used for mods which aren't stored on one of the standard mod sites covered by the ID fields.
`main` | The primary mod version, if any. This depends on the mod site, but it's typically either the version of the mod itself or of its latest non-optional download.
`optional` | The latest optional download version, if any.
`unofficial` | The version of the unofficial update defined on the wiki for this mod, if any.
`unofficialForBeta` | Equivalent to `unofficial`, but for beta versions of SMAPI or Stardew Valley.
`hasBetaInfo` | Whether there's an ongoing Stardew Valley or SMAPI beta which may affect update checks.
`compatibilityStatus` | The compatibility status for the mod for the stable version of the game, as defined on the wiki, if any. See [possible values](https://github.com/Pathoschild/SMAPI/blob/develop/src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityStatus.cs).
`compatibilitySummary` | The human-readable summary of the mod's compatibility in HTML format, if any.
`brokeIn` | The SMAPI or Stardew Valley version that broke this mod, if any.
`betaCompatibilityStatus` `betaCompatibilitySummary` `betaBrokeIn` | Equivalent to the preceding fields, but for beta versions of SMAPI or Stardew Valley. |