Skip to content

The Sources field

Sources is an optional array on V1 and V2 manifests that declares, without privileging any particular mod site, everywhere a mod can be found. Each entry becomes an "Open on <site>" menu item for that mod in DDMM.

The Source object

Field Type Required Notes
Provider string Yes Free-form, matched case-insensitively. Well-known values below get a display name and an auto-generated page URL; any other string is still accepted and shown as-is.
Id string No Provider-specific mod ID, used to build that provider's normal page URL when Url isn't given
Url string No An explicit page URL. Always wins over an auto-generated one, for every provider, and must be http:// or https:// — anything else (javascript:, file:, ...) is silently dropped as unsafe
Version string No The version of the mod available at this source, if you want to record it

A Source needs at least an Id or a Url to produce a usable page link; one with neither still round-trips fine, it just won't show a link.

Well-known providers

These get a display name and, given just an Id, an automatically generated page URL:

Provider Display name Generated URL (given Id)
ayakamods AyakaMods https://ayakamods.com/mods/<Id>/
nexus Nexus Mods https://www.nexusmods.com/helldivers2/mods/<Id>
modworkshop ModWorkshop https://modworkshop.net/mod/<Id>
github GitHub https://github.com/<Id>
gamebanana GameBanana https://gamebanana.com/mods/<Id>
url Link (no template — give an explicit Url)

Any other Provider string is shown using that exact string as its display name, and needs an explicit Url to produce a link.

AyakaMods

Id for ayakamods is the mod's numeric resource id — the trailing number in its page URL (https://ayakamods.com/mods/hd2-auto-reload.4084/ → Id: "4084"; a bare https://ayakamods.com/mods/4084/ works too). Set Version to match what AyakaMods publishes for your mod (its page's own listed version) so update checks work immediately for anyone installing your mod with this source already declared, rather than only after DDMM records a version itself at install time:

{ "Provider": "ayakamods", "Id": "4084", "Version": "2026-09-24" }

Examples, per site

{
  "Sources": [
    { "Provider": "ayakamods", "Id": "4084", "Version": "2026-09-24" },
    { "Provider": "nexus", "Id": "123", "Version": "1.2.0" },
    { "Provider": "modworkshop", "Id": "456" },
    { "Provider": "gamebanana", "Id": "789" },
    { "Provider": "github", "Id": "someone/example-mod" },
    { "Provider": "coolmodsite", "Url": "https://coolmodsite.example/mods/example" }
  ]
}

A mod can declare more than one source — for example, mirrored on both AyakaMods and GitHub — and DDMM shows an "Open on <site>" entry for each one that resolves to a link.

Legacy NexusData

Manifests may still carry the older NexusData field ({ "ModId": ..., "Version": "..." } on V1; { "ModId": ... } on V2 — see Manifest reference) instead of, or alongside, Sources. DDMM treats it as an additional implicit nexus source at runtime. If a manifest declares both NexusData and a nexus entry in Sources with the same Id, DDMM shows only one "Open on Nexus Mods" entry rather than two — but NexusData itself is never rewritten or removed from the file. There's no need to migrate an existing NexusData-only manifest; adding Sources is purely additive.

The .hd2mm-origin.json sidecar

When you (the user, not the mod author) install a mod from a direct URL, or through a browser handoff, DDMM records that as an install-time source in a small .hd2mm-origin.json file written next to the mod's manifest.json — never into the manifest itself:

{
  "Sources": [
    { "Provider": "url", "Url": "https://example.com/downloads/example-mod.zip" }
  ],
  "InstalledAt": 1745020800
}

For a mod installed from AyakaMods, this sidecar's Source also gets a Version filled in automatically (DDMM fetches the mod page's published version at install time) — see Checking for updates.

This is DDMM's own bookkeeping, not something mod authors write. It merges into the same "Open on <site>" menu as manifest-declared sources, keeps the historical hd2mm filename prefix for compatibility with tooling written against the original manager, and is safe to delete — it has no effect on how the mod itself works.