Recipes provide a structured way for players to perform item and block transformations in-game. Every crafting, smelting, brewing, blasting, campfire cooking, smoking, stonecutting and smithing recipe uses this system. Recipes are data driven and can be configured by add-ons.
Recipes can be obtained in various ways. Acquiring an item from the recipe causes the player to automatically discover it. Recipes can also be granted using the /recipe command.
Once a recipe has been discovered, it is added to the player's recipe book.
Discovered recipes can be found in the player's recipe book. However, recipes do not need to be discovered for the player to be able to use them, unless the doLimitedCrafting game rule is enabled. The game rule recipesUnlock can be used to disable the unlocking of recipes, making them all accessible and visible.
Recipes appear in the inventory's recipe book if they are 2ร2 in size, otherwise they will only appear if the player is using a crafting table.
The anvil, cartography table, loom, and grindstone don't use the recipe system; they use different, hardcoded systems for their mechanics.
Vanilla recipes are stored as separate JSON files in the behavior_packs/vanilla/recipes or behavior_packs/<version> /recipes within the game files.
Vanilla recipes can be easily accessed in the behavior_pack/recipes folder on the official sample github for addons.
Custom recipe files are stored in the behavior_packs/<add-on name>/recipes in a add-on, but it is allowed to add the recipe to a subfolder, allowing the creation of new recipes and the editing of vanilla recipes.
Recipe JSON files have different structures depending on their type. These types are listed below.
Represents a crafting recipe with shape in a crafting table, the inventory, and the crafter.
The key used in the pattern can be any single character except the space character , which is reserved for empty slots in a recipe, can also be omitted to accept the recipe format in any location that has enough space. This format is the only format that accepts multiple results.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_shaped: Used to define the recipe type.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String][NBT List / JSON Array] tags: Defines where the recipe can be used. This can be a
crafting_table or a custom crafting table tag.
- [String] group: Optional used only for information as it has no known use.
- [NBT List / JSON Array] pattern: A list of single-character keys used to describe a pattern for creating shapes. Each row in the creation grid is a sequence in this list containing 3 or fewer keys. All strings in this list must have the same number of keys. A space can be used to indicate empty space.
- [NBT Compound / JSON Object] key: All keys used for this crafting recipe with shape.
- [NBT Compound / JSON Object] A key:
- [String] item: Used to define an item or block with the id example
minecraft:emerald_block.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [String] tag: Used to define an item tag example
minecraft:planks also accepts custom tags.
- [NBT List / JSON Array] unlock: Defines the items that unlock the recipe when caught.
- [NBT Compound / JSON Object]:
- [String] item: Used to define an item or block that unlocks the recipe.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [String] tag: Used to set an item tag that unlocks the recipe, also accepts custom tags.
- [String] context: Used to unlock recipes with context currently only known values are
AlwaysUnlocked and PlayerInWater.
- [NBT Compound / JSON Object] result: Defines the recipe result.
- [String] item: Used to define an item or block that you will receive when crafting the recipe.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [Int] count: Optional. Number of items manufactured example
3.
- [Int] priority: Optional, used to give priority if the same recipe exists in duplicate.
Usage example json:
{
"format_version":"1.20.10",
"minecraft:recipe_shaped":{
"description":{
"identifier":"minecraft:cake"
},
"tags":["crafting_table"],
"pattern":[
"AAA",
"BEB",
"CCC"
],
"key":{
"A":{
"item":"minecraft:bucket",
"data":1
},
"B":{
"item":"minecraft:sugar"
},
"C":{
"item":"minecraft:wheat"
},
"E":{
"tag":"minecraft:egg"
}
},
"unlock":[
{
"tag":"minecraft:egg"
}
],
"result":{
"item":"minecraft:cake",
"count":1
}// for single result
"result":[
{"item":"minecraft:cake"},
{"item":"minecraft:bucket","count":3,"data":0}// to have multiple results
]
}
}
Represents a shapeless crafting recipe in a crafting table, inventory and the crafter, and is also used for the stonecutter.
The ingredient list must have at least one and a maximum of nine entries. Unlike a recipe shaped, multiple results are not possible.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_shapeless: Used to set the type recipe shapeless.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String][NBT List / JSON Array] tags: Defines where the recipe can be used. This can be
crafting_table for the crafting table, stonecutter for the stonecutter, or a custom crafting table tag.
- [String] group: Optional used only for information as it has no known use.
- [NBT List / JSON Array] ingredients: All items used for this shapeless crafting recipe.
- [NBT Compound / JSON Object]:
- [String] item: Used to define an item or block with the id example
minecraft:emerald_block.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [String] tag: Used to define an item tag example
minecraft:planks also accepts custom tags.
- [NBT List / JSON Array] unlock: Defines the items that unlock the recipe when purchased.
- [NBT Compound / JSON Object]:
- [String] item: Used to define an item or block that unlocks the recipe.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [String] tag: Used to set an item tag that unlocks the recipe, also accepts custom tags.
- [String] context: Used to unlock recipes with context currently only known values are
AlwaysUnlocked and PlayerInWater.
- [NBT Compound / JSON Object] result: Defines the result of the recipe.
- [String] item: Used to define an item or block that you will receive when crafting the recipe.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [Int] count: Optional. Number of items produced example
3.
- [Int] priority: Optional, used to give priority if the same recipe exists in duplicate.
Crafting table example json:
{
"format_version":"1.20.10",
"minecraft:recipe_shapeless":{
"description":{
"identifier":"minecraft:flint_and_steel"
},
"tags":["crafting_table"],
"ingredients":[
{
"item":"minecraft:iron_ingot"
},
{
"item":"minecraft:flint"
}
],
"unlock":[
{
"item":"minecraft:flint"
},
{
"item":"minecraft:obsidian"
}
],
"result":{
"item":"minecraft:flint_and_steel"
}
}
}
Stonecutter Example Json:
{
"format_version":"1.20.10",
"minecraft:recipe_shapeless":{
"description":{
"identifier":"minecraft:polished_deepslate_stairs_from_cobbled_deepslate_stonecutting"
},
"tags":["stonecutter"],
"ingredients":[
{
"data":0,
"item":"minecraft:cobbled_deepslate"
}
],
"unlock":[
{
"item":"minecraft:cobbled_deepslate"
}
],
"result":{
"count":1,
"data":0,
"item":"minecraft:polished_deepslate_stairs"
},
"priority":0
}
}
Represents a smelting recipe in a furnace, blast furnace, smoker, campfire and the soul campfire.
It is not possible to set the amount of experience you will receive when smelting the item.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_furnace: Used to set the type of smelting recipe.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String][NBT List / JSON Array] tags: Defines where the recipe can be used. It can be
furnace for the standard furnace, blast_furnace for the blast furnace, smoker for the smoker, campfire for the campfire and soul_campfire for the soul campfire. Unlike it does not support custom tags.
- [String] group: Optional used only for information as it has no known use.
- [NBT Compound / JSON Object] input: All items used for this smelting recipe.
- [String] item: Used to define an item or block with the id example
minecraft:diamond_chestplate.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [String] tag: Used to define an item tag example
minecraft:planks also accepts custom tags.
- [NBT List / JSON Array] unlock: Defines the items that unlock the recipe, but without use as there is no recipe book for smelting blocks.
- [NBT Compound / JSON Object]:
- [String] item: Used to define an item or block that unlocks the recipe.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [String] tag: Used to set an item tag that unlocks the recipe, also accepts custom tags.
- [String] context: Used to unlock recipes with context currently only known values are
AlwaysUnlocked and PlayerInWater.
- [NBT Compound / JSON Object] output: Defines the result of the recipe.
- [String] item: Used to define an item or block that you will receive when crafting the recipe.
- [String] data: Optional. Integer or Molang expression for dynamic variants.
- [Int] count: Optional. Number of items manufactured example
3.
- [Int] priority: Optional, used to give priority if the same recipe exists in duplicate.
Usage example json:
{
"format_version":"1.20.10",
"minecraft:recipe_furnace":{
"description":{
"identifier":"minecraft:furnace_log"
},
"unlock":[
{
"tag":"minecraft:logs_that_burn"
}
],
"tags":["furnace"],
"input":{
"tag":"minecraft:logs_that_burn"
},
"output":{
"item":"minecraft:charcoal",
"count":1
},
"priority":-1
}
}
Represents a smithing recipe at a smithing table for adding trims.
It is not possible to create a custom one this is for documentation purposes only.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_smithing_trim: Used to set the type of smithing recipe.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String][NBT List / JSON Array] tags: Defines where the recipe can be used. It can be
smithing_table it does not support custom tags.
- [NBT Compound / JSON Object] template: Used to define a template.
- [String] tag: Used to set an item tag using
minecraft:trim_templates but has no effect on custom items with that tag.
- [NBT Compound / JSON Object] base: Defines the base items that will be used.
- [String] tag: Used to set an item tag for the recipe being used
minecraft:trimmable_armors Using this tag on a custom item allows the custom armor to be trimmed.
- [NBT Compound / JSON Object] addition: Used to define a material.
- [String] tag: Used to set an item tag for the recipe being used
minecraft:trim_materials using this tag on a custom item has no effect.
Usage example json:
{
"format_version":"1.20.10",
"minecraft:recipe_smithing_trim":{
"description":{
"identifier":"minecraft:smithing_armor_trim"
},
"tags":["smithing_table"],
"template":{
"tag":"minecraft:trim_templates"
},
"base":{
"tag":"minecraft:trimmable_armors"
},
"addition":{
"tag":"minecraft:trim_materials"
}
}
}
Represents a smithing recipe at a smithing table to perform a upgrading.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_smithing_transform: Used to set the type of smithing recipe.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String][NBT List / JSON Array] tags: Defines where the recipe can be used. It can be
smithing_table it does not support custom tags.
- [String] template: Used to define a netherite upgrade accepting custom items if they have the item tag
minecraft:transform_templates.
- [String] base: Defines the base items that will be used, the custom item needs to have the item tag
minecraft:transformable_items.
- [String] addition: Used to define a base material, custom items with the
minecraft:transform_materials tag can be placed, however it does not work. The only truly valid item is the netherite ingot with the id minecraft:netherite_ingot.
- [String] result: Used to set an item as a recipe result.
Usage example json:
{
"format_version":"1.20.10",
"minecraft:recipe_smithing_transform":{
"description":{
"identifier":"minecraft:smithing_netherite_chestplate"
},
"tags":["smithing_table"],
"template":"minecraft:netherite_upgrade_smithing_template",
"base":"minecraft:diamond_chestplate",
"addition":"minecraft:netherite_ingot",
"result":"minecraft:netherite_chestplate"
}
}
Represents a brewing recipe on a brewing stand.
Vanilla potions use this system minecraft:potion_type:<potion_effect> can be added long_ or strong_ for other types like minecraft:potion_type:strong_poison also accepted is minecraft:potion, minecraft:splash_potion and minecraft:lingering_potion.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_brewing_mix: Used to set the fermentation recipe type.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String][NBT List / JSON Array] tags: Defines where the recipe can be used.
brewing_stand does not support custom tags.
- [String] input: Item used for this brew recipe, supports custom items and vanilla items in the format mentioned above.
- [String] reagent: Used to define an item or block that is used as an ingredient also supports custom items.
- [String] output: Recipe result item, supports custom items and vanilla items in the format mentioned above.
Usage example json:
{
"format_version":"1.20.10",
"minecraft:recipe_brewing_mix":{
"description":{
"identifier":"minecraft:brew_awkward_poison"
},
"tags":["brewing_stand"],
"input":"minecraft:potion_type:awkward",
"reagent":"minecraft:spider_eye",
"output":"minecraft:potion_type:poison"
}
}
Represents a brewing recipe focused on changing one type into another in a brewing stand.
Vanilla potions use this system minecraft:potion_type:<potion_effect> can be added long_ or strong_ for other types like minecraft:potion_type:strong_poison also accepted is minecraft:potion, minecraft:splash_potion and minecraft:lingering_potion.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_brewing_container: Used to set the fermentation recipe type.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String][NBT List / JSON Array] tags: Defines where the recipe can be used.
brewing_stand does not support custom tags.
- [String] input: Item used for this brewing recipe, unlike the mix only supports vanilla potions items in the format mentioned above.
- [String] reagent: Used to define an item or block that is used as an ingredient also supports custom items.
- [String] output: Recipe result item, supports custom items and vanilla items in the format mentioned above.
Usage example json:
{
"format_version":"1.20.10",
"minecraft:recipe_brewing_container":{
"description":{
"identifier":"minecraft:brew_potion_sulphur"
},
"tags":["brewing_stand"],
"input":"minecraft:potion",
"reagent":"minecraft:gunpowder",
"output":"minecraft:splash_potion"
}
}
This page describes an education-related feature.
Represents a Minecraft Education recipe in a material reducer.
- [NBT Compound / JSON Object]: The root tag.
- [String] format_version: Used to set the version your recipe should work on e.g.
1.20.10.
- [NBT Compound / JSON Object] minecraft:recipe_material_reduction: Used to set the recipe type of the material reducer.
- [NBT Compound / JSON Object] description: Required in any type of recipe, it contains the identifier of a recipe.
- [String] identifier: Required to detect the recipe in-game. The namespace can be omitted, but it is highly recommended to avoid conflicts.
- [String] tags: Defines where the recipe can be used.
material_reducer does not support custom tags.
- [String] input: Item used for this recipe.
- [NBT List / JSON Array] output: Defines the result of the recipe.
- [NBT Compound / JSON Object]:
- [Int] count: Optional. Number of items as result example
3.
- [String] item: Used to define an item or block that you will receive when crafting the recipe.
Usage example json:
{
"format_version":"1.14",
"minecraft:recipe_material_reduction":{
"description":{
"identifier":"minecraft:cobblestone_wall:4"
},
"input":"minecraft:andesite_wall",
"output":[
{
"count":33,
"item":"minecraft:element_14"
},
{
"count":64,
"item":"minecraft:element_8"
},
{
"count":3,
"item":"minecraft:element_8"
}
],
"tags":"material_reducer"
}
}
Issues relating to "Recipe (Bedrock Edition)" are maintained on the bug tracker. Issues should be reported and viewed there.