Recipes as data assets
Specific items or any item with a tag ("any wood"), tools that are needed but not used up, several outputs with chances, failure with partial refunds, max batch, craft time, station types.
Recipes are data assets. Crafters queue jobs in batches, stations keep working while the player walks away, fuel burns, ingredients come from nearby chests, recipes are learned or discovered, and jobs survive save games. All server-authoritative and replicated, with editor checks that catch recipes players could exploit.
The plugin's example map and crafting menu in your browser: same items, recipes, stations and starting bag. Smelt ingots at the Forge (a lucky craft makes an extra one), make a Hammer and a Pickaxe at the Workbench and see which recipe that teaches you, then Salvage what you made or Track a recipe for the HUD.
Swipe sideways to see the whole map.
Most crafting on Fab comes inside an inventory pack, and you have to adopt that inventory to get it. Craftwright talks to inventories through one small interface: use the built-in replicated inventory, implement the interface on your own in Blueprint or C++, or start from the Lyra adapter template.
Inventory adaptersCraftwright Inventory interface
Get Item Count (Item)How many of the item the inventory holds (used when ingredients are taken and for fuel).Get ItemsEverything it holds that maps to Craftwright items. Every ingredient check and discovery use it, so it must list them all.Remove Items (Item, Count)Remove up to Count, return how many were removed. Server only.Add Items (Item, Count)Add up to Count, return how many were added. Server only.Get Room For (Item)How many more fit.Search, category tabs, locked recipes with how to unlock them, a salvage mode, key hints that follow the device, and a HUD tracker for pinned recipes that shows what is still missing. C++ base classes hold the logic; the example widgets are plain Widget Blueprints you restyle in the UMG designer, and every text is a property you can change and localize.
Specific items or any item with a tag ("any wood"), tools that are needed but not used up, several outputs with chances, failure with partial refunds, max batch, craft time, station types.
Batches of N units, one job after another, cancel with refunds, an output tray for results that fit nowhere. Ingredients are taken when a job is queued, so they cannot be spent twice.
Workbench, forge, campfire: a type, a speed (optionally times the crafter's own speed), its own queue that keeps running when the player leaves, a range checked on the server, fuel, a power hook, linked chests and a pull radius.
A recipe can have a Bonus Chance of a lucky unit that makes extra items: its Bonus Outputs, or its outputs once more. The crafter's Crafting Luck multiplies it, or an attribute with the GAS module.
Players take a salvageable item apart where it is made, for part of its ingredients (50 % by default, rounded down; tools are not given back) or for scrap you choose. Salvage has its own time, and the checks catch salvage loops that duplicate items.
A station runs at its Get Station Speed (override it in Blueprint), times the crafter's own speed when Use Crafter Speed is on. The GAS station reads a speed attribute of the station actor: an upgraded forge, a buff.
Always known, learned from scrolls, trainers, quests or another recipe, or discovered the first time the crafter carries something for each ingredient. Limited uses for one-shot blueprints.
Server-authoritative requests, fast-array replication (owner-only where it should be), smooth progress bars on clients without per-frame traffic. Tested with a dedicated server.
Plain structs for any save system. Time that passed while the game was closed is caught up on load, with an optional limit.
Three stations (two burn fuel), a shared ore chest, resource nodes, 16 items with icons and 10 recipes that show every feature.
Conditions (skills, levels, quests) and effects (XP, stats, achievements) are objects you subclass in Blueprint or C++. The optional GAS module adds ability tags and attributes as conditions, attribute costs paid at craft start, Gameplay Effects and events after each craft, crafting speed and luck from attributes, and station speed from the station's own attribute.
A panel with every recipe, item and finding. The checks follow recipes from item to item and report chains that give back more than they take, like smelting 2 ore into an ingot and scrapping the ingot into 3 ore; salvage and lucky crafts count too. The same checks run in Data Validation, on the build server and from Python.
| Check | What it finds | Severity |
|---|---|---|
| Duplication loop | A chain of recipes that gives back more than it takes (Ore → Ingot → 2 Ore): players could make endless items. Salvage and the expected share of lucky crafts count. | Error |
| Salvage gives back more | Craft one, salvage it, and get more of an ingredient back than it took. | Error |
| No outputs, empty output, empty ingredient | Recipes that cannot work as data, bonus and salvage outputs included. | Error |
| Discovered recipe without ingredients | A recipe that can never be discovered. | Error |
| Unknown tag, 0% output, uses up nothing, 100% failure, salvage gives nothing | Recipes that work, but surely not as meant. | Warning |
| Not in a recipe book, empty book or entry, empty condition or effect | Content nobody can reach. | Warning |
| Loop without gain, learned recipe nothing teaches, no unlock hint, item without icon | Smelting and dismantling loops, and details worth a look. | Suggestion |
The real HTML report Craftwright exported from its showcase project, with a few recipes broken on purpose. Filter it, and switch your system to dark mode.
Export recipes to CSV or JSON, rebalance them in a sheet and import them back: you see every recipe it creates or changes before anything is saved, and columns you leave out keep their values. The commandlet fails a build on recipe errors.
Import and exportRecipe,CraftTime,Ingredients,Outputs
Recipe_Planks,2,1 #Item.Material.Wood,3 Plank
Recipe_Nails,1.5,1 IronIngot; 1 Hammer (tool),8 Nails
Recipe_Salvage,4,1 Sword,2 IronIngot; 1 Stick @50%UnrealEditor-Cmd.exe MyGame.uproject -run=TACraftwright ^
-Paths=/Game/Crafting ^
-Formats=html,json ^
-FailOn=Error
rem Rebalance craft times from a spreadsheet, preview first:
UnrealEditor-Cmd.exe MyGame.uproject -run=TACraftwright ^
-Import=Balance/recipes.csv -DryRunimport unreal
craftwright = unreal.get_editor_subsystem(unreal.TACraftwrightEditorSubsystem)
report = craftwright.scan_paths(["/Game/Crafting"])
for finding in report.findings:
print(finding.severity, finding.rule_id, finding.asset_name, finding.message)
craftwright.export_report(report, "", ["html"])
result = craftwright.import_recipes("C:/Balance/recipes.csv", True) # dry runSold on Fab under the Fab Standard License. Both licenses get the same plugin: every feature and the full C++ source, for Unreal Engine 5.0 – 5.8.
Craftwright is available on Fab now.
For individuals and companies with up to $100,000 in gross revenue in the last 12 months.
For companies with more than $100,000 in gross revenue in the last 12 months.
Need several seats or a studio agreement? Contact us.
The Fab Personal license is $9.99: individuals and companies with up to $100,000 in gross revenue in the last 12 months. Above that, the Professional license is $29.99. Both get the same plugin with every module, the example content and the full C++ source.
No. Craftwright works with any inventory that implements its five-function interface, in Blueprint or C++. The built-in inventory is there for projects without one, for station fuel and chests, and for the example map.
Yes. Requests go from the player's crafter to the server and are checked there: recipe known, station, range, conditions, queue space, ingredients. Jobs, trays, known recipes and inventories replicate. It was tested with a dedicated server and a client.
Yes. Crafting, stations, conditions, effects, save data and the UI base classes are all Blueprint-ready, and inventory adapters can be written in Blueprint too.
Yes. The menu takes focus when it opens: the D-pad moves through the recipes and changes the amount, A crafts, B closes, the shoulder buttons switch category tabs, X tracks a recipe. Every key can be changed, key hints follow the device in use, and your own input (Enhanced Input, CommonUI) can drive the menu through one function.
No. The GAS module is optional. It adds GAS-based conditions, costs and effects, crafting speed and luck from attributes, and station speed from the station's own attribute.
An adapter template for the Lyra inventory ships as source to copy into a Lyra project. It is written against the Lyra 5.6 inventory API, so check it against your Lyra version.
Yes, with their progress, and time that passed while the game was closed can be caught up on load, with an optional limit.
Yes. Mark a recipe as salvageable and players can salvage its item where it is made, by hand or at its station, for part of the ingredients or for scrap items you choose. The editor checks that salvaging never gives back more than crafting used.
The runtime modules run on Windows, Mac, Linux, Android and iOS; the editor tools in the Windows, Mac and Linux editor. Unreal Engine 5.0 to 5.8.