Skip to content
k-mods.com

KDataForge

Create and patch Satisfactory content with YAML packs, without writing C++.

KDataForge is a YAML-driven runtime content framework for Satisfactory. Put pack files under <your-mod>/DataForge/**/*.yml to rebalance existing content, generate new classes and assets, or ship integrations with other mods. Generated content has save-stable identity, and the in-game editor can inspect live objects and export drafts. Packs can expose typed settings that players change without touching YAML, and read them back through typed references and templates. In multiplayer, every process loads its own pack set. KDataForge does not negotiate checksums or stream applied operations; only pack configuration values are sent from the host to clients.

If you want to rebalance a recipe, add an item, or ship a small content pack without touching C++, start with Getting Started. It builds the smallest possible pack and verifies that it loaded. Use Desktop Pack Manager to edit YAML, review diagnostics, and run a full pack check before starting the game. For existing KPatchwork pull-request policy checks, see Lint Your Pack. Continue with the Task Guides, including Item + Icon + Recipe + Tier-1 Unlock for the most common first content chain.

Once you know the pack shape, use Features to understand a capability and Reference for exact schema or API details. Property Types and Operations explain the codec every patch value uses. Recipes and Items cover two common document types. To let players tune your pack, see Pack Configuration, Templates and Typed References and the walkthrough Player-Configurable Balancing.

The Examples section contains complete multi-capability packs such as Balancing and End-to-End Pack. Use these when you want to see several document types wired together.

If you are extending KDataForge, adding a native document handler, embedding it from another mod, or reviewing the pipeline, use Internals & Architecture. It is contributor material, not a prerequisite for authoring a pack.

Architecture walks the full data flow from filesystem scan to reflection-based property edits, and Module Structure maps the plugin’s runtime modules.

The Reference section contains the normative detail. YAML Schema is the complete grammar, Handler Template is a reference C++ implementation for a new handler, API Design covers the public API surface for third-party mods, and Editor Integration documents KDF.ApplyToAssets for applying YAML packs directly onto assets inside the Unreal Editor. The Blueprint Config API is the surface for building a pack settings screen, and Config Expressions is the grammar of config: conditions.

KDataForge exposes a small set of chat commands (typed in-game as /kdf ...) and console variables for inspecting and controlling a running instance without editing files:

CommandWhereEffect
/kdf reportchatPrints the load report: packs, applied documents, ops, warnings, errors
/kdf reloadchat (host/server admin)Restores KDF property baselines, rescans all pack files (including edited configuration values files: hot values apply, cold values report “restart required”), and re-applies the normal stage pipeline. See Smart reload
KDF.Reloadconsole (host/server)Same smart reload as /kdf reload; useful for dedicated-server consoles and launch automation
/kdf editorchat (host)Toggles the in-game editor: browse content, edit properties live, undo/redo, and export changes to YAML
KDF.EditorconsoleSame as /kdf editor
/kdf debug on|offchatFlips global debug logging (same switch as KDF.Debug). Bare /kdf debug toggles the current state
KDF.Debug 1console (or launch arg -KDFDebug)Global debug logging: one [KDF DEBUG] line per applied op, including editor edits. Narrower scopes: debug: true per document or in pack.yml
KDF.ApplyToAssets [PathFilter]console (UE editor builds only)Applies loaded YAML directly onto editor assets and marks packages dirty. See Editor Integration
/kdf config dump [pack]chatLists the pack configuration fields with value, default and effective value. See Pack Configuration
/kdf config set <pack>:<id> <value>chat (host/server admin)Sets a pending configuration value (lists take comma separated elements)
/kdf config apply [pack]chat (host/server admin)Saves pending values and reloads when a hot field changed; reports keys that need a restart
KDF.Config.Dump, KDF.Config.Set, KDF.Config.ApplyconsoleConsole versions of the three commands above
KDF.Template "<text>" [pack]consoleExpands {prefix:body} templates, see Templates
KDF.Config.Expr "<expr>" [pack]consoleEvaluates a config: expression, see Config Expressions
/kdf-reflection [options]chat (host/server)Exports reflected classes, structs, enums, defaults, functions, game settings, Blueprint mappings, and assets. Without options it uses the full profile. See Reflection Export
KDF.DumpReflection [options]console (host/server)The same export with time-sliced game-thread work. Without options it writes no functions, asset indexes or flattened classes; pass --assets --functions --flattened for the full profile
KDF.ValidateReflection [--out]consoleRuns acceptance checks against completed reflection output

Create <your-mod>/DataForge/pack.yml:

ref: MyTweaks
name: My Tweaks
version: 1.0.0

Then create <your-mod>/DataForge/my-tweaks.cdo.yml:

type: cdo
patches:
- target: /Game/FactoryGame/Recipes/Smelter/Recipe_IngotIron.Recipe_IngotIron_C
properties:
- path: mManufactoringDuration
op: multiply
value: 0.5

Start the game. The recipe now smelts twice as fast. Use /kdf report in chat to inspect the load report. After changing YAML, use /kdf reload for a smart live re-apply; restart when changing frozen content registrations or other restart-bound state. Prefer a UI? /kdf editor opens the in-game editor with live property editing and YAML export. For local pack validation, use Desktop Pack Manager to catch static schema errors before shipping.