Open the file to import it, turn the behavior pack on in your world (the resource pack comes with it), then run /give @s custom:ruby.

{
"format_version": "1.21.100",
"minecraft:item": {
"description": {
"identifier": "custom:ruby",
"menu_category": {
"category": "items"
}
},
"components": {
"minecraft:icon": {
"textures": {
"default": "custom_ruby"
}
},
"minecraft:display_name": {
"value": "Ruby"
},
"minecraft:max_stack_size": {
"value": 64
}
}
}
}Every item becomes a file in the behavior pack that lists its components: the name, the stack size, what it does when eaten, worn or swung. The resource pack holds the icons, the atlas that tells the game which icon belongs to which item, and for armor an attachable that draws it on the player using the same render setup the game's diamond armor uses. Both packs ship in one .mcaddon, and the behavior pack depends on the resource pack, so turning on one turns on both.
Each kind of item was loaded on a Bedrock Dedicated Server 1.26.52, and the server read every item back through its scripting API to confirm the durability, food values and tags came through as written. None of them logged a content error.
Picking a tier fills in the game's own numbers, read from Bedrock rather than copied from Java. A diamond tool lasts 1,561 uses and a gold one 32, the same as the vanilla items on the server. Damage came from watching it: a zombie holding each vanilla tool hit a caged villager, and its bare-hand hit of 3 was taken off. That gives a diamond sword 7 extra damage, an axe 6, a pickaxe and a hoe 5 and a shovel 4. Netherite is one more across the board, iron one less, stone and copper two less, and wood and gold three less.
Tools also carry the tags the vanilla ones do. A custom pickaxe gets the pickaxe tag and its tier's tag, the same pair a vanilla pickaxe of that tier has, and its mining speed applies to every block the game tags as pickaxe-breakable, which is how the vanilla blocks mark it too. Armor gets vanilla's armor points and durability for its tier: a diamond helmet is 3 points and 363 durability. For ready-made recipes and loot on Bedrock, the recipe creator and loot table builder download add-ons too.
Open the .mcaddon to import it, then edit your world, go to Behavior Packs and turn the pack on; the resource pack with the icons and armor textures turns on with it. In the world, run /give @s followed by the item's ID, like /give @s custom:ruby_sword. Cheats need to be on for /give.
Opening a .mcaddon imports it on Windows, Android and iOS. Consoles can't open files, so add the pack to a world on one of those devices and upload the world to a Realm, which consoles can join.
16 by 16 pixels, like the game's own items. Any square PNG works, and pixel art stays sharp because Bedrock scales item icons without smoothing. A picture that isn't square gets stretched to fit.
Armor on Bedrock is drawn from a 64 by 32 texture laid out like the vanilla armor layers. Helmets, chestplates and boots read the first layer layout and leggings the second, so start from the vanilla file for the piece you're making, paint over it and upload it under Looks like when worn.
The damage field is what the item adds to a punch, the same way vanilla weapons work. A sword with 7, the diamond tier's value, hits for 8 damage (four hearts), just like a diamond sword. A custom sword and the vanilla one were checked against each other on a Bedrock server and hit for exactly the same amount.