Skip to content

The mod manifest

Every mod needs a UTF-8 mod.toml directly inside its folder. Eclipse reads this file before running Lua. Use the supported simple TOML format shown below: double-quoted strings, one-line arrays, and one [[dependencies]] block per dependency. Put all main fields before the first dependency block.

schema = 1
id = "yourname.training"
name = "Training Equipment"
version = "1.0.0"
authors = ["Your Name"]
entrypoint = "scripts/main.lua"
capabilities = ["content.register"]
[[dependencies]]
id = "core"
version = ">=2.0 <3.0"

All main fields in the example are required except entrypoint.

Field Meaning
schema Manifest format version. Use integer 1.
id Permanent unique identity, using lowercase ASCII letters, digits, ., _, or -. No spaces. core and sf2de are reserved.
name Human-readable name shown in the mod menu.
version Your mod’s release version, such as 1.0.0. Increase it when publishing changes.
authors Nonempty array of author names.
entrypoint Optional. Relative Lua path inside scripts/, ending in .lua. No absolute paths or ... Omit it for a data-only mod.
capabilities Array of permission names. Use [] if none are needed. Duplicate entries are rejected.

Changing name changes the display label. Changing id creates a different content owner and can make existing saved items unavailable. Choose the ID before distributing your mod and keep it stable.

A mod without entrypoint runs no Lua. It can still ship content from its data folders: translations in localizations/ and move edits in movesets/*.json (see Moveset files). The in-game Moveset Lab saves mods this way. Data files are loaded inside the same registration as a Lua mod’s script, so the same capabilities, dependencies and conflict rules apply: a moveset file still needs content.patch, and naming a core: item still needs the core dependency.

schema = 1
id = "yourname.faster-kicks"
name = "Faster Kicks"
version = "1.0.0"
authors = ["Your Name"]
capabilities = ["content.patch"]

A mod may have both an entrypoint and data files; the data files load first.

A dependency version such as ">=2.0 <3.0" accepts versions at least 2.0.0 and below 3.0.0. All space-separated comparisons must match. Supported comparison operators are =, >, >=, <, and <=; an unprefixed version is an exact match. Do not use npm-style ^, ~, or * ranges.

Depend on versions you have tested against. A range cannot add missing functions to an older build.

Each dependency requires id and version. A dependency declares which other content owner you use and ensures it is available before your mod loads. For example, a reference beginning with core: requires the core dependency above. You do not need a physical Mods/core folder; core is built into Eclipse.

To use another mod, add another block:

[[dependencies]]
id = "other.mod"
version = ">=2.0 <3.0"

Replace that illustrative ID with the actual installed mod’s ID. Enabling your mod also enables its dependencies. Missing or incompatible dependencies are shown in Details in the mod menu. Do not list the same dependency twice.

A capability permits an operation; a dependency permits references to another owner’s content. They are separate requirements. Every function section lists its capabilities under Requires.

Capability Used for
content.register Register content and use the documented content lookups.
extensions.provide Publish versioned Lua services for dependent mods.
extensions.call Acquire and call services from declared direct dependencies. See framework mods.
content.patch Supported changes to existing content, such as localization or perk choices.
assets.replace Explicit replacement of an existing asset.
state.read, state.write Read and write mod-owned profile state.
combat.change_life, combat.magic_charge Supported health and magic-charge methods.
combat.modify_hit, combat.effects Incoming damage scaling; temporary shields, flags, status icons and player control restrictions, respectively.
combat.modify_outgoing_hit Scale an attacker’s pending hit during on_damage_dealing.
combat.round_outcome Declare a round controller with controls_outcome and request offline round wins/losses. Native results retain precedence; see custom objectives.
presentation.dojo Select, inspect or reset the saved dojo preference after profile loading. Selection is limited to the mod’s own opted-in locations.
profile.read Read the active player’s level and item ownership/equipped snapshots.
story.events Subscribe to purchases, enchantments, experience-driven level gains and initialized scene entry.
story.progression Reveal, focus and change saved locks for your mod’s own map battles; request the native story-map Eclipse switch.
presentation.navigate Request native map, shop, profile and dojo menu transitions.
ui.create Open mod-owned UI layouts; returned handles can update and close that script’s views.
audio.play Play, query, update and stop mod-owned audio instances.
ui.settings Register on/off switches shown under Options > Mod settings.
presentation.camera Acquire exclusive fight-camera framing, update pan/zoom and release ownership; see camera control.
presentation.visuals Turn on and tune optional fight visuals, such as weapon trails, bloom and depth haze; create/recolor/remove owned arena markers.
combat.motion Queue relative main-fighter displacement for movement abilities; see fighter motion.
combat.actors Spawn, observe, guide and dismiss this mod’s independent fighters; see actors.
combat.projectiles Query and guide this mod’s typed native children; see live projectiles.
combat.animation Queue explicit playback of a registered move on a main fighter; see playback.
combat.target Use supported operations on the opposing fighter.
progression.read, progression.write Read and update achievement counters.
policy.timers, policy.services Supported timer settings and service switches.

For example, a behavior that heals a fighter requires its registration capability and combat.change_life. Add the strings to the same one-line array, separated by commas. Permission names must match exactly; requesting a name does not make an unsupported API available.

Save the manifest and restart Eclipse. Use Details to read validation problems before testing content. See Troubleshooting and Installing mods.