File structure and recipe types
All recipe files belong in `BP/recipes/`. Subfolders are allowed and strongly recommended once your pack grows past a dozen items. The filename itself does not matter to the game engine, as long as the `identifier` inside the `description` block is unique across all loaded packs.
Every recipe file starts with a `format_version` and a root object named after the exact recipe type. Bedrock separates recipes into distinct schema types depending on the crafting logic required, while the `tags` array inside the recipe dictates which physical block (such as a crafting table, furnace, or stonecutter) actually hosts the recipe.
| Root Key | What it does | Notes |
|---|---|---|
| minecraft:recipe_shaped | Grid recipe where ingredient positions matter. | Used for 2x2 inventory crafting and 3x3 crafting tables. |
| minecraft:recipe_shapeless | Grid recipe where only the ingredient counts matter. | Used for crafting tables, stonecutters, and cartography tables. |
| minecraft:recipe_furnace | Single-input cooking recipe. | Used for furnaces, blast furnaces, smokers, and campfires. |
| minecraft:recipe_brewing_mix | Combines a reagent with a base potion to make a new potion. | Used at the brewing stand. |
| minecraft:recipe_brewing_container | Changes a potion bottle type (e.g., normal to splash). | Used at the brewing stand. |
| minecraft:recipe_smithing_transform | Upgrades gear using a template, base item, and addition. | Used at the smithing table. |
Shaped crafting recipes
A `minecraft:recipe_shaped` file maps single-character symbols to item identifiers and arranges them in a `pattern` array. The `pattern` can be up to 3 strings long, with each string up to 3 characters wide. Spaces in the pattern represent empty slots in the crafting grid. All strings in a single pattern must have the exact same character length.
Beginning in format version 1.20.10, recipes require an `unlock` array so the recipe book knows when to reveal the recipe to the player. You can unlock a recipe when the player picks up a specific item, or by passing a context string like `PlayerInWater`.
{
"format_version": "1.20.10",
"minecraft:recipe_shaped": {
"description": {
"identifier": "my_pack:emerald_sword"
},
"tags": [
"crafting_table"
],
"pattern": [
"E",
"E",
"S"
],
"key": {
"E": {
"item": "minecraft:emerald"
},
"S": {
"item": "minecraft:stick"
}
},
"unlock": [
{
"item": "minecraft:emerald"
}
],
"result": {
"item": "my_pack:emerald_sword",
"count": 1
}
}
}Shapeless and stonecutter recipes
Use `minecraft:recipe_shapeless` when the arrangement of items in the grid does not matter. Instead of a pattern and key, you provide an `ingredients` array. You can list up to nine individual items, or use the `count` property on an ingredient object to require multiple copies of the same item.
Stonecutter recipes also use the `minecraft:recipe_shapeless` schema. By changing the tag from `crafting_table` to `stonecutter` and providing a single ingredient, the recipe will appear in the stonecutter interface instead of the crafting grid.
{
"format_version": "1.20.10",
"minecraft:recipe_shapeless": {
"description": {
"identifier": "my_pack:flint_from_gravel"
},
"tags": [
"crafting_table"
],
"ingredients": [
{
"item": "minecraft:gravel",
"count": 2
}
],
"unlock": [
{
"item": "minecraft:gravel"
}
],
"result": {
"item": "minecraft:flint",
"count": 1
}
}
}Furnace and cooking recipes
Smelting and cooking use `minecraft:recipe_furnace`. They take a single `input` item and produce a single `output` item. You cannot specify output counts or custom cook times in a standard furnace recipe; the speed and fuel cost are strictly governed by the block hosting the recipe.
To make a single recipe work across standard furnaces, blast furnaces, or smokers, list all the relevant station strings inside the `tags` array.
{
"format_version": "1.20.10",
"minecraft:recipe_furnace": {
"description": {
"identifier": "my_pack:smelt_rotten_flesh"
},
"tags": [
"furnace",
"smoker",
"campfire",
"soul_campfire"
],
"input": "minecraft:rotten_flesh",
"output": "minecraft:leather"
}
}Crafting station tags and item data
The `tags` array is the bridge between your recipe file and the block that executes it. If you create a custom crafting bench using the `minecraft:crafting_table` block component, you define a custom tag in that component and then put that exact same string into the `tags` array of your recipes.
When matching ingredients or defining results for vanilla items that still use auxiliary data values (such as potions or dyes in certain contexts), you can append `:data` to the identifier string (like `minecraft:potion:4`) or add a `"data": 0` integer property inside the item object. For modern items and blocks, always prefer their flattened identifier over numerical data values.
| Tag String | Stations | Typical Recipe Schema |
|---|---|---|
| crafting_table | Crafting Table (and 2x2 inventory if pattern fits) | recipe_shaped, recipe_shapeless |
| stonecutter | Stonecutter | recipe_shapeless |
| furnace | Furnace | recipe_furnace |
| blast_furnace | Blast Furnace | recipe_furnace |
| smoker | Smoker | recipe_furnace |
| campfire | Campfire | recipe_furnace |
| soul_campfire | Soul Campfire | recipe_furnace |
| brewing_stand | Brewing Stand | recipe_brewing_mix, recipe_brewing_container |
| smithing_table | Smithing Table | recipe_smithing_transform |
Which versions this applies to
Applies to Bedrock Edition 1.20.10 and newer. No experimental toggles are required for standard recipes or custom crafting tags. Note that format_version 1.20.10 and above strictly enforce the 'unlock' requirement for shaped and shapeless crafting recipes.
When it does not work
| What you see | Why | The fix |
|---|---|---|
| Recipe does not appear in the recipe book or cannot be crafted when format_version is 1.20.10 or higher, and Content Log warns about missing 'unlock' field. | Starting in 1.20.10, the recipe book system requires an explicit unlock condition on shaped and shapeless recipes. Without it, the parser rejects the file. | Add an "unlock" array containing at least one item object (e.g., [{"item": "minecraft:stick"}]) or lower the format_version to "1.12.0" if you want the recipe unlocked at all times without conditions. |
| Content Log error: "[Recipes] pattern rows must be the same length" and the shaped recipe fails to load. | One string in the "pattern" array has fewer characters than another (for example, ["AAA", " B ", "B"]). | Pad the shorter strings with space characters so every string in the "pattern" array has the exact same length (e.g., change "B" to " B "). |
| Recipe loads without Content Log errors, but placing the ingredients into the crafting table produces nothing. | Either the "tags" array is missing "crafting_table", or one of the item identifiers in "key" or "result" is misspelled or missing its namespace. | Verify that "tags": ["crafting_table"] is present, and double-check that every custom item includes its namespace prefix and every vanilla item uses its current flattened identifier. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
