Skip to content

Pack manifest reference

manifest.toml is the file that makes a directory a mod. Everything else in a pack is optional; this is not.

[mod]
name       = "Fighters Legacy Base Pack"
id         = "fl-base-pack"
version    = "0.3.0"
engine-api = "1.0"
priority   = 0

# Optional
namespace  = "fl-base"
depends    = ["some-other-pack"]

[mod.trust]
signature  = ""
signed-by  = "community"

Validate a manifest with validate-mod before publishing; the pack CI gates run it.

Required fields

A manifest missing any of these fails to load, and the pack is skipped:

Field Type Notes
name string Human-readable pack name
id string Machine identifier — see the rules below
version string Pack version. Free-form; used for dependency reporting and the join-time manifest
engine-api string Engine API version this pack targets, e.g. "1.0"
priority integer Load order. Higher wins when two packs provide the same asset

id and name validity

Both are used to build filesystem paths, so both are constrained:

  • Non-empty, at most 128 characters
  • No / or \, no embedded NUL
  • No drive-letter prefix (C:…)
  • Not a Windows reserved device name (CON, PRN, AUX, NUL, COM1COM9, LPT1LPT9)

These rules apply on every platform, not just Windows. A pack that loads on Linux and cannot exist on Windows is a portability bug you would rather find at authoring time.

engine-api

Only the major version is compared. "1.0", "1.3" and "1.99" are all compatible with engine major 1; "2.0" is not, and the pack is rejected with an explicit message rather than being loaded and failing later in some unrelated way.

priority

Packs stack. When two provide an asset with the same name, the higher priority wins. A theater pack that overrides some of the base pack's terrain tiles sits above it; a pack that only adds new content can sit anywhere.

0 is a reasonable default for a general content pack. The bundled base terrain loads at the lowest possible priority so that any user pack overrides it.

Optional fields

namespace

Defaults to id, and the two are not interchangeable. The namespace prefixes the definition ids this pack declares — sensors, weapons, entity types — so another pack can reference fl-base:apq159 unambiguously.

This is the sharp edge of the content system, and it is worth being precise about:

  • A field naming a file (mesh, flight_model, ai_script, damage_mesh, cockpit, manual) takes an asset name — a bare stem, no namespace.
  • A field naming a definition (entity.sensors, hardpoints.allowed / default) takes a namespaced id.

Getting these backwards does not produce a clean error. A namespaced id fed to the asset loader becomes a path that cannot exist and is not even a legal Windows filename — which once meant every aircraft in a pack flew with no radar and nothing said so.

Set namespace explicitly when your pack id is long or ugly; leave it alone otherwise.

depends

An array of pack ids this pack needs.

depends = ["fl-base-pack"]

[mod.trust]

Field Type Notes
signature string Detached signature. Non-empty marks the pack as signed
signed-by string community or maintainer

The engine parses and records the trust tier today; signature verification itself is not implemented yet, so a signature is a declaration rather than a proof. Do not treat a signed pack as verified. An unknown signed-by value warns and falls back to Unsigned.

The trust tier is what drives the game's prompt before loading an unsigned pack, and native-code packs always prompt regardless of tier.

Directory layout

The manifest sits at the pack root, and the engine looks for assets in well-known subdirectories beside it:

mods/my-pack/
├── manifest.toml
├── aircraft/        entity definitions
├── flight_models/   aerodynamics TOML
├── meshes/          glTF models
├── textures/        KTX2 art
├── liveries/        livery TOML
├── sensors/         sensor definitions
├── weapons/         weapon definitions
├── missions/        mission YAML
├── campaigns/       campaign definitions
├── ai/              Lua behaviour scripts
├── audio/           OGG music and effects
├── terrain/         cube-sphere tiles
├── zones/           airspace escalation policies
└── airports/        airport and runway definitions

Every directory is optional. See asset formats for what goes in each.

See also

  • Asset formats — the format of everything a pack contains
  • Architecture — how packs are discovered, stacked and mounted
  • Toolsvalidate-mod and the rest of the validator set