Wiki 9Minecraft Wiki 9Minecraft

Recipes (Crafting, Smelting, Brewing)

Define custom crafting grid, furnace, and potion brewing recipes in a behavior pack.

5Sections
3Code examples
3Known errors

Recipe files in a Bedrock behavior pack control how players transform items at crafting tables, furnaces, brewing stands, and stonecutters. You reach for them whenever you introduce a custom item or block that needs a survival acquisition path, or when you want to add new shortcuts for vanilla items. Each recipe lives in its own JSON file inside the `BP/recipes/` folder.

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 KeyWhat it doesNotes
minecraft:recipe_shapedGrid recipe where ingredient positions matter.Used for 2x2 inventory crafting and 3x3 crafting tables.
minecraft:recipe_shapelessGrid recipe where only the ingredient counts matter.Used for crafting tables, stonecutters, and cartography tables.
minecraft:recipe_furnaceSingle-input cooking recipe.Used for furnaces, blast furnaces, smokers, and campfires.
minecraft:recipe_brewing_mixCombines a reagent with a base potion to make a new potion.Used at the brewing stand.
minecraft:recipe_brewing_containerChanges a potion bottle type (e.g., normal to splash).Used at the brewing stand.
minecraft:recipe_smithing_transformUpgrades 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`.

BP/recipes/emerald_sword.json
{
  "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.

BP/recipes/flint_from_gravel.json
{
  "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.

BP/recipes/smelt_rotten_flesh.json
{
  "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 StringStationsTypical Recipe Schema
crafting_tableCrafting Table (and 2x2 inventory if pattern fits)recipe_shaped, recipe_shapeless
stonecutterStonecutterrecipe_shapeless
furnaceFurnacerecipe_furnace
blast_furnaceBlast Furnacerecipe_furnace
smokerSmokerrecipe_furnace
campfireCampfirerecipe_furnace
soul_campfireSoul Campfirerecipe_furnace
brewing_standBrewing Standrecipe_brewing_mix, recipe_brewing_container
smithing_tableSmithing Tablerecipe_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 seeWhyThe 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.