data/mypack/recipe/custom_recipe.json{
"type": "minecraft:crafting_shaped",
"pattern": [
" "
],
"key": {},
"result": {
"id": "minecraft:stone"
}
}The recipe creator above lets you build custom Minecraft recipes visually: pick your items from the full item database, arrange them on a crafting grid or select a processing type, set the output, and export valid JSON for your datapack. No JSON editing by hand required.
Custom recipes are one of the most common datapack features. Whether you want to make diamond blocks craftable from emeralds, add new smelting recipes for custom items, or create entirely new crafting paths, the recipe system is fully data-driven in Java Edition. Vanilla Minecraft already has 1,515 recipes across 11 types, and you can add as many more as you want.
This tool supports all 7 primary recipe types that datapacks can define: shaped crafting, shapeless crafting, smelting, blasting, smoking, stonecutting, and smithing transform. The visual editor handles the JSON structure so you can focus on game design rather than syntax.
.json file in your datapack's data/namespace/recipe/ directory. The filename becomes the recipe ID.Each recipe type has its own JSON structure and is processed by a specific crafting station:
| Type | Station | Key Fields | Example Use |
|---|---|---|---|
| Shaped | pattern, key, result | Custom tools, blocks, armor | |
| Shapeless | Crafting Table | ingredients, result | Dye mixing, item conversion |
| Smelting | ingredient, result, experience, cookingtime | Custom material processing | |
| Blasting | ingredient, result, experience, cookingtime | Fast ore processing | |
| Smoking | ingredient, result, experience, cookingtime | Custom food cooking | |
| Stonecutting | ingredient, result, count | Block variant conversion | |
| Smithing Transform | template, base, addition, result | Gear upgrades with templates |
Shaped recipes use a pattern array of strings (up to 3 rows of 3 characters) and a key object mapping each character to an item or tag. Shapeless recipes just need an ingredients array, where order does not matter.
Instead of specifying minecraft:oak_planks as an ingredient, use the tag #minecraft:planks. This lets any plank type work in your recipe, making it feel more natural and compatible with other datapacks that add new wood types.
To change an existing recipe, create a file at data/minecraft/recipe/ with the same filename as the vanilla recipe. Your version replaces the original. For example, data/minecraft/recipe/diamond_sword.json overrides the diamond sword recipe.
Vanilla recipes show in the recipe book when you pick up a relevant ingredient (those 1,492 hidden recipe advancements handle this). For custom recipes, create a matching advancement with an inventory_changed trigger that grants the recipe as a reward. This way players discover your recipe naturally.
Your datapack should have this structure: mypack/pack.mcmeta at the root, and recipes at mypack/data/namespace/recipe/my_recipe.json. Use /reload after adding or modifying recipe files to apply changes without restarting.
Create a datapack with recipe JSON files placed in data/namespace/recipe/. Each JSON file defines one recipe with a type (shaped, shapeless, smelting, etc.), ingredients, and a result. Load the datapack by placing it in your world's datapacks folder or using /datapack enable.
Minecraft supports 7 main custom recipe types: shaped crafting (pattern-based 3x3 grid), shapeless crafting (any arrangement), smelting (furnace), blasting (blast furnace), smoking (smoker), stonecutting (stonecutter), and smithing_transform (smithing table with template, base, and addition).
Yes. Instead of specifying a single item ID, you can reference a tag using the # prefix (for example #minecraft:planks). The recipe will accept any item in that tag as a valid ingredient. This makes recipes more flexible and compatible with other datapacks that add items to tags.
Use the same namespace and path as the vanilla recipe. For example, to change the diamond sword recipe, create data/minecraft/recipe/diamond_sword.json in your datapack with your custom recipe definition. The datapack's version replaces the vanilla one when loaded.
Only if you create a matching recipe-unlock advancement. Vanilla recipes use hidden advancements that grant the recipe when you pick up an ingredient. Create an advancement with an inventory_changed trigger and a recipes reward to replicate this behavior.
Browse more Minecraft tools: