Wiki 9Minecraft Wiki 9Minecraft

Vanilla Block Tags Reference

Using built-in tags to integrate custom blocks with vanilla tools, mobs, and Molang.

5Sections
3Code examples
3Known errors

Vanilla block tags are string labels built into Minecraft Bedrock that group blocks by material, tool affinity, or gameplay function. Applying these tags to your custom blocks lets them interact with existing game systems, such as taking increased mining speed from vanilla pickaxes or matching Molang queries, without requiring custom scripts or modifications to vanilla item files.

How Block Tags Work in Bedrock

In Bedrock Edition, block tags are defined directly inside the block's behavior file rather than in separate tag JSON files. A tag is added as an empty object inside the components block, prefixed with tag:. Because the tag itself acts as the component key, it takes no internal parameters.

When you apply a vanilla tag to a custom block, you are opting that block into whatever hardcoded or data-driven checks the base game runs against that tag. The most common reason to do this is tool compatibility. Vanilla pickaxes, axes, shovels, and hoes check for specific material and tier tags on the block being mined to decide whether to apply their speed multiplier.

If you create a custom stone or ore block and give it a mining time via minecraft:destructible_by_mining, a vanilla pickaxe will still mine it at hand speed unless the block carries the tags the pickaxe looks for. Adding the right vanilla tags bridges your custom content with the base game's equipment.

BP/blocks/custom_copper_ore.json
{
  "format_version": "1.20.80",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:custom_copper_ore"
    },
    "components": {
      "minecraft:destructible_by_mining": {
        "seconds_to_destroy": 3.0
      },
      "tag:minecraft:is_pickaxe_item_destructible": {},
      "tag:stone": {},
      "tag:stone_tier_destructible": {}
    }
  }
}

Tool Affinity and Mining Tier Tags

Over several updates, Bedrock has transitioned from simple legacy material tags to more explicit item-destructible tags. Depending on the format version and which vanilla or custom tools you want to support, it is safest to include both the modern minecraft:is_*_item_destructible tag and the older material tag.

The modern tags control whether a tool class speeds up mining at all, while tier tags indicate the minimum tool quality meant for the block. Note that while vanilla tools check these tags for mining speed, controlling whether a block drops its loot when broken with the wrong tier often still requires checking the player's held item inside your custom loot table or script, as tag enforcement for drops is not automatic across all tags.

Below are the primary tags used by vanilla blocks for tool and tier matching.

Tag ComponentWhat it doesNotes
tag:minecraft:is_pickaxe_item_destructibleMarks the block to be mined faster by pickaxes.Modern standard; requires the minecraft: namespace inside the tag name.
tag:minecraft:is_axe_item_destructibleMarks the block to be mined faster by axes.Use alongside tag:wood for full backwards compatibility.
tag:minecraft:is_shovel_item_destructibleMarks the block to be mined faster by shovels.Commonly paired with tag:dirt or tag:sand.
tag:minecraft:is_hoe_item_destructibleMarks the block to be mined faster by hoes.Used on leaves, hay, and sculk-like blocks.
tag:stone_tier_destructibleIdentifies the block as requiring at least a stone tool.No minecraft: namespace after tag:.
tag:iron_tier_destructibleIdentifies the block as requiring at least an iron tool.Used on gold, redstone, and diamond ores.
tag:diamond_tier_destructibleIdentifies the block as requiring at least a diamond tool.Used on obsidian and ancient debris.

Material and Categorization Tags

Beyond tool classes, vanilla blocks carry broad material tags. These were the original way tools checked for valid targets, and many vanilla entity behaviors, animations, and older add-on items still query them.

Adding these alongside the modern tool tags costs nothing and prevents edge cases where an entity or an older custom tool fails to recognize your block as wood, stone, or plant matter.

Tag ComponentWhat it doesNotes
tag:stoneGroups the block with general stone blocks.Legacy pickaxe target; still queried by various vanilla systems.
tag:woodGroups the block with planks, logs, and wooden structures.Legacy axe target.
tag:metalGroups the block with metallic blocks like iron and copper.Often combined with pickaxe destructible tags.
tag:dirtGroups the block with soil blocks.Used by certain plant placement checks and legacy shovels.
tag:sandGroups the block with sand and red sand.Queried by desert-related behaviors and placement rules.
tag:plantIdentifies vegetation.Useful for custom bushes, flowers, and crops.
tag:logIdentifies tree trunks and stems.More specific than tag:wood.

Querying Block Tags in Molang and Custom Tools

Block tags are not passive labels; you can read them actively in your own pack. In Molang expressions, such as inside entity behavior filters or block placement conditions, you can check whether a block has a specific tag using query.block_has_any_tag or query.block_has_all_tags.

If you are creating a custom tool using the minecraft:digger item component, you can also target vanilla tags in the destroy_speeds array. Instead of listing dozens of individual vanilla and custom block identifiers, a single condition expression using query.any_tag lets your custom tool mine every vanilla and custom block that shares those tags.

BP/items/heavy_mattock.json
{
  "format_version": "1.20.80",
  "minecraft:item": {
    "description": {
      "identifier": "wiki:heavy_mattock"
    },
    "components": {
      "minecraft:max_stack_size": 1,
      "minecraft:digger": {
        "use_efficiency": true,
        "destroy_speeds": [
          {
            "block": {
              "tags": "query.any_tag('wood', 'dirt', 'plant', 'minecraft:is_axe_item_destructible', 'minecraft:is_shovel_item_destructible')"
            },
            "speed": 8
          }
        ]
      }
    }
  }
}

Applying Tags Per Permutation

Because tags are components, they can be placed inside the permutations array of a custom block just like geometry or collision boxes. This allows a block to change its material or tool affinity dynamically based on its block states.

For example, a custom block that shifts from a soft clay state to a hardened stone state can use permutations to swap out tag:minecraft:is_shovel_item_destructible for tag:minecraft:is_pickaxe_item_destructible. When the state changes in the world, the game immediately respects the new tag set.

BP/blocks/hardening_mud.json
{
  "format_version": "1.20.80",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:hardening_mud",
      "states": {
        "wiki:hardened": [false, true]
      }
    },
    "components": {
      "minecraft:destructible_by_mining": {
        "seconds_to_destroy": 2.0
      }
    },
    "permutations": [
      {
        "condition": "!q.block_state('wiki:hardened')",
        "components": {
          "tag:dirt": {},
          "tag:minecraft:is_shovel_item_destructible": {}
        }
      },
      {
        "condition": "q.block_state('wiki:hardened')",
        "components": {
          "tag:stone": {},
          "tag:minecraft:is_pickaxe_item_destructible": {}
        }
      }
    ]
  }
}

Which versions this applies to

Applies to Bedrock Edition 1.19.50 and newer in stable releases. The modern item destructible tags (such as tag:minecraft:is_pickaxe_item_destructible) require a block format_version of 1.20.60 or higher to work reliably with all vanilla tools. No experimental toggles are required.

When it does not work

What you seeWhyThe fix
Vanilla pickaxe mines the custom block at hand speed despite having tag:is_pickaxe_item_destructible.The modern tool destructible tags require the minecraft: namespace after the tag: prefix, unlike legacy tags such as tag:stone.Change the component key from "tag:is_pickaxe_item_destructible": {} to "tag:minecraft:is_pickaxe_item_destructible": {}.
Content Log error: [Blocks][error]-wiki:custom_block | block_tags | tag components cannot have values.You placed a boolean or string inside the tag component (for example, "tag:stone": true) instead of an empty JSON object.Ensure every tag component is assigned an empty object: "tag:stone": {}.
Custom digger item fails to load or ignores the tags string in destroy_speeds.Inside the minecraft:digger component's tags field, you included the "tag:" prefix inside query.any_tag(), such as query.any_tag('tag:stone').Omit the "tag:" component prefix when querying tags in Molang or digger components. Write query.any_tag('stone', 'minecraft:is_pickaxe_item_destructible').

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.