Skip to content
DreamWeave Mod Template
reference

Installation

Components, groups, the OpenMW extension, and installing without scripts.

Installation is declarative. A manifest says which directories are data, which files are content, which settings are needed; a client that understands those statements performs them. Nothing in a manifest is executed. An installer that needs to run code is a different protocol with a different security model, and it will not arrive as a field here.

Components#

{ "id": "core", "name": "Core", "path": "00 Core", "required": true, "default": true,
  "requires": [], "conflicts": [], "suggested_with": [] }
FieldMeaning
idToken, unique within the release.
pathDirectory inside the archive, or . for its root. Forward slashes, no . or .. segments.
requiredAlways installed.
defaultSelected unless the user chooses otherwise.
groupOptional. A group id this component is one choice in.
requires, conflictsComponent ids of the same release.
suggested_withProject ids. A client SHOULD pre-select the component when one of them is installed.

Groups:

{ "id": "flames", "name": "Flame textures", "select": "exactly-one" }

select is exactly-one, at-most-one, at-least-one or any, constraining how many of the group’s members may be selected.

A selection is valid when it contains every required component, satisfies every group, contains the requires of every selected component and none of their conflicts. A client MUST NOT install an invalid selection. The publisher’s tooling rejects releases for which no valid selection exists.

format says how components sit in the archive: flat has one component at .; bain and fomod have one top-level directory per component. A binary artifact is a program, not game data, and is never installed this way: see Programs.

The OpenMW extension#

When a release’s runtimes includes openmw, its extensions.openmw says how to install it into OpenMW, and critical_extensions contains "openmw".

"openmw": {
  "lua_api": ">=60",
  "requires_content": ["Morrowind.esm"],
  "settings": [{ "category": "Shaders", "key": "force per pixel lighting", "value": "true" }],
  "components": {
    "core": {
      "data_directories": ["."],
      "content_files": ["Candlelight.omwscripts"],
      "groundcover_files": [],
      "fallback_archives": [],
      "fallback_entries": {},
      "config": false,
      "requires_content": []
    }
  }
}

For each selected component, in the order components lists them, with R the directory the component’s path was extracted to:

Fieldopenmw.cfg
data_directoriesdata="R/<dir>" for each, in order (. is R itself)
fallback_archivesfallback-archive=<name> for each
content_filescontent=<name> for each, in order; this is load order
groundcover_filesgroundcover=<name> for each
fallback_entriesfallback=<key>,<value> for each
configconfig="R": the component ships its own openmw.cfg

Every named file exists in one of the component’s data directories, with that exact case; the publisher’s tooling checks this before release. requires_content, at either level, names content files that must already be active. lua_api constrains core.API_REVISION. settings are values the user’s settings.cfg needs; a client SHOULD show them and MAY apply them with the user’s consent. data= lines of a project SHOULD come after those of the projects it requires.

Other installers#

A fomod archive’s installer is generated from these same components, so MO2 and Vortex make the same choices a DreamWeave client would. A client that does not implement the OpenMW extension may still download and verify a release, but because openmw is critical, it MUST NOT report the release as installed.