Skip to content
DreamWeave Mod Template
reference

mod.toml reference

Every key, its type, its default, and what it means.

mod.toml is read strictly. A key this page does not list is an error, with a suggestion when it looks like a typo, because a misspelled runtime silently doing nothing is how a mod ships with no compatibility data. Content files, component paths and media files are checked against what is actually in the directory.

Only id, slug, and each release’s version and date are required. Candlelight’s mod.toml uses every key once, with comments.

Identity#

KeyTypeDefaultMeaning
idUUIDrequiredThe project’s permanent identity: a random UUID, from uuidgen or anything else that makes them (CI’s error suggests one if it is missing). Never derived from the name, host or URL, and never changed.
slug[a-z0-9_]+requiredArchive name and release-tag prefix: slug.zip, tagged slug-1.2.0. No hyphens, because the tag’s first hyphen separates slug from version. Changing it breaks old links, not the project.
typestring"mod"mod, library, framework, tool, assets, total-conversion or documentation.
statusstring"active"active, maintenance, experimental, deprecated or archived.
versioningstring"numeric"How release numbers compare. See Releases.
gametoken"morrowind"The game the project targets.
licensestringnoneAn SPDX expression, like GPL-3.0-or-later.
provideslist of capabilities[]Names other projects may depend on without naming this one, like dreamweave:dynamic-lights.

The display name and summary are title and description in index.md’s frontmatter.

[[maintainers]] and [[credits]]#

KeyTypeMeaning
namestringRequired.
urlURLOptional.
rolestringCredits only: Scripts, Textures, Testing, whatever is true.
KeyDefaultMeaning
sourcethe site’s repositoryWhere the source lives.
issuesthe repository’s issuesWhere to report problems.
documentationnoneA URL or a Zola @/ path to the docs.
support, donate, homepage, nexusmodsnoneURLs.

[runtimes]#

A table of runtime id to version constraint: the engines this runs on. Any one of them is enough.

[runtimes]
openmw = ">=0.49"

Known ids are openmw, morrowind (the original engine), mwse and tes3mp. An empty table means the project does not care, which is true of an asset pack and false of almost everything else.

[[platforms]]#

For tools with native binaries: os is windows, macos, linux or android; arch is x86_64 or aarch64; variant, optional, is portmaster or muos for a handheld build. No entries means platform-independent. A binary package needs at least one desktop entry: each entry is one archive the Rust workflow builds, and one artifact in every release. Android and variants are for binary packages only. See Programs.

Relationships#

Five lists, all with the same keys: [[requires]], [[recommends]], [[conflicts]], [[compatible]] and [[replaces]]. Dependencies explains what each promises.

KeyTypeMeaning
idUUIDThe other project’s id. The only thing a client can resolve.
capabilitystringInstead of id: anything that provides it. requires, recommends and conflicts only.
namestringFor people. Required when there is neither id nor capability.
versionconstraintNeeds id. Evaluated with the other project’s versioning scheme.
urlURLWhere to find the other project.
reasonstringWhy. Shown on the page.

[openmw]#

What OpenMW needs to know that is true of the whole project.

KeyTypeMeaning
lua_apiconstraintRequired core.API_REVISION, like ">=60".
requires_contentlistContent files that must be active, like ["Morrowind.esm", "Tribunal.esm"].
[[openmw.settings]]category, key, valueSettings the mod needs in settings.cfg.

When there are no [[components]], the install keys below go directly in [openmw] and describe the whole directory.

[[components]]#

The pieces a player can choose. For a flat package there are none: the directory is one component.

KeyTypeDefaultMeaning
idtokenrequiredUnique within the project.
namestringthe idShown to players.
pathdirectoryrequiredA top-level directory, like "00 Core".
descriptionstringnoneShown on the page and in the FOMOD installer.
requiredboolfalseAlways installed.
defaultboolrequiredSelected unless the player says otherwise.
grouptokennoneA [[groups]] id this component is one choice in.
requires, conflictscomponent ids[]Other components of this project.
suggested_withproject ids[]Recommend this component when those projects are installed.

Each component has an [components.openmw] table with the install keys:

KeyTypeDefaultBecomes
data_directoriespaths["."]data= lines, relative to the component
content_filesfile names[]content= lines, in load order
groundcover_filesfile names[]groundcover= lines
fallback_archives.bsa names[]fallback-archive= lines
fallback_entriestable{}fallback=Key,Value lines
configboolfalsea config= line for an openmw.cfg in the component
requires_contentfile names[]content this component needs, like TR_Mainland.esm

[[groups]]#

KeyMeaning
id, name, descriptionAs for components.
selectexactly-one, at-most-one, at-least-one or any. An exactly-one group needs exactly one default = true member.

[package]#

KeyDefaultMeaning
format"flat"flat, bain or fomod for game data; binary for a program built from Rust source; crate for a Rust library on crates.io. See Packages.
documentationtrueRender the page and its docs into <slug>-Documentation/ inside the archive, in place of their Markdown. Not for binary, whose archives the Rust workflow builds, or crate, which has none.
developmenttruePublish a rolling build of the default branch on the development channel. Not for crate.
binarybinary only: the Cargo binary. Its archives are <binary>-<OS>-<ARCH>.zip, one per [[platforms]] entry.
include[]binary only: files and directories packed beside the program: ["README.md", "LICENSE", "resources"]. Paths start where StroggForge builds it: the directory named after the binary when the repository has one, as a workspace member, else the repository root. A name matches in any case.
cratecrate and binary: the package’s name on crates.io, as in its Cargo.toml. Required for a crate; for a binary, it adds cargo install to the page.

A Rust project’s build settings, such as dependents to notify, benchmarks or extra targets, are inputs of StroggForge’s workflow in the repository, not keys here.

[install]#

Markdown shown in the Install section: notes, post_install, upgrade, uninstall.

[[media]]#

KeyMeaning
fileAn image in the project directory. Or video, a URL. Exactly one of the two.
altRequired. What a screen reader says.
caption, categoryOptional.
featuredAt most one: the header image.
thumbnailFor a video: an image in the project directory.

[nexusmods], [[mirrors]] and [provenance]#

KeyMeaning
nexusmods.mod_idThe Nexus Mods page. A location, not an identity.
nexusmods.file_group_idEnables the workflow’s Nexus upload on tagged releases.
mirrors.urlAn extra download location with {slug}, {version}, {tag}, {filename} or {sha256}. See Distribution.
mirrors.nameOptional.
provenance.sigstoretrue signs each archive in CI. See Provenance.

[[releases]]#

KeyTypeDefaultMeaning
versionversionrequiredUnique by precedence. No +build suffix.
dateTOML daterequired2026-10-01, unquoted.
channeltoken"stable"stable, beta, legacy or your own. development is reserved.
summary, highlights, migration, notesMarkdownnoneShown on the page, the changelog and the GitHub release.
added, changed, fixed, breaking, known_issueslists[]One Markdown line each.
yanked, deprecatedstringnoneThe reason. At most one of the two.
tagstringthe project’s usual tagThe git tag the release was published under, when that is another spelling, like v0.3.3 for a project whose tags are now bare. Each release’s tag is its own.
replacementversionnoneWhat to use instead of a yanked or deprecated release.

HTML written into release notes, or into the install notes, shows as text, as it does in every DreamWeave client. Markdown covers the rest.

[extensions."your.namespace"]#

Data for tools this template does not know about, under a dotted namespace you own (org.tes3mp, io.github.someone.tool). It is copied into the manifest untouched. See Extensions and evolution.