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 = 1id = "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"Main fields
Section titled “Main fields”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.
Data-only mods
Section titled “Data-only mods”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 = 1id = "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.
Version ranges
Section titled “Version ranges”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.
Dependencies
Section titled “Dependencies”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.
Capabilities
Section titled “Capabilities”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.
After editing
Section titled “After editing”Save the manifest and restart Eclipse. Use Details to read validation problems before testing content. See Troubleshooting and Installing mods.