Skip to content

Kits

Reusable libraries for Outward mods. A kit isn't installed on its own — a mod that needs it declares a dependency ([BepInDependency]) and BepInEx loads the kit first.

If you're a player, you don't interact with these directly; they arrive as dependencies of the mods you install. This section is for modders building on them.

Which kit do I need?

Kit Use it to… Depends on SideLoader
ForgeKit add dev commands, self-tests, on-screen toasts, config-backed data tables, and register keybinds — no
AggroKit control what enemies target (force-target, calm, taunt) ForgeKit no
NetKit sync your own state across a Photon co-op session ForgeKit no
SkillKit ship a custom learnable skill (active or passive) ForgeKit yes
StoryKit add an NPC / trainer with dialogue and a skill tree ForgeKit yes
EnchantKit apply vanilla enchantments and spawn pre-enchanted gear from a command (dev / testing tool) ForgeKit no
DonorKit get a live creature body for any species, anywhere in the world ForgeKit, NetKit no
CompanionKit give the player a persistent creature companion ForgeKit, AggroKit, NetKit, DonorKit no
SpawnKit spawn creatures at runtime as real vanilla enemies ForgeKit, CompanionKit, NetKit, DonorKit no

Reading and extending the game's quest events (story flags): architecture, persistence, co-op sync, the Vendavel flag map and the ruling on tracking a mod's own quests — Quest events.

Versions and compatibility — what happens when a mod and a kit come from different releases, and the one rule for installs (one bundle, one release): Kit versioning.

The "Depends on" column is each kit's declared [BepInDependency] set. SkillKit and StoryKit both need SideLoader present at runtime to do anything, but neither declares it as a BepInEx dependency — they reference it at compile time and wait for its packs to load instead.

The layering

Kits stack bottom-up. Everything rests on ForgeKit; CompanionKit is the mid-tier that persistent-companion features build on; SpawnKit sits on top of it.

ForgeKit                      dev tooling — no dependencies
  ├── AggroKit                aggro / threat control
  ├── NetKit                  Photon co-op transport
  ├── SkillKit                custom skills            (+ SideLoader)
  ├── StoryKit                NPCs / trainers          (+ SideLoader)
  ├── EnchantKit              enchant / spawn gear     (dev / testing tool)
  └── DonorKit                creature bodies anywhere (harvest engine + expedition tier + template store; needs ForgeKit + NetKit)
        ├── CompanionKit      persistent companions    (needs ForgeKit + AggroKit + NetKit + DonorKit)
        │     └── SpawnKit    runtime creature spawns  (needs CompanionKit + NetKit + DonorKit)
        └── SpawnKit          also sits directly on DonorKit — its species roster IS the donor table

Mods then combine these. Beastwhispering names ForgeKit, SkillKit, CompanionKit, AggroKit and StoryKit directly (DonorKit and NetKit arrive underneath CompanionKit); DangerousRoads names ForgeKit, SpawnKit and CompanionKit; Hireling names CompanionKit and ForgeKit; Cloudward names ForgeKit alone.

Conventions shared by every kit

  • Each ships as its own BepInEx/plugins/<Kit>/ folder with plugin GUID cobalt.<name>.
  • Most have a dev-command channel — write a verb into a plain text file under BepInEx/config/ and it runs on the next poll, even while the game is paused. Unknown verb or help lists them all. This is ForgeKit's command channel. The filenames are not uniform: ak_cmd.txt (AggroKit), ck_cmd.txt (CompanionKit), DonorKit_cmd.txt, NetKit_cmd.txt, SpawnKit_cmd.txt, StoryKit_cmd.txt, EnchantKit_cmd.txt. SkillKit has no channel of its own — its verbs are a pack a consuming mod registers onto its channel.
  • Runtime settings live in BepInEx/config/cobalt.<name>.cfg, generated on first launch — except ForgeKit, which has no settings at all.

See also