Item + Icon + Recipe + Tier-1 Unlock
The most common first pack, a new item with a placeholder icon, a recipe that produces it, and a Tier-1 schematic that actually makes it obtainable in a fresh game.
If you’ve generated an item and can’t find it anywhere in-game, this tutorial is almost certainly the fix. It walks through the complete, minimum chain: item, icon, recipe, schematic, end to end. Every snippet below is a complete, working example, not a hypothetical fragment.
The mistake this tutorial fixes
Section titled “The mistake this tutorial fixes”A generated item and a recipe producing it are not enough on their own. Recipe: documents
register the recipe class into SML’s UModContentRegistry, so the game knows the class exists.
Registration alone doesn’t put the recipe in front of the player, though. Satisfactory gates every
recipe behind an unlock, normally granted by a schematic (a HUB milestone or a MAM node).
Without a schematic unlocking your recipe, the class exists and the recipe is “known” to the mod
content registry, but the player still never sees it. That’s the whole story behind “I don’t see my
created item.”
Step 1: the item
Section titled “Step 1: the item”type: itemitems: - id: SuperIngot parent: /Game/FactoryGame/Resource/Parts/IronIngot/Desc_IronIngot.Desc_IronIngot_C properties: - path: mDisplayName value: key: SuperIngot_Name ns: KDFSample source: Super Ingot - path: mDescription value: Forged from YAML. Stacks high, sinks well. - path: mStackSize value: SS_HUGE - path: mResourceSinkPoints value: 42 # Placeholder icon see Step 2, loaded by super-ingot-icon.asset.yml - path: mSmallIcon value: /KDataForge/GenAssets/KDFSample.Gen_KDFSample_SuperIngotIcon - path: mPersistentBigIcon value: /KDataForge/GenAssets/KDFSample.Gen_KDFSample_SuperIngotIconmStackSize is an EStackSize enum (SS_ONE/SS_SMALL/SS_MEDIUM/SS_BIG/SS_HUGE/
SS_FLUID), not a plain item count. See
Balancing → Items for the full caveat about
the engine’s stack-size cache. KDataForge refreshes that cache automatically, so you don’t need to
do anything extra. Just don’t write a raw number here expecting it to mean “N items per stack”.
Step 2: a placeholder icon (type: asset)
Section titled “Step 2: a placeholder icon (type: asset)”You don’t need real art to get an item on-screen and testable. Any PNG/JPG/TGA/BMP works, even your mod’s own logo, as a stand-in until you have real icons:
type: assetassets: - id: SuperIngotIcon file: mod-logo.png # pack-relative path any 2D imageResult: /KDataForge/GenAssets/KDFSample.Gen_KDFSample_SuperIngotIcon, referenced directly from the
item’s mSmallIcon/mPersistentBigIcon in Step 1. No include: needed. type: asset always
runs in the Assets stage, and Assets always runs before Items, regardless of file or pack
order. See Data Assets for the full type: asset reference.
This is the same 2D-image mechanism, just used for an item icon instead of a KAPI data asset.
Step 3: the recipe
Section titled “Step 3: the recipe”type: reciperecipes: - id: Recipe_SuperIngot properties: - path: mDisplayName value: 'Super Ingot' - path: mIngredients value: - ItemClass: /Game/FactoryGame/Resource/Parts/IronIngot/Desc_IronIngot.Desc_IronIngot_C Amount: 2 - path: mProduct value: - ItemClass: /KDataForge/Gen/KDFSample.Gen_KDFSample_SuperIngot Amount: 1 - path: mManufactoringDuration value: 4.0 - path: mProducedIn value: - /Game/FactoryGame/Buildable/Factory/SmelterMk1/Build_SmelterMk1.Build_SmelterMk1_CNo include: needed for the item reference. Items always finishes before Recipes starts. This
alone gets you a real, registered recipe class, but it’s still locked.
Step 4: the Tier-1 schematic (the step that was missing)
Section titled “Step 4: the Tier-1 schematic (the step that was missing)”type: schematicschematics: - id: Schematic_SuperIngot properties: - path: mType value: EST_Milestone - path: mDisplayName value: Super Ingot Production - path: mDescription value: Unlocks production of the Super Ingot. - path: mTechTier value: 1 - path: mTimeToComplete value: 10 - path: mCost value: - ItemClass: /Game/FactoryGame/Resource/Parts/IronIngot/Desc_IronIngot.Desc_IronIngot_C Amount: 20 unlocks: - class: /Game/FactoryGame/Unlocks/BP_UnlockRecipe.BP_UnlockRecipe_C properties: - path: mRecipes value: - /KDataForge/Gen/KDFSample.Gen_KDFSample_Recipe_SuperIngotmType: EST_Milestone+mTechTier: 1is what makes this a Tier 1 HUB milestone: the standard “unlocked early, no MAM required” pattern.- No
include:needed.Recipesalways finishes beforeSchematicsstarts. register: trueis the default, so this schematic (and, via SML’s auto-propagation, the recipe and item it touches) registers intoUModContentRegistryautomatically. The schematic is the only piece in this whole chain you need registration for. See Type: recipe → auto-propagation.
With this file in place, a fresh save now shows “Super Ingot Production” as a purchasable Tier 1
HUB milestone. Purchasing it unlocks Recipe_SuperIngot for the player to build.
Recap: what each file contributes
Section titled “Recap: what each file contributes”| File | type: | Contributes |
|---|---|---|
super-ingot.item.yml | item | The item class itself |
super-ingot-icon.asset.yml | asset | A 2D texture the item references as its icon |
super-ingot.recipe.yml | recipe | A recipe producing the item (registered, but locked) |
super-ingot.schematic.yml | schematic | The unlock: this is what makes it obtainable |
Troubleshooting
Section titled “Troubleshooting”- Item still not appearing after adding the schematic: run
/kdf reportand confirm all four documents applied with no errors. A typo’d generated-class path (missing pack ref, wrong id spelling) is the most common cause, and it’s always visible there. - Icon shows as a checkerboard/missing texture: check that
file:is spelled exactly right and is relative to the pack root (the directory containingpack.yml), not the mod’s own folder. - Recipe exists but isn’t selectable at the smelter: the recipe needs the schematic’s unlock applied. In a fresh save that means actually purchasing “Super Ingot Production” in the HUB.
- Want to unlock a NEW recipe from a schematic that already exists (vanilla or another mod’s, instead of generating your own): that’s a slightly different shape, covered in Adding a Recipe to an Existing Schematic.
For per-document details, use Type: item,
Type: recipe, and
Type: schematic. Data Assets
documents the full type: asset 2D-image mechanism. End-to-End Pack
shows a similar chain with localization and sink points.
