CeruleanCutlass-ForgeKit icon

ForgeKit

Dependency-free dev-tooling for Outward BepInEx mods: file-driven dev command loop, self-test harness, on-screen toasts, player-ready lifecycle wait, and embedded/override table loaders.

Last updated 3 days ago
Total downloads 20
Total rating 0 
Categories Libraries Utility
Dependency string CeruleanCutlass-ForgeKit-0.1.0
Dependants 2 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack_Outward-5.4.19 icon
BepInEx-BepInExPack_Outward

BepInEx pack for Outward.

Preferred version: 5.4.19

README

ForgeKit

Dependency-free dev-tooling library for people writing BepInEx 5 mods for Outward: Definitive Edition. It doesn't add anything a player sees on its own — it's the plumbing several other mods (CompanionKit, SpawnKit, and more) build on, and other modders are welcome to build on it too.

Requires: BepInEx 5 (Outward's Mono branch — see Compatibility below). No SideLoader, no Harmony, no other mod dependency.

What's in it

Piece What it gives you
CommandChannel + CommandRegistry A file-driven dev command loop: write a verb into BepInEx/config/<yourmod>_cmd.txt, it runs on the next poll (unscaled time, so it still fires while the game is paused). Unknown verb or help lists everything registered. It runs on unscaled time, so it still fires while the game is paused.
SelfTestHarness The [SELFTEST] BEGIN / PASS: / FAIL: / DONE pass= fail= report shape — wire up a handful of Check(name, condition) calls and get one consistent, greppable self-test report.
Notify An on-screen info toast for the player, mirrored to the log.
Lifecycle WhenPlayerReady — a coroutine that waits past the game's void/staging coordinates before your mod starts touching the player, plus IsSanePosition for the same check inline.
TableLoader<T> / EmbeddedRes Embedded-default-plus-config-override text/texture tables: ship a sane default inside your DLL, let players override it by dropping a file in BepInEx/config/.

Installing (for players)

Drop the ForgeKit folder into BepInEx/plugins/. It has no effect by itself — install it because another mod you're using declares it as a dependency.

Using it (for modders)

<!-- your .csproj -->
<ProjectReference Include="path\to\ForgeKit\ForgeKit.csproj" Private="false" />
[BepInPlugin(GUID, NAME, VERSION)]
[BepInDependency(ForgeKit.Plugin.GUID)]
public class Plugin : BaseUnityPlugin
{
    private CommandRegistry _commands;
    private CommandChannel _channel;

    void Awake()
    {
        _commands = new CommandRegistry(Logger);
        _commands.Register("hello", "hello — logs a greeting.", args => Logger.LogMessage("Hi!"));
        _channel = new CommandChannel("YourMod_cmd.txt", Logger, _commands);
    }

    void Update() => _channel.Tick();
}

Private="false" matters — it stops MSBuild from copying a second ForgeKit.dll into your mod's own output folder. The kit ships from its own BepInEx/plugins/ForgeKit/ folder; your mod just references it and declares the dependency so BepInEx loads it first.

Compatibility

Outward must be on its Mono Steam beta branch, not the default IL2CPP build — like every BepInEx 5 mod for this game. If your game runs but no BepInEx mods load and there's no crash log, this is almost always why (Properties → Betas → select mono in Steam).

License

Apache License 2.0 — see LICENSE in the repository root. You may use, modify, and redistribute this kit (including in commercial mods) provided you keep the copyright/license notice; see the license text for the full terms.